begin process at 2010 03 18 04:55:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Delphi

 > 

Divers

 > 

Aide et documentation

 > 

Comparaison de strings sans tenir compte des accents


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comparaison de strings sans tenir compte des accents

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ée 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


Appels d'offres

Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,699 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales