Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Comparaison de strings sans tenir compte des accents [ Divers / Aide et documentation ] (ThWilliam)

samedi 12 avril 2008 à 16:21:38 | Comparaison de strings sans tenir compte des accents

ThWilliam

Membre Club

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).

Merci d'avance

Thierry


samedi 12 avril 2008 à 19:10:18 | Re : Comparaison de strings sans tenir compte des accents

Delphiprog

Administrateur CodeS-SourceS
Réponse acceptée !
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 !

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

samedi 12 avril 2008 à 19:59:12 | Re : Comparaison de strings sans tenir compte des accents

ThWilliam

Membre Club

Hé oui, si Delphi lui-même n'a pas d'autre solution...
je ne me casse plus la tête !

Merci à toi, Delphiprog


lundi 14 avril 2008 à 16:49:23 | Re : Comparaison de strings sans tenir compte des accents

florenth

Membre Club
Salut,

J'arrive un peu tard mais bon, si tu en as l'envie et le temps, tu peux jeter un oeil sur ces différents algorithmes de recherche de sous-chaîne sur Wikipedia : http://fr.wikipedia.org/wiki/Liste_des_algorithmes#Texte

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.

Cela dit, je ne garantis rien..
A+
Flo

mardi 15 avril 2008 à 18:33:31 | Re : Comparaison de strings sans tenir compte des accents

ThWilliam

Membre Club
Salut Florent,

Merci pour ce lien qui semble très intéressant.

A +
Thierry



Cette discussion est classé dans : fonction, accents, comparaison, compte, norm


Répondre à ce message

Sujets en rapport avec ce message

Comparaison de chaînes de caractères [ par John Dogget ] Bonsoir à tous.Je cherche une fonction me permettant de trouver si une chaîne S2 se trouve dans une chaîne S1, le tout sans respect de la casse (si po recherche sans tenir compte des accents [ par lnicos ] Voilà j'ai fait un programme gérant une base de donnée(interbase), et lorsque j'effectue des recherche dans cette base, j'aimerais que les résultats f fonction directe pour enlever les accents d'une chaine [ par jeanfre ] bonjour, ma question est trés simple, existe-t-il sous delphi6 une fonction permettant de supprimer les accents ds un chaine de caractere ?merci.JF contraste d image [ par valkyrie ] bonjour a tous et a toutesje suis debutantje dois realiser une fonction graphique noir et blanc permettant de faire varier les niveaux de noir et de b fonction result TStrings [ par florenth ] Imaginez une fonction tres simple :function Transfert(memo : TMemo) : TStrings;var i : integer;beginfor i:=0 to memo.Lines.Count - 1 do result.Add(m kylix :Start et Stop d'une fonction via un bouton [ par yvespa ] Bonjour,J'aimerai lancer une fonction de longue durée (acquisition de données) via un bouton Start et pouvoir l'arrêter via un bouton Stop.Le problème PostMessage / SendMessage [ par phoenyx ] Salut,j'ai besoin d'intéroger une fonction d'un objet (dont je n'ai pas les sources) d'une form et j'ai besoin de son résultat. J'utilise donc SendMes Utilisaiton de variable avec la fonction Ord [ par aLTsn3ak3r ] Salut!J'ai une variable et j'ai essayé d'utiliser ma variable dans Ordet jai utiliser la fonction copy pour qu'il insert dnas la variable jsute la pre La perte de congfiguration des composant delphi [ par yafou ] c'est une question un peu spéciphiqueje sais que trop de gens ne comprendront pas ce que je raconte ou son utilisté mais je compte trop sur Delphiprog Tester si un nombre reel est entier [ par Sylvainlefou ] boujourJe cherche une fonction qui test si un reel est entier.Ce genre de fonction existe dans d'autres languages sous le nom de "isint" mais je n'est


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,374 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.