Copier certaines lignes d'un memo vers un autre memo [Résolu]

Signaler
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019
-
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
-
Bonjour, je ne parviens pas à copier des lignes comportant les abréviation 'ACK', 'ALM' et 'RTN' d'un mémo vers un autre memo?
Merci de votre aide

7 réponses

Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Bonjour,

Peux-tu mettre un bout de code pour mieux comprendre ce que tu cherches à faire ??

Sinon le code ci-dessous fonctionne pour copier toutes les lignes d'un memo

memo1.Clear;
for i := 0 to memo2.Lines.Capacity do
memo1.Lines.Add(Memo2.Lines[i])

Jderf
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

Bonjour Jderf,
par exemple avec ce code :
<procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer); // Gestion de lecture du port Com
var mess : string;
N : integer;
begin
comport1.ReadStr(mess,count);
memorecept.Lines.Text:= memoRecept.Lines.Text + mess;
memoLog.Lines.BeginUpdate;
try
if pos(#13#10,memoRecept.Lines.Text) <> 0 then
// For N := 0 to memoRecept.Lines.Count - 1 do
Begin
mess := Uppercase (memoRecept.Lines[N]);

if (pos(' ALM ',mess)+ pos(' ACK ',mess)+ pos(' RTN ',mess)) <> 0 then
if memoLog.Lines.IndexOf(mess) = - 1 then
memoLog.Lines.Add(mess);
end;
finally
memoLog.lines.EndUpdate;
end;
end;>

J'obtiens dans le memoRecept qui lit le port com :

03 Sep 2013 08:03:42 ALM DISC BK 2-06-3-07 PAS OBTENUS BD ON

03 Sep 2013 08:03:55 ACK DISC BK 2-06-3-07 PAS OBTENUS BD ON

03 Sep 2013 08:04:01 RTN DISC BK 2-06-3-07 PAS OBTENUS BD ON

03 Sep 2013 08:33:54 EVT LGC INH 1-02-2-18 LANCEMENT MP BD SANS VIRAGE LENT ON

Et dans mon memoLog :

03 SEP 2013 08:03:42 ALM DISC BK 2-06-3-07 PAS OBTENUS BD ON
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

Si je laisse ma boucle for, voici ce que j'obtiens dans mon memoLog :

03 SEP 2013 08:03:42 ALM DISC BK 2-06-3-07 PAS OBTENUS BD ON
03 SEP 2013 08:03:55 ACK DISC BK 2-06
03 SEP 2013 08:03:55 ACK DISC BK 2-06-3-07 PAS OBTE
03 SEP 2013 08:03:55 ACK DISC BK 2-06-3-07 PAS OBTENUS BD
03 SEP 2013 08:03:55 ACK DISC BK 2-06-3-07 PAS OBTENUS BD
03 SEP 2013 08:03:55 ACK DISC BK 2-06-3-07 PAS OBTENUS BD ON
03 SEP 2013 08:04:01 RTN DISC BK
03 SEP 2013 08:04:01 RTN DISC BK 2-06-3-07 PAS
03 SEP 2013 08:04:01 RTN DISC BK 2-06-3-07 PAS OBTENUS BD
03 SEP 2013 08:04:01 RTN DISC BK 2-06-3-07 PAS OBTENUS BD
03 SEP 2013 08:04:01 RTN DISC BK 2-06-3-07 PAS OBTENUS BD ON
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Ok, et tu souhaites obtenir quoi dans ton memolog ? Cela ?

03 SEP 2013 08:03:42 ALM DISC BK 2-06-3-07 PAS OBTENUS BD ON
03 SEP 2013 08:03:55 ACK DISC BK 2-06-3-07 PAS OBTENUS BD ON
03 SEP 2013 08:04:01 RTN DISC BK 2-06-3-07 PAS OBTENUS BD ON
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

Oui exactement cela.
As tu une idée?
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
Bonjour,

Tu reçois dans le flux des caractères de fin de ligne et cela pose problème avec ceux ajouter pour chaque ligne dans le Tmemo

L'idée c'est de gérer un tampon pour le flux, d'identifier les lignes complètes et donc de traiter dans MemoRecep et MemoLog que des lignes complètes.

  comport1.ReadStr(mess,count);
 // voir peut-être pour utiliser un compo plus basic pour le tampon Tedit ou Tlabel, voir même une varibale global de type string 
  MemoTampon.Lines.Text := MemoTampon.Lines.Text + mess;

  posFinLigne :=  pos(#13#10,MemoTampon.Lines.Text);

  if posFinLigne <> 0 then
    begin
      // Au moins une ligne dans le tampon
      // Ajout de la ligne à MemoRecept
      MemoRecept.Lines.Add(Copy(MemoTampon.Lines.Text, 0, posFinLigne-1));

      // Mise à jour du tampon
      MemoTampon.Lines.Text := RightStr(MemoTampon.Lines.Text, (Length(MemoTampon.Lines.text)-posFinLigne-1));

      // Traitement de la ligne (A voir pour ne pas retraiter tous le meorecep a chaque nouvelle ligne)
      MemoLog.clear;
      For N := 0 to memoRecept.Lines.Count - 1 do
        if (pos(' ALM ',memoRecept.lines[N])+ pos(' ACK ',memoRecept.lines[N])+ pos(' RTN ',memoRecept.lines[N])) <> 0 then
          MemoLog.Lines.Add(memoRecept.lines[N]);
    end;



J'ai pas pu tester, a voir si c'est un peu mieux comme cela.
Bon courage

Jderf
Messages postés
43
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
17 décembre 2019

Merci pour ton aide.
Il me donne une erreur : [Error] Unit1.pas(117): Undeclared identifier: 'RightStr' ?
Messages postés
189
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
uses StrUtils;