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

 Delphi Discussion :

Enlever les accents d'une chaine de caractères


Sujet :

Delphi

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut Enlever les accents d'une chaine de caractères
    salut

    j'aimerais enlever tous les accents de ma chaine

    j'ai cherché sur le forum et aucune réponse; j'espère que ça existe

    j'ai pensé à mettre en majuscule puis en minuscule, mais ça ne fonctionne pas

    car un "à" = "Á"

    si ça peut vous aider, la chaine retourné sera en minuscule

    @++

  2. #2
    Membre éclairé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    785
    Détails du profil
    Informations personnelles :
    Âge : 83
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 785
    Par défaut
    Bonjour,

    J'ai bien peur que non. J'ai aussi cherché et n'ai rien trouvé. J'en ai été réduit à faire une recherche caractère par caractère et à remplacer 'à' par 'a', etc.

    C'est un peu longuet à écrire, mais il n'y a, heureusement, pas trop d'accents en francais. Mais si une solution autre existe, je prends.

    Bon courage et si tu veux des idées de code, à ta disposition !

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 740
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 740
    Par défaut Peut être avec une fonction !
    @Coussati, voici l'exemple de plusieurs fonctions, à tester :

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
     
    unit FonctionsChaine;
     
    interface
     
     
    function droite(substr: string; s: string): string;
    function DroiteDroite(substr: string; s: string): string;
    function gauche(substr: string; s: string): string;
    function GaucheDuDernier(substr: string; s: string): string;
    function NbSousChaine(substr: string; s: string): integer;
    function NDroite(substr: string; s: string;n:integer): string;
    function GaucheNDroite(substr: string; s: string;n:integer): string;
    function StrReplace(Substr,replace,s:string):string;
     
    implementation
     
    function StrReplace(Substr,replace,s:string):string;
    {============================================================================}
    {remplace toutes les sous-chaines Substr par replace                         }
    { ex : StrReplace ('toto', 'tata', 'le toto est ..') renvoie 'le tata est ..'}
    {============================================================================}
    var ChaineSource,ChaineCible:string;
        i,TailleChaineRemplacement:integer;
    begin
      ChaineSource:=s;
      ChaineCible:='';
      TailleChaineRemplacement:=length(Substr);
      while pos(Substr,ChaineSource)>0 do  //tant que l'on trouve une sous-chaine
      begin
        i:=pos(Substr,ChaineSource)-1; // position de la sous-chaine à remplacer
        ChaineCible:=ChaineCible+copy(ChaineSource,1,i)+replace;
        delete(ChaineSource,1,i+TailleChaineRemplacement);//on retire de chaineTemp
      end;
      Result:=ChaineCible+ChaineSource;
    end;
     
    function droite(substr: string; s: string): string;
    {============================================================================}
    {Renvoie ce qui est à droite d'une sous chaine de caractères                 }
    { ex : Droite('aa', 'phidelsaacom') renvoie com                              }
    {============================================================================}
     
    begin
      if pos(substr,s)=0 then result:='' else
        result:=copy(s, pos(substr, s)+length(substr), length(s)-pos(substr, s)+length(substr));
    end;
     
    function droiteDroite(substr: string; s: string): string;
    {============================================================================}
    { fonction qui renvoie la sous chaine de caractère situè à droite de la sous }
    { chaine substr située la plus à droite                                      }
    { ex: si substr = '\' et S= 'truc\tr\essai.exe droiteDroite renvoie essai.exe}
    {============================================================================}
    begin
      Repeat
        S:=droite(substr,s);
      until pos(substr,s)=0;
      result:=S;
    end;
     
    function gauche(substr: string; s: string): string;
    {============================================================================}
    { fonction qui renvoie la sous chaine de caractère situè à gauche de la sous }
    { chaine substr                                                              }
    { ex: si substr = '\' et S= 'truc\tr\essai.exe' gauche renvoie truc           }
    {============================================================================}
    begin
      result:=copy(s, 1, pos(substr, s)-1);
    end;
     
    function GaucheDuDernier(substr: string; s: string): string;
    {============================================================================}
    { fonction qui renvoie la sous chaine de caractère situèe à gauche de la     }
    {dernière sous chaine substr                                                 }
    { ex: si substr = '\' et S= 'truc\tr\essai.exe' gauche renvoie truc\tr       }
    {============================================================================}
    var
     s1:string;
     i:integer;
    begin
      s1:='';
      for i:=1 to NbSousChaine(substr, s)-1 do
      begin
        s1:=s1+gauche(substr,s)+substr;
        s:=droite(substr,s);
      end;
      s1:=s1+gauche(substr,s);
      result:=s1;
    end;
     
    function NbSousChaine(substr: string; s: string): integer;
    {==================================================================================}
    { renvoie le nombre de fois que la sous chaine substr est présente dans la chaine S}
    {==================================================================================}
    begin
      result:=0;
      while pos(substr,s)<>0 do
      begin
        S:=droite(substr,s);
        inc(result);
      end;
    end;
     
    function NDroite(substr: string; s: string;n:integer): string;
    {==============================================================================}
    { renvoie ce qui est à droite de la n ieme sous chaine substr de la chaine S   }
    {==============================================================================}
    var i:integer;
    begin
      for i:=1 to n do
      begin
        S:=droite(substr,s);
      end;
      result:=S;
    end;
     
    function GaucheNDroite(substr: string; s: string;n:integer): string;
    {==============================================================================}
    { renvoie ce qui est à gauche de la droite de la n ieme sous chaine substr     }
    { de la chaine S                                                               }
    { ex : GaucheNDroite('/','c:machin\truc\essai.exe',1) renvoie 'truc'           }
    { Permet d'extraire un à un les éléments d'une chaine séparés par un séparateur}
    {==============================================================================}
    var i:integer;
    begin
      S:=S+substr;
      for i:=1 to n do
      begin
        S:=copy(s, pos(substr, s)+length(substr), length(s)-pos(substr, s)+length(substr));
      end;
      result:=copy(s, 1, pos(substr, s)-1);
    end;
    end.
    @+,

    Cincap

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut
    JP.NUAGE c'est vraiment domage que ça n'existe pas ! surtout qu'on est pas les seuls à avoir cherché !

    tu peux me donner le code que tu as utilisé stp ? ça m'évitera de me prendre la tête avec les a, à, i, ï, î, ect ...


    cincap tes fonctions c'est plus pour traiter des chaines non ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6 003
    Par défaut
    Voici une fonction pour supprimer les accents. Il faut en fait faire exploser la chaîne avec FoldString:

    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
    function RemoveDiacritics(aValue: string): string;
    var
      Tmp :string;
      Len :integer;
      i   :Integer;
    begin
      Len := FoldString(MAP_COMPOSITE, PChar(aValue), -1, nil, 0);
      SetLength(Tmp, Len);
      FoldString(MAP_COMPOSITE, PChar(aValue), -1, PChar(Tmp), Len);
     
      Result := '';
      for i := 1 to Length(Tmp) do
        if IsCharAlphaNumeric(Tmp[i]) then
          Result := Result +Tmp[i];
    end;

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 740
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 740
    Par défaut
    @ Coussati, oui mais d'une fonction on peut y trouver le déclick sinon un simple exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    Var St:string;
    i:integer;
    begin
    St:= 'medium';
    for i:=1 to Length(St) do
    if St[i]='e' then St[i]:='é'; //Remplace le 'e' par le 'é' ou vice versa
    Label1.Caption:=St;
    end;
    La solution de AndNotOr est digne du professionnel.

    @+,

    Cincap

  7. #7
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut enlever des accents rapidement
    Salut,

    Sujet déjà optimisé ici : http://www.developpez.net/forums/d37...lever-accents/

    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  8. #8
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 257
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 257
    Par défaut
    Salut !

    Mon grain de sel : puis-je savoir pourquoi, dans la mesure où, en français, « l'accent a pleine valeur orthographique » (je cite l'académie française) ?

    Et comment tu vas faire la différence entre modèle et modelé, ou entre relève et relevé, par exemple, si tu fais pêter les accents, mmmh ?

  9. #9
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 594
    Par défaut
    Salut,
    à mon avis cela peut être utile si tu veux envoyer un mail en étant sûr qu'à la réception, les caractères accentués ne se transforment pas en caractères bizarres en fonction du réglage du logiciel de messagerie.

    Sinon je ne vois pas ...

    A+

    Charly

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 6 003
    Par défaut
    L'academie française recommande aussi de mettre les accents sur les majuscules, ce qui est rarement le cas .

    Ce genre de manipulation trouve tout son intérêt dans des fonctions d'aide à la saisie. Cela permet de retrouver un mot dans un dictionnaire quelle que soit sa case et d'outrepasser les erreurs d'accentuation (modèle et modelé seraient proposés en résultat). C'est en tout cas dans ce contexte que j'utilise cette fonction .

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    893
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 893
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Salut !

    Mon grain de sel : puis-je savoir pourquoi, dans la mesure où, en français, « l'accent a pleine valeur orthographique » (je cite l'académie française) ?

    Et comment tu vas faire la différence entre modèle et modelé, ou entre relève et relevé, par exemple, si tu fais pêter les accents, mmmh ?
    à la base c'était pour empêcher un membre de s'inscrire avec un pseudo avec accent, donc si "modele" est pris, le membre choisira autre chose

    merci à vous tous pour votre contribution

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/08/2010, 13h29
  2. eliminer les espaces d'une chaine de caractères
    Par wassim_kh dans le forum Langage
    Réponses: 1
    Dernier message: 14/07/2006, 11h20
  3. enlever les 0 devant une chaine
    Par linux dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/03/2006, 11h06
  4. enlever les '0' devant une chaine
    Par linux dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/03/2006, 19h12
  5. Retirer les accents d'une chaine avec MySQL
    Par orus8 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/02/2006, 16h47

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