IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Modifier le contenu d'un RichEdit


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut Modifier le contenu d'un RichEdit
    Bonjour,
    Je met dans un RichEdit ce que je lie d'un port Com, et voici ce que j'obtiens:
    1-05-2-01 TEMP. ECHAP. APRES
    H
    C
    4
    H
    5
    A
    0
    U

    D

    I

    ERE RECUP TD OK 373 °C
    Il faudrait lire ceci :
    1-05-2-01 TEMP. ECHAP. APRES CHAUDIERE RECUP TD H450 OK 373 °C

    merci de votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Bin c'est que le texte envoyé dans le RichEdit est truffé de CRLF = #13#10
    Reste donc plus qu'à les supprimer.
    voir ici : http://www.developpez.net/forums/d78...text-richedit/

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Comme Gilbert , je dirais "yaka" mais la source de ces CR/LF est peut être due à la méthode de lecture via le port com
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut Avant tout merci de votre aide!
    Gilbert, pour le #20, c'est une erreur de ma part, j'ai essayé de supprimer les (Space) $20.
    Par contre avec ce code, il ne se passe rien dans mon RichEdit...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    procedure SupprChar(const S : string; var MS : TMemoryStream; CharSuppr : Char);
    const     ibMax = 65536;
    var       ic,ib,transf : integer; buff : array [0..ibMax] of char;
    begin     ib:=-1; transf:=0; MS.Position:=0;
              for ic:=1 to length(S) do
              begin if S[ic] <> CharSuppr
                    then begin inc(ib); buff[ib]:=S[ic]; inc(transf); end;
                    if transf=ibMax+1 then
                    begin MS.Write(buff,transf); ib:=-1; transf:=0; end;
              end;
              if transf<>0 then MS.Write(buff,transf);
    end;
     
     
    procedure TJournaux.SpeedButton3Click(Sender: TObject);
    var       MS : tMemoryStream; i : integer;
    begin     MS := tMemoryStream.create;
              SupprChar(RichEdit_Journaux.Text,MS,#13); // #13 = CR = Carriage Return
              SupprChar(RichEdit_Journaux.Text,MS,#10); // #10 = LF = Line Feed
              MS.Position:=0;
              RichEdit_Journaux.Lines.LoadFromStream(MS);
              MS.Free;

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Bonjour ,

    il y a plus simple pour remplacer les CR/LF , utiliser la fonction StringReplace
    function StringReplace ( const SourceString, OldPattern, NewPattern : string; Flags : TReplaceFlags ) : string;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    var A : String;
    const CRLF : String = #13#10;
    begin
    A:=StringReplace(Memo1.Lines.Text,CRLF,'',[rfReplaceAll]);
    Memo2.Lines.Add(A+CRLF);
    end;
    Question : Pourquoi un TRichEdit ?
    P.S. Merci d'utiliser les balises de code (bouton #) , cela facilite grandement la lecture
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Marin1617 : Gilbert, pour le #20, c'est une erreur de ma part, j'ai essayé de supprimer les (Space) $20.
    Par contre avec ce code, il ne se passe rien dans mon RichEdit...
    S'il ne se passe rien c'est que les caractères parasites sont autre chose que CRLF, donc pour commencer il faut identifier les caractères à supprimer.
    Les identifier avec une boucle de i := 1 à N do ShowMessage(RichEdit_Journaux.Text[i] + ' : ' + IntToStr(Ord(RichEdit_Journaux.Text[i])))
    Du coté du bleu tu verras le ShowMessage afficher les caractères visibles ... et s'il n'est pas visible alors du coté du vert tu verras si c'est du Chr(32) ou autre à supprimer.
    Et puis Space = $20 = #32 = Chr(32) et non #20.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Merci Gilbert,
    Voici ce que j'obtiens :
    1-05-2-01 TEMP. ECHAP. APRES H C 4 H 5 A 0 U D I ERE RECUP TD OK 373 °C

    Il reste beaucoup de #32 à supprimer, et une autre question : comment couper les : H450 pour les coller entre TD et 373
    Frédéric

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Voici ce que j'obtiens :
    1-05-2-01 TEMP. ECHAP. APRES H C 4 H 5 A 0 U D I ERE RECUP TD OK 373 °C

    Il reste beaucoup de #32 à supprimer, et une autre question : comment couper les : H450 pour les coller entre TD et 373
    Bizarre le bordel que la lecture via le port com met dans le mot CHAUDIERE !!!???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Pour transformer : 1-05-2-01 TEMP. ECHAP. APRES H C 4 H 5 A 0 U D I ERE RECUP TD OK 373 °C
    en               : 1-05-2-01 TEMP. ECHAP. APRES CHAUDIERE RECUP TD H450 OK 373 °C
    Je procéderais comme suit :
    1 - vérifier si la lecture via le port com est correcte car le bordel provient peut-être de la lecture,
    si oui ou non alors :
    2 - copier la chaîne à transformer en trois parties : S1 = partie de gauche avec espaces à conserver, S2 = partie du milieu avec espaces à supprimer, et S3 = partie de droite avec espaces à conserver.
    (utiliser la fonction Copy(S; Index, Count: Integer): string
    3 - supprimer les #32 dans la partie S2 avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        po:=pos(#32, S2); // var po : integer;
        while po > 0 do begin Delete(S2, po, 1); po:=pos(#32, S2); end;
    4 - mémoriser les valeurs de H 4 5 0 avant de les supprimer dans S2,
    5 - insérer le H450 mémorisé à sa bonne place dans S3,
    6 - résultat final = S1 + S2 +S3.

    Pour l'étape 4 : vérifier que le bordel positionne toujours les valeurs de H 4 5 et 0 (variables d'une chaudière à l'autre ???) aux mêmes positions dans S2.
    Autre question : est-ce que la partie '1-05-2-01' a toujours la même longueur ???
    Bon, courage.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 030
    Points : 40 928
    Points
    40 928
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par Gilbert Geyer Voir le message
    1 - vérifier si la lecture via le port com est correcte car le bordel provient peut-être de la lecture,
    c'était ma première impression
    Citation Envoyé par SergioMaster
    la source de ces CR/LF est peut être due à la méthode de lecture via le port com
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  10. #10
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Gilbert, la lecture via le port com est correcte car je li sur le même port com d'autres données!
    J'ai essayé de travailler sur le mode de lecture etc, mais, je reçois toujours la même chose, donc il ne me reste plus qu'à modifier le contenu de mon RichEdit. D'ailleurs, un grand merci pour ton aide..
    Par contre je ne pourrais pas tester le code que tu m'as filer avant vendredi prochain... Vivement
    Je te tiens au courant
    Bonne semaine

  11. #11
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Bonjour Gilbert,
    Effectivement la partie '1-05-2-01' est l'adresse de mes alarmes, et elles est toujours de même longueur.
    1-05-2-01

    1-05-2-02
    etc...
    Par contre je vois bien ce que tu voudrai faire mais j'avoue qu'à mon niveau, j'ai du mal à mettre tout cela en forme.

    Je veux bien un coup de main

  12. #12
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Marin1617 : Effectivement la partie '1-05-2-01' est l'adresse de mes alarmes, et elles est toujours de même longueur.
    Donc, on peut en conclure que les longueurs des sous-chaînes S1 = partie de gauche avec espaces à conserver, S2 = partie du milieu avec espaces à supprimer, et S3 = partie de droite avec espaces à conserver, sont toujours de même longueur : Oui/Non ???.

    Par contre je vois bien ce que tu voudrai faire mais j'avoue qu'à mon niveau, j'ai du mal à mettre tout cela en forme.
    Je veux bien un coup de main .
    Puisque tu vois bien comment je le ferais, fais donc un bout de code pour ce que tu sais faire pour les étapes 2 à 6 et on corrigera et compléterons au fur et à mesure.

    Pour l'étape 4 (- mémoriser les valeurs de H 4 5 0) il faudrait que l'on soit certains que ces valeurs soient elles aussi toujours positionnées aux mêmes endroits de la chaîne.???

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  13. #13
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    procedure TJournaux.SpeedButton2Click(Sender: TObject);
    var S1,S2,S3 : string;
    po,pi,pu : integer;
    begin
    fin := length(#13#10);
    S1 := Copy(RichEdit_Copy.Lines.Text,1,29);
      RichEdit_Journaux.Lines.Add(S1);
     
    S2 := Copy(RichEdit_Copy.Lines.Text,31,450);
      po := pos(#32, S2);
      while po > 0 do
        begin
          delete(S2, po, 1);
          po := pos(#32, S2);
        end;
          pi := pos(#10, S2);
             while pi > 0 do
              begin
                delete(S2, pi, 1);
                pi := pos(#10, S2);
              end;
                pu := pos(#13, S2);
             while pu > 0 do
              begin
                delete(S2, pu, 1);
                pu := pos(#13, S2);
              end;
    RichEdit_Journaux.Lines.Add(S2);
     
    S3 := Copy(RichEdit_Copy.Lines.Text,451,516);
      RichEdit_Journaux.Lines.Add(S3);
    Avec ce code, j'obtiens :
    1-05-2-01 TEMP. ECHAP. APRES
    HC4H5A0UDI
    I

    ERE RECUP TD OK 373 °C
    Voilà ou j'en suis pour le moment. Par contre j'ai tenté avec une variable fin pour délimiter la fin de la 3eme sous chaine, mais se ne marche pas!
    Il y a un I qui vient de je ne sais trop ou?
    Je ne sais pas faire pour l'étape 4.
    Pour ce qui est de la longueur des sous chaines, voici quelques lignes que je reçois du port com, et il y en a encore beaucoup...
    OPéRATEUR : LEVEL 3


    GROUPES FONCTIONNELS : RELEVE GENERAL



    NUMERO LIBELLE SEUILS ETAT MESURE UNITE


    1-05-2-01 TEMP. ECHAP. APRES
    H
    C
    4
    H
    5
    A
    0
    U

    D

    I

    ERE RECUP TD OK 373 °C


    1-05-2-02 TEMP. ECHAP. ENTREE
    H
    T
    5
    S
    5

    0
    V

    A



    MP TD OK 531 °C


    1-05-2-03 TEMP. ECHAP. ENTREE
    H
    T
    5
    S
    6

    0
    V

    B



    MP TD OK 540 °C


    1-05-2-04 TEMP. ECHAP. APRES
    H
    C
    4
    H
    5
    A
    0
    U

    D

    I

    ERE RECUP BD OK 366 °C
    Qu'en pense tu?
    Frederic

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-salut,

    Il faudrait prendre l'habitude d'ajouter les Balises qui délimitent le code : Au lieu de placer un # en début et à la fin du code il faut sélectionner le code puis cliquer sur le bouton marqué justement avec ce #

    Remarque 1 :
    voici quelques lignes que je reçois du port com
    La sous-chaîne S1 est :
    - tantôt : 1-05-2-01 TEMP. ECHAP. APRES
    - tantôt : 1-05-2-02 TEMP. ECHAP. ENTREE
    donc sa longueur n'est pas constante, et donc S1 := Copy(RichEdit_Copy.Lines.Text,1,29); n'est pas correct, et donc les deux autres (S2 et S3) sont aussi incorrectes.
    On dirait même que cette variation n'est pas alternative à moins que les extraits que tu cites ne se suivent pas dans l'ordre réel ???
    Il faudrait donc vérifier ceci, car si cette variation est alternative on peut copier alternativement S1 avec 29 caractères puis avec 30 caractères et en tenir compte pour les copy de S2 et S3.
    (Espérons que le le port com t'envoie toujours 1-05-2-01 TEMP. ECHAP. APRES en tête de liste, puis alternativement 1-05-2-02 TEMP. ECHAP. ENTREE, etc et si N = indice chaudière alors count = 29 si N est pair et si N est impair alors count = 30. N est impair si Odd(N) = true).

    Il y a un I qui vient de je ne sais trop ou?
    Cela provient probablement de l'anomalie évoquée ci-dessus. On verra après avoir corrigé l'anomalie ci-dessus.
    Si ce que j'espère ci-dessus n'est pas le cas, je pense qu'on pourrait s'en sortir autrement en parcourant le RichEdit ligne par ligne avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    procedure TForm1.Button1Click(Sender: TObject);
    var S, Sc : string; i : integer; SL :tStringList;
    begin
      SL := tStringList.Create;
      for i:=0 to RichEdit_Copy.Lines.count-1 do begin
        S := RichEdit_Copy.Lines[i];
        if (pos('APRES', S)>0) or (pos('ENTREE', S)>0) then Sc := S + ' ' // Début de ce qui concerne une chaudière
         else Sc:=Sc + S; // Accumulation dans Sc de tout ce qui concerne la même chaudière
        if (pos('°C', S)>0) then begin // Fin de ce qui concerne la même chaudière
            SL.Add(Sc); // on récupère Sc dans la stringList
        end;
      end;
      RichEdit_Copy.Lines.Assign(SL); // on affiche le résultat dans le même RichEdit
      SL.Free;
    end;
    Avec ce code j'obtiens dans le TRichEdit les lignes suivantes à partir de ce que tu dis recevoir du port com et que j'ai récupéré ici par copier-coller:

    1-05-2-01 TEMP. ECHAP. APRES HC4H5A0UDIERE RECUP TD OK 373 °C
    1-05-2-02 TEMP. ECHAP. ENTREE HT5S50VAMP TD OK 531 °C
    1-05-2-03 TEMP. ECHAP. ENTREE HT5S60VBMP TD OK 540 °C
    1-05-2-04 TEMP. ECHAP. APRES HC4H5A0UDIERE RECUP BD OK 366 °C

    Chaque ligne correspond à la même chaudière. On peut y distinguer les lignes qui comportent APRES de celles qui incluent ENTREE avec un if pos('ENTREE',Ligne[i])>0 then ...
    Par contre il faudrait maintenant savoir ce qu'il faut modifier dans les parties en gras de ces lignes pour retomber sur ses pattes ???

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  15. #15
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Re,
    ce n'est pas toujours APRES ou ENTREE :
    2-01-6-01 MOYENNE T° CYL. MP T
    H
    D
    4

    6

    9

    .

    0






    OK 376.6 °C


    2-01-6-02 MOYENNE T°CYL. MP BD
    H

    4

    6

    9

    .

    0






    OK 377.7 °C


    2-01-1-02 T°ECHAPPEMENT
    D
    M
    V
    P
    0


    T

    D

    CYL.A2 OK 354 °C

    2-02-2-01 PRESSION HUILE
    L
    H
    2
    E
    .
    L
    0
    I

    C

    E

    TD OK 5.0 BAR
    2-02-2-03 PRESSION AIR DE

    S
    H
    U
    2
    R
    .
    A
    5
    L

    I

    MENT.MP TD OK 0.7 BAR
    2-02-2-05 PRESSION POMPES
    L
    E
    0
    M
    .

    5
    R

    E

    F

    RIG MPX OK 1.5 BAR
    etc...


    1-05-2-01 TEMP. ECHAP. APRES HC4H5A0UDIERE RECUP TD OK 373 °C
    1-05-2-02 TEMP. ECHAP. ENTREE HT5S50VAMP TD OK 531 °C
    1-05-2-03 TEMP. ECHAP. ENTREE HT5S60VBMP TD OK 540 °C
    1-05-2-04 TEMP. ECHAP. APRES HC4H5A0UDIERE RECUP BD OK 366 °C

    Nous devrions retrouver :

    1-05-2-01 TEMP. ECHAP. APRES CHAUDIERE RECUP TD H450 OK 373°C
    1-05-2-02 TEMP. ECHAP. ENTREE TS VA MP TD H550 OK 531°C
    1-05-2-03 TEMP. ECHAP. ENTREE TS VB MP BD H560 OK 540°C
    1-05-2-04 TEMP. ECHAP. APRES CHAUDIERE RECUP BD H450 OK 366°C

  16. #16
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Re,
    Ce que je copie/colle sur la page du forum n'est pas identique à ce que j'obtiens. Je te joint un .doc de ce que j'obtiens.
    Fichiers attachés Fichiers attachés

  17. #17
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Chaque première parties (S1) se termine par #13#10, on pourrait peut être supprimer ce #13#10 et commencer à partir de là à travailler la deuxième partie? Quand pense tu?

  18. #18
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Je te joint un .doc de ce que j'obtiens
    Vu ton .doc : sacré bordel !!!

    on pourrait peut être supprimer ce #13#10
    Au lieu de les supprimer j'ai fait comme hier je ramasse les miettes alphanumériques pour les regrouper dans une chaîne qui se termine par #32 + '°C'
    et avant de récupérer chacune de ces chaînes dans la StringList j'y supprime les espaces redondants pour n'en laisser chaque fois qu'un seul avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TForm1.Button1Click(Sender: TObject);
    var S, Sc, Reste: string; i, poDeg: integer; SL: tStringList;
     
      procedure ReduireEspacesA1(var S: string);
      // Réduit les répétitions d'espaces à un seul
      var po: integer;
      begin
        po := pos(#32#32, S);
        while po > 0 do begin Delete(S, po, 1); po := pos(#32#32, S); end;
      end;
     
    begin
      SL := tStringList.Create; Sc := '';
      for i := 0 to RichEdit_Copy.Lines.count - 1 do begin
        S := RichEdit_Copy.Lines[i];
        Sc := Sc + S; // Accumulation dans Sc de tout ce qui concerne la même chaudière
        poDeg := pos(#32+'°C', Sc);
        if (poDeg > 0) then begin // Fin de ce qui concerne la même chaudière
          Reste := Copy(sc, poDeg + 3, MaxInt);
          sc := Copy(sc, 1, poDeg + 2);
          ReduireEspacesA1(sc);
          SL.Add(Sc); // on récupère Sc dans la stringList
          sc := Reste;
        end;
      end;
      RichEdit_Copy.Lines.Assign(SL); // on affiche le résultat dans le même RichEdit
      SL.Free;
    end;
    ... et avec ce code j'obtiens la liste de chaînes dont voici un extrait (ou voir la liste complète dans le .doc ci-joint) :

    1-05-2-01 TEMP. ECHAP. APRES H C 4 H 5 A 0 U D I ERE RECUP TD OK 373 °C
    1-05-2-02 TEMP. ECHAP. ENTREE H T 5 S 5 0 V A MP TD OK 531 °C
    ...
    1-05-2-04 TEMP. ECHAP. APRES H C 4 H 5 A 0 U D I ERE RECUP BD OK 366 °C
    ...
    1-05-2-06 TEMP. ECHAP. ENTREE H T 5 S 6 0 V B MP BD OK 543 °C
    ...
    2-01-6-01 MOYENNE T° CYL. MP T H D 4 6 9 . 0 OK 376.6 °C
    1-05-2-06 TEMP. ECHAP. ENTREE H T 5 S 6 0 V B MP BD OK 543 °C
    2-01-6-01 MOYENNE T° CYL. MP T H D 4 6 9 . 0 OK 376.6 °C
    2-01-6-02 MOYENNE T°CYL. MP BD1-05-2-06 TEMP. ECHAP. ENTREE H T 5 S 6 0 V B MP BD OK 543 °C
    ...
    2-01-6-02 MOYENNE T°CYL. MP BD H 4 6 9 . 0 OK 377.7 °C
    2-01-1-01 T°ECHAPPEMENT D M V P 0 T D CYL.A1 OK 340 °C
    ...
    2-01-1-04 T°ECHAPPEMENT D M V P 0 T D CYL.A4 OK 388 °C

    A mon avis il ne reste plus qu'à supprimer dans ce charabia, ici et là, un espace, mais seuls ceux qui savent ce que ce charabia signifie pourront dire quels sont ces espaces à supprimer. T'as une idée ???

    A+.
    Fichiers attachés Fichiers attachés
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-salut,

    A propos de :
    Gilbert, la lecture via le port com est correcte car je lis sur le même port com d'autres données!
    Si on n'arrive pas à clarifier les parties "charabia" des chaînes il ne resterait plus qu'à voir si toi ou quelqu'un d'autre peut intervenir en amont du port com pour mettre de l'ordre dans les données qui sont transmises au port com :
    - si ces données proviennent d'une saisie manuelle à l'aide d'un logiciel-maison : rectification du logiciel,
    - si ces données proviennent de capteurs : rectification de l'interface qui traduit les signaux des capteurs en données alphanumériques,
    car à mon avis il n'est pas normal qu'en mettant les miettes bout à bout on obtienne ceci 1-05-2-01 TEMP. ECHAP. APRES H C 4 H 5 A 0 U D I ERE RECUP TD OK 373 °C
    où les chiffres du nombre 450 sont intercalés dans le mot CHAUDIERE ... sans oublier que le port com ne te transmet que ce qu'il reçoit de l'amont.

    Bon, tu me diras "c'est plus facile à dire qu'à faire"...

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  20. #20
    Membre à l'essai
    Homme Profil pro
    Automaticien embarqué marine marchande
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien embarqué marine marchande
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Points : 12
    Points
    12
    Par défaut
    Bonjour Gilbert, on approche...
    pour la fin des chaines, j'ai essayé de mettre un 'or' car certaines chaines se termine par :
    #32 + 'BAR';
    #32 + 'RPM';
    #32 + 'KW';
    et 7 se termine par rien.
    En amont, on ne peux rien faire.
    Par contre pour que tu y voit plus clair : c'est une centrale d'alarme CMR qui envoit les alarmes et journaux machines (ce sur quoi nous travaillons) à une interface Homme/Machine et qui l'imprime. Ce que j'essai de faire, c'est de remplacer l'imprimante OKI qui mange beaucoup de papier par une imprimante informatique! J'y suis parvenu pour les alarmes mais pour un type de journaux (car il y en a plusieurs) le port com nous envoi le charabia !!
    Plus tard, si nous parvenons à mettre en place le bordel, il ne restera plus qu’à détecter le journal (je pense que la première ligne le permettra) pour appliquer le code. Car bien entendu les autres types de journaux arrivent lisible..
    Je te joint une impression clair de l’ensemble qui se décompose comme suit :
    NUMERO LIBELLE SEUILS ETAT MESURE UNITE

    Les NUMERO, LIBELLE et UNITE sont fixe,
    Les SEUILS, ETAT et MESURE varient.
    Nous le bordel s’applique en la fin du LIBELLE et le SEUILS.
    Frédéric

Discussions similaires

  1. [Upload] Modifier le contenu d'une liste box automatiquemen
    Par Phenomenium dans le forum Langage
    Réponses: 7
    Dernier message: 16/01/2006, 21h42
  2. Modifier le contenu d'un DBEdit [query]
    Par Askarod dans le forum Bases de données
    Réponses: 15
    Dernier message: 08/12/2005, 14h47
  3. modifier le contenu de ma base
    Par dolphi dans le forum ASP
    Réponses: 2
    Dernier message: 22/08/2005, 17h17
  4. Réponses: 20
    Dernier message: 01/06/2005, 09h37
  5. modifier le contenu d'une table avec innerHTML
    Par francon81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2005, 09h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo