Remplacer un caractère par un autre dans un RichEdit [Résolu]

Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
- - Dernière réponse :  TheDelph - 17 oct. 2013 à 13:13
Bonjour,

Comment puis je remplacer un caractère spécial (ex : $F8) par ($27) dans un RichEdit
Je travail autour de ce code :

richEditRecept.Lines.Add(trameCp);  // ecriture dans le RicheditRecept
            Cpt_Evt := Cpt_Evt + 1;
            if (Pos(' $F8 ', TrameCp)) <> 0 then
             // TrameCp := '$27 ' ;
Afficher la suite 

10 réponses

Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
0
Merci
Salut,

Utilise "StringReplace" !
(voir aide en ligne de Delphi)
Commenter la réponse de korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
0
Merci
Au fait, je te fais remarquer que tu veux remplacer une chaîne (string) par une autre, pas un caractère :-p
Commenter la réponse de korgis
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
8
0
Merci
Salut,

var TramCptramecp :string;
    p:integer;
begin
   p:= pos( chr($F8), trameCp);
   if p>0 then
   begin
      TrameCp := copy(TrameCp, 1, p-1) +
          chr($27) + copy(TrameCp, p+1, l-p);
      RichEdit1.lines[xxx] := TrameCp;
   end;     

Bonne journée.
solilog
Commenter la réponse de solilog
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
0
Merci
Salut,

pas la peine de faire aussi lourd pour changer un caractère:

var TrameCp :string;
    p:integer;
begin
  p:= pos( chr($F8), TrameCp);
  if p>0 then
    // si le caractère est présent on le remplace
    TrameCp[p] := chr($27);
  // dans tous les cas la trame est ajoutée
  RichEdit1.lines.Add(TrameCp);
end;


Commenter la réponse de Cirec
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
Et attention à l'unicode !

Commenter la réponse de f0xi
Messages postés
273
Date d'inscription
samedi 13 juin 2009
Statut
Membre
Dernière intervention
18 avril 2015
8
0
Merci
Oups,
Oui F0xi tu as raison je l'ai pourtant fait 100 fois
(à part ta dernière parenthèse):
RichEdit1.lines.Add(TrameCp) );
Mais je pense qu'il se plante sur le $27, il veut mettre un escape chr(27) et il met $27 chr(39).

solilog
Commenter la réponse de solilog
Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
10
0
Merci
Salut
Et AnsiReplaceStr ne pourrait il pas être utilisé ?
Commenter la réponse de dubois77
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32
0
Merci
Et attention à l'unicode !
Delphi le gère très bien et en toute transparence avec le code que j'ai donné ;-)
Et AnsiReplaceStr ne pourrait il pas être utilisé ?
si mais AnsiReplaceStr utilise StringReplace qui se trouve être très lent et particulièrement gourmand en ressources
Commenter la réponse de Cirec
Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
0
Merci
Un grand merci à CIREC pour son code qui fonctionne très bien et à solilog, fOxi, dubois77 et korgis pour leur aide.
Voici mon code :

 procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
    NouveauMsg : string;
    PosEndTrame,i,p : Integer;
 begin
 {*** lecture du port com 1  ***}
     ComPort1.ReadStr(NouveauMsg, Count);

    MonMessage := MonMessage + NouveauMsg;
    MonMessage := Uppercase(MonMessage);
    PosEndTrame := Pos(#13, MonMessage);
    if PosEndTrame <> 0 then
        while PosEndTrame <> 0 do
        begin
            TrameCp := Copy(MonMessage, 0, PosEndTrame -1);
            //richEditRecept.Lines.Add(trameCp);  // ecriture dans le RicheditRecept
            //Inc (Cpt_Evt);
        { *** Remplacement du caractère $F8 par $B0 ***}
            p := pos( chr($F8), TrameCp);
              if p>0 then
                TrameCp[p] := chr($B0);
                richEditRecept.Lines.Add(TrameCp);
                Inc (Cpt_Evt);

        { *** Mis en couleur de certaines lignes et écriture dans les RichEdit respectif  *** }
             if (pos(' OPR ', TrameCP)) <> 0 then
                begin
               RichEdit_OPR.SelAttributes.Color := clBlue;
               RichEdit_OPR.Lines.Add(TrameCp);
               Inc (Cpt_Alm_Inhi);

                end;
             if (Pos(' ALM ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clred ;
                  richEditLog.Lines.Add(TrameCp);
                  Inc (Cpt_ALM);

                end;
              if (Pos(' ACK ', TrameCp)) <> 0 then
                begin
                   //RichEditLog.SelAttributes.Color := $000080FF; // Orange
                   RichEditLog.SelAttributes.Color := clTeal;
                   richEditLog.Lines.Add(trameCp);
                end;
              if (Pos(' RTN ', TrameCp)) <> 0 then
                begin
                  RichEditLog.SelAttributes.Color := clLime;
                  RichEditLog.Lines.Add(trameCp);
                end;
    MonMessage := Copy(MonMessage, PosEndTrame +1, Length(MonMessage));
            PosEndTrame := Pos(#13, MonMessage);

        end;
end;
Commenter la réponse de marin1617
Commenter la réponse de TheDelph