J'ai besoin d'écrire un programme qui va parcourir des chaînes de différentes longueurs et sélectionner uniquement celles qui sont écrites en utilisant des symboles d'ensemble définis par moi (en particulier les lettres japonaises). Les chaînes contiendront des mots écrits en différentes langues (allemand, français, arabe, russe, anglais, etc.). Évidemment, il y a énormément de caractères possibles. Je ne sais pas quelle structure utiliser pour ça? J'utilise Delphi 7 en ce moment. Quelqu'un peut-il suggérer comment écrire un tel programme?Travailler avec des chaînes Unicode dans Delphi 7
Répondre
De toute évidence, vous seriez mieux avec Delphi 2010, puisque la VCL de Delphi 7 n'est pas au courant des chaînes Unicode. Vous pouvez utiliser les types WideString et WideChar dans Delphi 7, et vous pouvez installer un ensemble de composants comme les composants TNT Unicode pour vous aider à créer une interface utilisateur capable d'afficher vos résultats.
Pour un type à très grand ensemble, pensez à utiliser un tableau de bits comme TBits. Un tableau de longueur 65536 suffirait à contenir tous les points de code UTF-16. Vérifier si Char X est Set Y, serait essentiellement:
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;
Je vous recommande également de passer à Delphi 2010 (pourquoi embêter avec 2009 plus?)!
Si dans le cas improbable où vous êtes coincé avec Delphi 7, le Unicode Library de Mike Lischke peut être utile.
le lien est brisé maintenant – CyprUS
@CyprUS, fixe! –
Pour le traitement simple des chaînes de la manière que vous décrivez, ne soyez pas rebutés par des suggestions selon lesquelles vous devriez effectuer la mise à niveau vers la dernière version du compilateur et du framework Unicode. Le support Unicode lui-même est bien sûr fourni par l'API Windows sous-jacente qui est bien sûr (directement) accessible à partir de versions "non-Unicode" de Delphi tout autant que de "versions Unicode".
Je suppose que la plupart, sinon la totalité du support Unicode dont vous avez besoin pour les objectifs décrits dans votre question peuvent être obtenus à partir du support Unicode fourni au the JEDI JCL.
Pour tout support de composants visuels dont vous pourriez avoir besoin, le TNT control set a l'appel d'être gratuit.
+1, excellent argument. Le code dans la réponse acceptée compile et fonctionne parfaitement dans Delphi 4 même. – mghie
Maintenant, même Delphi est divisé en Traddies et les gens à jour. –
Je préfère penser à «faire le travail avec le minimum de tracas, déranger et dépenser» les gens et «changer pour changer les choses sans penser à ce qui est réellement nécessaire» les gens. :) – Deltics
- 1. Delphi 7, gestion XML avec support Unicode
- 2. travailler avec de Delphi
- 3. Tri des chaînes Unicode
- 4. Insérer des caractères Unicode dans MySQL avec Delphi 2010
- 5. Vous cherchez une bonne bibliothèque de chaînes Unicode Delphi
- 6. GetStackTrace dans Delphi 7?
- 7. Virus dans Delphi 7
- 8. Envoyer des chaînes spéciales avec "WriteLn" dans "Indy" (Delphi)
- 9. Enregistrement des chaînes sur le disque sous Delphi 2009
- 10. Comment utiliser l'instruction 'LIKE' avec des chaînes Unicode?
- 11. Lire des chaînes Unicode "crues" en Python
- 12. delphi 7 Objets propriété
- 13. Copie de formules Excel avec Delphi 7
- 14. Commencer à travailler avec RemObjects Pascal Script dans delphi
- 15. Expressions régulières dans les chaînes Unicode
- 16. Comment inclure des chaînes Unicode dans les doctests Python?
- 17. comparer des chaînes et unicode décodé dans python3
- 18. Gestion des valeurs de substitution Unicode dans les chaînes Java
- 19. Travailler avec des fichiers
- 20. Delphi/MySql: problèmes d'échappement des chaînes
- 21. Delphi 7 héritage
- 22. convert pour delphi 2010 (unicode)
- 23. ShLwApi.StrFormatByteSize et Delphi 2010 Unicode
- 24. Windows 7 style Notifications Flyouts dans Delphi
- 25. Objet métier persistant Delphi 7
- 26. Travailler avec des sessions
- 27. Gestion d'une chaîne Unicode dans les versions Delphi <= 2007
- 28. Comment appeler correctement GetLongPathName à l'aide de Delphi 2009 et de chaînes Unicode?
- 29. Problèmes avec Aero Glass dans les applications Delphi 7
- 30. Delphi VCL "TaskDialog" problème dans Windows 7
+1 tous les bons bits dans la réponse. bigsets, TNT et recommande de ne pas le faire en D7 du tout. –
J'ai écrit un peu de code plus utile ici pour vous, Tofig –
Une grande fonctionnalité dans Delphi 2010 classe TStringList est la possibilité de charger un fichier à partir du disque, déterminer automatiquement l'encodage UTF8 ou UTF16 à partir des octets, et ainsi de suite. C'est une autre partie de votre tâche, Tofig, qui sera rendue plus délicate sur la version de Delphi antérieure à 2009/2010. –