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
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;
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.
è interrotto ora – CyprUS
@CyprUS, corretto! –
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.
+1, argomento eccellente. Il codice nella risposta accettata viene compilato e funziona perfettamente anche con Delphi 4. – mghie
Ora anche Delphi è diviso tra i Traddies e le persone aggiornate. –
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
- 1. WideString di conversione di stringhe in Delphi 7
- 2. Come disabilitare unicode in Delphi xe2
- 3. lista di stringhe Unicode
- 4. GetStackTrace in Delphi 7?
- 5. Virus in Delphi 7
- 6. Stringhe Unicode in Ruby 1.9
- 7. Correzione di stringhe Unicode difettose
- 8. Utilizzando tscreen in Delphi 7
- 9. parametri in SQL - Delphi 7
- 10. Perché SetString richiede meno memoria in Delphi (con Unicode)?
- 11. Utilizzo di stringhe in C++
- 12. Delphi XE4 stringhe immutabili
- 13. stringhe multipiattaforma (e Unicode) in C++
- 14. Unicode confronto stringhe elementwise in numpy
- 15. Scrittura stringhe unicode in Excel 2007
- 16. lunghezza delle stringhe in Unicode sono diverse
- 17. Scrittura stringhe unicode tramite sys.stdout in Python
- 18. Come confrontare le stringhe Unicode in Javascript?
- 19. Come concatenare più stringhe Unicode?
- 20. Utilizzo dell'unità di stampa in Delphi
- 21. Utilizzo discendente di TOwnedCollection in Delphi
- 22. Java 7 - stringhe multilinea
- 23. Notifiche stile Windows 7 in Delphi
- 24. Impostazione dell'icona EXE in Delphi 7
- 25. facendo un'interfaccia wizard in delphi 7
- 26. Delphi 7 Windows Vista/7 Firewall Eccezione Percorsi di rete
- 27. Delphi 7 GIF in picture Dialog
- 28. Utilizzo di stringhe e stringhe intercambiabili
- 29. Scrittura stringhe unicode in C++ in sqlite DB
- 30. Indy 10 per Delphi 7
+1 tutti i bit validi nella risposta. bigsets, TNT e consiglio di non farlo affatto in D7. –
Per te ho scritto un po 'più utile di codice, Tofig –
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. –