IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

FindFirst et FindNext avec accents


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 79
    Par défaut FindFirst et FindNext avec accents
    Bonjour!

    J'ai un programme qui cherche à l'intérieur de dossier, comme la recherche de Windows.

    J'utilise les méthodes FindFirst et FindNext pour ma recherche. Cependant, lorsque je cherche par exemple un fichier contenant "Établissement" dans son nom et que je tape "etablissement" dans mon programme, il ne trouvera pas le fichier.

    Y-a-t-il solution pour qu'il ne prenne pas en considération les accents? Donc que e = é,è... a = à,â, etc...

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par joce21 Voir le message
    Bonjour!

    J'ai un programme qui cherche à l'intérieur de dossier, comme la recherche de Windows.

    J'utilise les méthodes FindFirst et FindNext pour ma recherche. Cependant, lorsque je cherche par exemple un fichier contenant "Établissement" dans son nom et que je tape "etablissement" dans mon programme, il ne trouvera pas le fichier.

    Y-a-t-il solution pour qu'il ne prenne pas en considération les accents? Donc que e = é,è... a = à,â, etc...

    Merci d'avance.
    pas que je sache...reste la solution de prendre *.* et de filtrer les résultats après coup.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    707
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 707
    Par défaut
    Peut-être avec un soundex ?

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    La Méthode de Paul Toth, est assez simple, comparer a posteriori sans accents le nom de fichier récupéré et le nom voulu
    Un sujet utile : Y-a-t-il plus rapide pour enlever les accents ?

    Tu pourrais utiliser le caractère ?
    Je n'ai jamais testé mais cela permet d'avoir qu'une seule lettre substitué

    remplace tous les accents par ?
    etablissement devrait s'écrire établissement donc ?tablissement
    Si c'est une recherche libre, il te faudrait un dictionnaire, cela semble peu pratique !
    Sinon il faudrait limiter la recherche à une liste de mot prédéfini !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 933
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 933
    Par défaut
    FoldString est la fonction à utiliser

    MAP_COMPOSITE va "exploser" les caractères accentués. Idem pour les ligatures avec MAP_EXPAND_LIGATURES.
    Une boucle de suppression des accents et le tour est joué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function PrepareString(aValue: string): string;
    const
      MAP_EXPAND_LIGATURES = $00002000;
    var
      i :integer;
      //
      function DoFoldString(aMapFlags :cardinal; aText :string) :string;
      var
        Len :integer;
      begin
        Len := FoldString(aMapFlags, PChar(aText), Length(aText), nil, 0);
        SetLength(Result, Len);
        FoldString(aMapFlags, PChar(aText), Length(aText), PChar(Result), Len);
      end;
      //
    begin
      //Supprime les ligatures
      Result := DoFoldString(MAP_EXPAND_LIGATURES, aValue);
     
      //Explose la chaîne en caractères et accents
      Result := DoFoldString(MAP_COMPOSITE, Result);
     
      //Supprime les accents
      for i := Length(Result) downto 1 do
        if not IsCharAlpha(Result[i]) then
          Delete(Result, i, 1);
    end;
    L'avantage ? Ça fonctionne quelque soit la langue, y compris sur des chaînes unicodes

    Edit: Depuis XE, on pourrait encore affiner la boucle de suppression en utilisant les fonctions de l'unité Character.

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    FoldString ! Fallait la connaître et avoir l'idée de nettoyer les accents après ! Joli !
    En plus, j'ai fait une fonction en Delphi 3 qui transformait œ en oe
    Si j'avais su ça en 2004 !

    Faudrait voir les performances de FoldString rapport au meilleur code du sujet Y-a-t-il plus rapide pour enlever les accents ?


    AndNotOr
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. FindFirst, FindNext avec un nom de fichier incomplet
    Par Pouthou dans le forum Débuter
    Réponses: 9
    Dernier message: 26/09/2013, 15h10
  2. [SYBASE] Texte avec accents
    Par vsavoir dans le forum Sybase
    Réponses: 6
    Dernier message: 14/02/2005, 16h50
  3. [JavaMail] Pb avec accent dans sujet et corps de l'email
    Par shaun_the_sheep dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 29/10/2004, 12h42
  4. Problème avec accents et CHARACTER SET ISO8859_1
    Par kinda dans le forum InterBase
    Réponses: 13
    Dernier message: 30/10/2003, 15h49
  5. PB : affichage de données avec accent sous delphi 6
    Par kinda dans le forum Débuter
    Réponses: 3
    Dernier message: 03/07/2003, 13h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo