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

marin1617 42 Messages postés samedi 3 août 2013Date d'inscription 15 août 2014 Dernière intervention - 4 sept. 2013 à 15:13 - Dernière réponse : jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention
- 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 

Votre réponse

8 réponses

jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 4 sept. 2013 à 15:49
0
Utile
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
marin1617 42 Messages postés samedi 3 août 2013Date d'inscription 15 août 2014 Dernière intervention - 4 sept. 2013 à 16:38
0
Utile
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
marin1617 42 Messages postés samedi 3 août 2013Date d'inscription 15 août 2014 Dernière intervention - 4 sept. 2013 à 16:41
0
Utile
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
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 4 sept. 2013 à 16:51
0
Utile
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
marin1617 42 Messages postés samedi 3 août 2013Date d'inscription 15 août 2014 Dernière intervention - 4 sept. 2013 à 17:19
0
Utile
Oui exactement cela.
As tu une idée?
Commenter la réponse de marin1617
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 5 sept. 2013 à 11:33
0
Utile
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
marin1617 42 Messages postés samedi 3 août 2013Date d'inscription 15 août 2014 Dernière intervention - 5 sept. 2013 à 14:36
0
Utile
Merci pour ton aide.
Il me donne une erreur : [Error] Unit1.pas(117): Undeclared identifier: 'RightStr' ?
jderf 192 Messages postés mercredi 29 décembre 2004Date d'inscription 2 octobre 2014 Dernière intervention - 5 sept. 2013 à 16:01
uses StrUtils;
Commenter la réponse de marin1617

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.