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

Lazarus Pascal Discussion :

Le remplacement de caractères accentués ne fonctionne pas [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut Le remplacement de caractères accentués ne fonctionne pas
    Bonjour,

    J'ai un TMemo dans lequel j'ai un texte avec des caractères accentués. Je souhaite remplacer ces caractères par d'autres.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Avant, Apres : String;
      i : Integer;
    begin
         Avant := 'àéèê';
         Apres := 'aeee';
     
         for i:=1 to Length(Avant) do
         begin
              Memo1.Lines.Strings[0] := StringReplace(Memo1.Lines.Strings[0], Avant[i], Apres[i], [rfReplaceAll]);
         end;
    end;
    Il ne me remplace que le premier caractère accentué trouvé par un caractère bizarre...

    Pouvez-vous m'aider à corriger ce problème ?

    Merci,
    ZiP

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 718
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 718
    Points : 15 098
    Points
    15 098
    Par défaut
    Bonsoir,
    Citation Envoyé par [ZiP] Voir le message
    (...) Pouvez-vous m'aider à corriger ce problème ?
    Non, pour la bonne et simple raison qu'en français, l'accent a pleine valeur orthographique et fait donc partie intégrante du mot.
    Un exemple : l'augmentation des retraites et l'augmentation des retraités ce n'est pas la même chose !

    Pourquoi veux-tu supprimer ces accents ?
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    C'est parce que je dois transférer des fichiers à un système informatique qui n'accepte aucun caractères accentué dans ceux-ci.

    Je pense que mon problème vient de l'encodage de ces caractères mais je ne sais pas comment le corriger.

    Merci,
    ZiP

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par [ZiP] Voir le message
    Je pense que mon problème vient de l'encodage de ces caractères mais je ne sais pas comment le corriger.
    Bonjour !

    Les choses sont expliquées dans ce document.

    Voici un exemple qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
      a: ansistring;
    begin
      s := Memo1.Lines.Text;
      a := UTF8ToAnsi(s);
      a := StringReplace(a, UTF8ToAnsi('é'), UTF8ToAnsi('e'), [rfReplaceAll]);
      s := AnsiToUTF8(a);
      Memo1.Lines.Text := s;
    end;
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 718
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 718
    Points : 15 098
    Points
    15 098
    Par défaut
    Citation Envoyé par [ZiP] Voir le message
    C'est parce que je dois transférer des fichiers à un système informatique qui n'accepte aucun caractère accentué dans ceux-ci.
    Mais qu'est-ce qu'il va faire avec ces fichiers sans accents ? Le problème de la cohérence orthographique des données va se déplacer sur ce système !

    Refuse, ou à tout le moins, exige des explications (car pour moi c'est juste insensé ce plan).

    Sinon, à terme, il y aura des problèmes : une ancienne collègue dont le nom de famille comportait un accent, qui sautait ou pas selon les organismes, a vécu l'enfer.

    [EDIT] Ah, j'ai oublié ça : une tâche (à exécuter) n'a rien à voir avec une tache (sur la chemise). D'où la nécessité des accents. Explique-leur ça...
    Et tiens, en écrivant ça, je suppose que tu dois faire sauter la cédille aussi ? Ben ça va être joli, le résultat [/EDIT]
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jie,
    Citation Envoyé par Jipété Voir le message
    [EDIT] Ah, j'ai oublié ça : une tâche (à exécuter) n'a rien à voir avec une tache (sur la chemise). D'où la nécessité des accents. Explique-leur ça...
    Et tiens, en écrivant ça, je suppose que tu dois faire sauter la cédille aussi ? Ben ça va être joli, le résultat [/EDIT]
    J'aime bien également celui-ci :

    Il est interne à l'hôpital psychiatrique et Il est interné à l'hôpital psychiatrique.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonjour,

    Effectivement, votre exemple fonctionne, je l'ai testé ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Memo1.Lines.Text := AnsiToUTF8(StringReplace(UTF8ToAnsi(Memo1.Lines.Text), UTF8ToAnsi('é'), UTF8ToAnsi('e'), [rfReplaceAll]));
    Cependant, lorsque je souhaite utiliser une chaine contenant plusieurs caractères pour le remplacement, ça ne fonctionne plus :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
       Avant, Apres : String;
       i : Integer;
    begin
         Avant := 'àéèê';
         Apres := 'aeee';
     
         for i:=1 to Length(UTF8ToAnsi(Avant)) do
         begin
              ShowMessage(Avant[i]); // n'affiche rien
              ShowMessage(Apres[i]); // s'affiche correctement
              Memo1.Lines.Text := AnsiToUTF8(StringReplace(UTF8ToAnsi(Memo1.Lines.Text), UTF8ToAnsi(Avant[i]), UTF8ToAnsi(Apres[i]), [rfReplaceAll]));
         end;
    end;
    Merci pour votre aide,
    ZiP

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Effectivement.

    J'ai trouvé la solution suivante.

    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
    uses
      LazUTF8;
     
    procedure TForm1.Button1Click(Sender: TObject);
    const
      AVANT = 'àéèê';
      APRES = 'aeee';
    var
      s: string;
      a: ansistring;
      i: integer;
      c1, c2: string;
    begin
      s := Memo1.Lines.Text;
      a := UTF8ToAnsi(s);
     
      for i := 1 to UTF8Length(AVANT) do
      begin
        c1 := UTF8Copy(AVANT, i, 1);
        c2 := UTF8Copy(APRES, i, 1);
        a := StringReplace(a, UTF8ToAnsi(c1), UTF8ToAnsi(c2), [rfReplaceAll]);
      end;
     
      s := AnsiToUTF8(a);
      Memo1.Lines.Text := s;
    end;
    En attendant mieux !
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  9. #9
    Membre averti
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Points : 381
    Points
    381
    Par défaut
    Bonsoir,

    C'est assez tordu mais ça marche !

    J'ai testé comme ceci chez moi :

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
       Avant, Apres : String;
       i : Integer;
    begin
         Avant := 'àéèê';
         Apres := 'aeee';
     
         for i:=1 to UTF8Length(Avant) do
         begin
              ShowMessage(UTF8Copy(Avant, i, 1));
              ShowMessage(UTF8Copy(Apres, i, 1));
              Memo1.Lines.Text := AnsiToUTF8(StringReplace(UTF8ToAnsi(Memo1.Lines.Text), UTF8ToAnsi(UTF8Copy(Avant, i, 1)), UTF8ToAnsi(UTF8Copy(Apres, i, 1)), [rfReplaceAll]));
         end;
    end;
    Merci !
    ZiP

  10. #10
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 069
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 069
    Points : 15 448
    Points
    15 448
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par [ZiP] Voir le message
    Merci !
    Pas de quoi !

    Une autre proposition, peut-être un peu meilleure.

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      avant, apres, temp: string;
      i: integer;
    begin
      avant := UTF8ToAnsi('àéèê');
      apres := UTF8ToAnsi('aeee');
     
      temp := UTF8ToAnsi(Memo1.Lines.Text);
     
      for i := 1 to Length(avant) do
        temp := StringReplace(temp, avant[i], apres[i], [rfReplaceAll]);
     
      Memo1.Lines.Text := AnsiToUTF8(temp);
    end;
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/07/2009, 16h26
  2. Réponses: 3
    Dernier message: 25/02/2009, 15h59
  3. Remplacer les caractères accentués dans une chaine
    Par shaun_the_sheep dans le forum Général Java
    Réponses: 5
    Dernier message: 07/05/2008, 10h41
  4. Remplacer certains caractères (accentués) par d'autre
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 24/07/2007, 13h05
  5. Probleme de remplacement de caractère accentués
    Par guian dans le forum Langage
    Réponses: 1
    Dernier message: 01/06/2007, 15h06

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