ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 2013
-
12 avril 2008 à 16:21
ThWilliam
Messages postés418Date d'inscriptionmardi 3 janvier 2006StatutMembreDernière intervention26 novembre 2013
-
15 avril 2008 à 18:33
Bonjour à tous.
Mon souci est de comparer deux strings sans tenir compte de la casse ni de l'accentuation.
Jusqu'à présent, j'utilisais une fonction qui met le texte en minuscules et remplaçe les voyelles accentuées par les voyelles normales.
En regardant l'implémentation de la fonction AnsiCompareText, j'ai vu qu'elle employait la fonction Windows "CompareString". En lui ajoutant le flag "NORM_IGNORENONSPACE", la comparaison ne tient plus compte de l'accentuation. Et c'est beaucoup plus rapide !
"ELEPHANT" = "éléphant".
Cela donne :
function MyAnsiCompareText(const S1, S2: string): Integer;
begin
Result := CompareString(LOCALE_USER_DEFAULT, NORM_IGNORECASE or NORM_IGNORENONSPACE,
PChar(S1), Length(S1), PChar(S2), Length(S2)) - 2;
end;
J'aimerais maintenant pouvoir faire une fonction qui détermine si une sous-chaine est présente dans une chaine.
Et donc trouver "elephant" dans "voici deux éléphants".
- L'idéal serait de voir si "AnsiContainsText" (unit StrUtils, je n'ai pas son code) utilise une fonction Windows et si cette fonction accepte un paramètre du genre "NORM_IGNORENONSPACE".
- Sinon, utiliser une fonction de transformation : j'ai vu la fonction Windows "LCMapString", mais je ne parviens pas en jouant avec les paramètres à retourner une chaine sans accents.
- sinon... je continuerai à utiliser ma propre fonction d'enlèvement d'accents (snif).
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 12 avril 2008 à 19:10
Juste pour te permettre d'avancer, voici le code de la fonction AnsiContainsText :
function AnsiContainsText(const AText, ASubText: string): Boolean;
begin
Result := AnsiPos(AnsiUppercase(ASubText), AnsiUppercase(AText)) > 0;
end;
Je t'endends déjà pousser un ouf de soulagement...
May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Ils ne proposent rien quand aux accents mais permettent d'accélérer la recherche comparé aux fonctions de windows si tu fais ces tests dans une boucle, par exemple de la recherche de mots clés ou autre, où seul le texte change et pas la sous-chaîne.