Copier certaines lignes d'un memo vers un autre memo [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 : jderf
Messages postés
192
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
Afficher la suite 

7 réponses

Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
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
Commenter la réponse de jderf
Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
0
Merci
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
Commenter la réponse de marin1617
Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
0
Merci
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
Commenter la réponse de marin1617
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
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
Commenter la réponse de jderf
Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
0
Merci
Oui exactement cela.
As tu une idée?
Commenter la réponse de marin1617
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1
0
Merci
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
Commenter la réponse de jderf
Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
0
Merci
Merci pour ton aide.
Il me donne une erreur : [Error] Unit1.pas(117): Undeclared identifier: 'RightStr' ?
jderf
Messages postés
192
Date d'inscription
mercredi 29 décembre 2004
Statut
Membre
Dernière intervention
2 octobre 2014
1 -
uses StrUtils;
Commenter la réponse de marin1617