Copier certaines lignes d'un memo vers un autre memo

Résolu
marin1617 Messages postés 43 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019 - 4 sept. 2013 à 15:13
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 - 5 sept. 2013 à 16:01
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

jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
4 sept. 2013 à 15:49
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
0
marin1617 Messages postés 43 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019
4 sept. 2013 à 16:38
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
0
marin1617 Messages postés 43 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019
4 sept. 2013 à 16:41
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
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
4 sept. 2013 à 16:51
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
marin1617 Messages postés 43 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019
4 sept. 2013 à 17:19
Oui exactement cela.
As tu une idée?
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
5 sept. 2013 à 11:33
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
0
marin1617 Messages postés 43 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019
5 sept. 2013 à 14:36
Merci pour ton aide.
Il me donne une erreur : [Error] Unit1.pas(117): Undeclared identifier: 'RightStr' ?
0
jderf Messages postés 189 Date d'inscription mercredi 29 décembre 2004 Statut Membre Dernière intervention 2 octobre 2014 1
5 sept. 2013 à 16:01
uses StrUtils;
0