2010-02-17 13 views
7

Ho bisogno di scrivere un programma che navigherà attraverso stringhe di varie lunghezze e selezionerà solo quelle che sono state scritte usando simboli dal set definito da me (in particolare lettere giapponesi). Le stringhe conterranno parole scritte in diverse lingue (tedesco, francese, arabo, russo, inglese ecc.). Ovviamente c'è un numero enorme di possibili personaggi. Non so quale struttura usare per quello? Sto usando Delphi 7 in questo momento. Qualcuno può suggerire come scrivere tale programma?Utilizzo di stringhe Unicode in Delphi 7

risposta

12

Ovviamente starai meglio con Delphi 2010, poiché il VCL in delphi 7 non è a conoscenza delle stringhe Unicode. È possibile utilizzare i tipi WideString e WideChar in Delphi 7 ed è possibile installare un set di componenti come i componenti Unicode TNT per creare un'interfaccia utente in grado di visualizzare i risultati.

Per un tipo di set molto ampio, è consigliabile utilizzare un array di bit come TBits. Un array di bit della lunghezza 65536 potrebbe contenere abbastanza per contenere ogni punto di codice UTF-16. Verificando Char X è in Set Y, sarebbe fondamentalmente:

function WideCharsInSet(wcstr:WideString; wcset:TBits):Boolean; 
var 
n:Integer; 
wc:WideChar; 
begin 
result := false; 
for n := 1 to Length(wcstr) do begin 
    wc := wcstr[n]; 
    if wcset[Ord(wc)] then 
     result := true; 
end; 
end; 

procedure Demo; 
var 
wcset1:TBits; 
s:WideString; 
begin 
wcset1 := TBits.Create; 
try 
    // 1157 - Hangul Korean codepoint I found with Char Map 
    wcset1[1157] := true;   
    // go get a string value s: 
    s := WideChar(1157); 
// return true if at least one element in set wcset is found in string s: 
    if WideCharsInSet(s,wcset1) then begin 
     Application.MessageBox('Found it','found it',MB_OK); 
    end; 

finally 
    wcset1.Free; 
end; 

end; 
+0

+1 tutti i bit validi nella risposta. bigsets, TNT e consiglio di non farlo affatto in D7. –

+0

Per te ho scritto un po 'più utile di codice, Tofig –

+0

Una grande funzionalità della classe TStringList di Delphi 2010 è la possibilità di caricare un file dal disco, determinare automaticamente la codifica UTF8 o UTF16 dai marcatori di byte e così via. Questa è un'altra parte del tuo compito, Tofig, che sarà reso più complicato dalla versione di Delphi più vecchia del 2009/2010. –

5

Consiglio anche di passare a Delphi 2010 (perché preoccuparsi con il 2009 più?)!

Se nel caso improbabile che si è bloccato con Delphi 7 il Unicode Library da Mike Lischke può essere in qualche modo utile.

+0

è interrotto ora – CyprUS

+0

@CyprUS, corretto! –

5

Per la semplice elaborazione di stringhe nel modo in cui descrivete, non fatevi scoraggiare dai suggerimenti che è necessario aggiornare al più recente compilatore e framework abilitato Unicode. Il supporto Unicode stesso è ovviamente fornito dalla sottostante API di Windows che è (direttamente) accessibile dalle versioni "non Unicode" di Delphi tanto quanto dalle "versioni Unicode".

Sospetto che la maggior parte se non tutto il supporto Unicode necessario per gli scopi illustrati nella domanda possa essere ottenuto dal supporto Unicode fornito in the JEDI JCL.

Per qualsiasi supporto per i componenti visivi, è possibile che lo TNT control set abbia il fascino di essere libero.

+0

+1, argomento eccellente. Il codice nella risposta accettata viene compilato e funziona perfettamente anche con Delphi 4. – mghie

+0

Ora anche Delphi è diviso tra i Traddies e le persone aggiornate. –

+1

Preferisco considerarlo come "portare a termine il lavoro con il minimo disturbo, fastidio e spese" e "cambiare per amore dei cambiamenti senza pensare a ciò che è effettivamente necessario". :) – Deltics