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. #21
    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
    Images attachées Images attachées

  2. #22
    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
    Et la suite
    Images attachées Images attachées

  3. #23
    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 Marin,

    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.
    Quand tu dis 'essayé' veux tu dire que ça n'a pas marché ???
    Si ça n'a pas marché c'est peut-être que tu n'as pas copié dans 'Reste' la partie de 'sc' qui se situe après #32 + 'BAR'.

    Quand tu dis "et 7 se termine par rien" : ça je ne comprends pas. C'est quoi ce 7 ???

    En amont, on ne peux rien faire.
    Dommage, car il est toujours préférable de résoudre les problèmes à leur source.

    Par contre pour que tu y voit plus clair : c'est une centrale d'alarme CMR ... Je te joint une impression clair de l’ensemble qui se ...
    OK, je vais y jeter un coup d'œil pour voir ce qu'on peut en tirer.

    NUMERO LIBELLE SEUILS ETAT MESURE UNITE

    Les NUMERO, LIBELLE et UNITE sont fixes,
    Les SEUILS, ETAT et MESURE varient.
    Nous le bordel s’applique en la fin du LIBELLE et le SEUILS.
    OK, il faudra analyser la partie bordel pour voir ce qu'on peut en faire.

    Sur ce, je vais ajouter les or #32 + 'BAR'; or #32 + 'RPM'; or #32 + 'KW';

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

  4. #24
    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,

    Voici le code modifié qui tient compte des séquences qui se terminent #32 + 'BAR', #32 + 'RPM', ou #32 + 'KW'
    ... en attendant de savoir ce que tu as voulu dire par "et 7 se termine par rien" :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    procedure TForm1.Button1Click(Sender: TObject);
    var S, Sc, Reste: string; i, poCas1, poCas2, poDeg, poBAR, poRPM, poKW: 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;
      SL.Sorted := True; // Liste triée pour regrouper les lignes qui se ressemblent
      SL.Duplicates := dupAccept; // := dupIgnore si on veut ignorer les doublons
      Sc := '';
      RE1.Lines.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Journal périodique Orig.txt');
      for i := 0 to RE1.Lines.count - 1 do begin
        S := RE1.Lines[i];
        Sc := Sc + S; // Accumulation dans Sc de tout ce qui concerne le même enregistrement
    
        poCas1 := 0;
        poBAR := pos(#32 + 'BAR', Sc); if (poBAR > 0) then poCas1 := poBAR;
        poRPM := pos(#32 + 'RPM', Sc); if (poRPM > 0) then poCas1 := poRPM;
        poCas2 := 0;
        poDeg := pos(#32 + '°C', Sc); if (poDeg > 0) then poCas2 := poDeg;
        poKW := pos(#32 + 'KW', Sc); if (poKW > 0) then poCas2 := poKW;
    
        if poCas1 > 0 then begin // Fin de ce qui concerne le même enregistrement Cas 1
          Reste := Copy(sc, poCas1 + 4, MaxInt);
          sc := Copy(sc, 1, poCas1 + 3);
          ReduireEspacesA1(sc);
          SL.Add(Sc); // on récupère Sc dans la stringList
          sc := Reste;
        end else
          if poCas2 > 0 then begin // Fin de ce qui concerne le même enregistrement Cas 2
          Reste := Copy(sc, poCas2 + 3, MaxInt);
          sc := Copy(sc, 1, poCas2 + 2);
          ReduireEspacesA1(sc);
          SL.Add(Sc); // on récupère Sc dans la stringList
          sc := Reste;
        end;
      end;
      SL.SaveToFile(repAppli+'Journal_Classé.txt');
      RE1.Lines.Assign(SL); // on affiche le résultat dans le même RichEdit
      SL.Free;
    end;
    Attention, dans mon code :
    1) RE1 c'est le RichEdit qui peut être vide au départ et j'y charge le fichier Journal périodique Orig.txt qui n'est rien d'autre que ton .doc sauvé au format .txt
    2) SL.Sorted:=True; afin que la StringList-ramasse-miettes soit triée pour regrouper les lignes qui se ressemblent : ça permet de se rendre plus facilement compte du nombre de cas de figure qu'il faudra décrypter.
    3) le SL.SaveToFile(repAppli+'Journal_Classé.txt') vers la fin, tu peux le virer si tu ne veux pas sauver le résultat sur disque.

    Ci-joint le fichier-résultat :

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

  5. #25
    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, en fait les 7 sont : les phrases qui n'ont pas de valeurs d'unité (°C, BAR, KW...)
    2-06-3-01 CAP DU NAVIRE





    OK 88.3


    2-06-3-02 ANGLE DE BARRE BD





    OK -3.8


    2-06-3-03 ANGLE DE BARRE TD





    OK 0.3


    2-06-3-04 PAS DEMANDES TD





    OK 6.7


    2-06-3-05 PAS OBTENUS TD





    OK 7.5


    2-06-3-06 PAS DEMANDES BD





    OK 7.3


    2-06-3-07 PAS OBTENUS BD





    OK 8.1

  6. #26
    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,

    Suggestion pour l'étape suivante : Insérer dans chacune des chaînes NUMERO + LIBELLE + SEUILS + ETAT + MESURE + UNITE des séparateurs qui délimitent les sous-chaînes à bordel.
    Pour ma part je propose : NUMERO + LIBELLE + Sep1 + SEUILS + Sep2 + ETAT + Sep3 + MESURE + UNITE, sauf si tu en veux davantage ???.
    Ces séparateurs pourront aussi être utilisés par la suite pour imprimer les sous-chaînes alignées sur des colonnes comme dans tes .pdf.
    Reste à choisir les Séparateurs dans la table de caractères parmi ceux qui ne proviennent jamais du port com et ceux qui restent invisibles.
    Ceux qui restent invisibles dans un RichEdit, mis à part #13 et #10, sont [#1, #9, #11, #12, #28 à #32, et #160] mais on pourrait aussi choisir des caractères accentués qui n'apparaissent jamais dans le binz qui provient du port com.
    Ou bien choisis parmi ceux-ci qui s'affichent dans un RichEdit sans trop gêner :
    #91 [
    #92 \
    #93 ]
    #123 {
    #124 |
    #125 }

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

  7. #27
    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,

    Oups, je n'avais pas remarqué que pendant que je rédigeais mon message précédent tu as été plus rapide que moi :

    Bonjour Gilbert, en fait les 7 sont : les phrases qui n'ont pas de valeurs d'unité (°C, BAR, KW...)
    2-06-3-01 CAP DU NAVIRE OK 88.3
    ...
    2-06-3-07 PAS OBTENUS BD OK 8.1 [/B]
    OK, ça fait donc 7 cas particuliers à ajouter.

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

  8. #28
    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,

    Voici le code modifié pour la prise en compte des 7 cas particuliers qui n'ont pas de valeurs d'unité ... mais qui (bordel en prime) sont des variables :
    donc c'est du provisoire qui ne marche qu'avec la longueur des variables que tu as fournies en tant qu'exemples,
    et donc seulement si l'ETAT = 'OK' et si la longueur de MESURE ne varie pas : Varie-t-elle ???. : si oui, casse-tête en vue.
    Question : comment est libellé l'ETAT lorsqu'il n'est pas 'OK' ???

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    procedure TForm1.Button1Click(Sender: TObject);
    const
      cp1 = 'CAP DU NAVIRE'; cp2 = 'ANGLE DE BARRE BD'; cp3 = 'ANGLE DE BARRE TD';
      cp4 = 'PAS DEMANDES TD'; cp5 = 'PAS OBTENUS TD'; cp6 = 'PAS DEMANDES BD';
      cp7 = 'PAS OBTENUS BD';
    var
      S, Sc, Reste: string;
      i, poCas1, poCas2, poDeg, poBAR, poRPM, poKW: integer;
      pocp1, pocp2, pocp3, pocp4, pocp5, pocp6, pocp7: 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;
      SL.Sorted := True; // Liste triée pour tenter de regrouper de lignes qui se ressemblent
      SL.Duplicates := dupAccept;
      Sc := '';
      RE1.Lines.LoadFromFile(RepAppli + 'Journal périodique Orig.txt');
      for i := 0 to RE1.Lines.count - 1 do begin
        //S := trim(RE1.Lines[i]);
        S := RE1.Lines[i];
        Sc := Sc + S; // Accumulation dans Sc de tout ce qui concerne le même enregistrement
        ReduireEspacesA1(sc);
     
        poCas1 := 0;
        poBAR := pos(#32 + 'BAR', Sc); if (poBAR > 0) and (pos('BARRE', Sc) < 0) then poCas1 := poBAR;
        poRPM := pos(#32 + 'RPM', Sc); if (poRPM > 0) then poCas1 := poRPM;
        poCas2 := 0;
        poDeg := pos(#32 + '°C', Sc); if (poDeg > 0) then poCas2 := poDeg;
        poKW := pos(#32 + 'KW', Sc); if (poKW > 0) then poCas2 := poKW;
     
        pocp1 := pos(cp1, Sc); pocp2 := pos(cp2, Sc); pocp3 := pos(cp3, Sc); pocp4 := pos(cp4, Sc);
        pocp5 := pos(cp5, Sc); pocp6 := pos(cp6, Sc); pocp7 := pos(cp7, Sc);
     
        if poCas1 > 0 then begin // Fin de ce qui concerne le même enregistrement Cas 1
          Reste := Copy(sc, poCas1 + 4, MaxInt);
          sc := Copy(sc, 1, poCas1 + 3);
          ReduireEspacesA1(sc);
          SL.Add(Sc); // on récupère Sc dans la stringList
          sc := Reste;
        end else
          if poCas2 > 0 then begin // Fin de ce qui concerne le même enregistrement Cas 2
          Reste := Copy(sc, poCas2 + 3, MaxInt);
          sc := Copy(sc, 1, poCas2 + 2);
          ReduireEspacesA1(sc);
          SL.Add(Sc); // on récupère Sc dans la stringList
          sc := Reste;
        end else
          if pocp1 > 0 then begin // 2-06-3-01 CAP DU NAVIRE OK 88.3
          Reste := Copy(sc, pocp1 + length(cp1) + 8, MaxInt);
          sc := Copy(sc, 1, pocp1 + length(cp1) + 7);
          SL.Add(Sc); sc := Reste;
        end else
          if pocp2 > 0 then begin // 2-06-3-02 ANGLE DE BARRE BD OK -3.8
          Reste := Copy(sc, pocp2 + length(cp2) + 8, MaxInt);
          sc := Copy(sc, 1, pocp2 + length(cp2) + 7);
          SL.Add(Sc); sc := Reste;
        end else
          if pocp3 > 0 then begin // 2-06-3-03 ANGLE DE BARRE TD OK 0.3
          Reste := Copy(sc, pocp3 + length(cp3) + 7, MaxInt);
          sc := Copy(sc, 1, pocp3 + length(cp3) + 6);
          SL.Add(Sc); sc := Reste;
        end else
          if pocp4 > 0 then begin // 2-06-3-04 PAS DEMANDES TD OK 6.7
          Reste := Copy(sc, pocp4 + length(cp4) + 7, MaxInt);
          sc := Copy(sc, 1, pocp4 + length(cp4) + 6);
          SL.Add(Sc); sc := Reste;
        end else
          if pocp5 > 0 then begin // 2-06-3-05 PAS OBTENUS TD OK 7.5
          Reste := Copy(sc, pocp5 + length(cp5) + 7, MaxInt);
          sc := Copy(sc, 1, pocp5 + length(cp5) + 6);
          SL.Add(Sc); sc := Reste;
        end else
          if pocp6 > 0 then begin // 2-06-3-06 PAS DEMANDES BD OK 7.3
          Reste := Copy(sc, pocp6 + length(cp6) + 7, MaxInt);
          sc := Copy(sc, 1, pocp6 + length(cp6) + 6);
          SL.Add(Sc); sc := Reste;
        end else
          if pocp7 > 0 then begin // 2-06-3-07 PAS OBTENUS BD OK 8.1
          Reste := Copy(sc, pocp7 + length(cp7) + 7, MaxInt);
          sc := Copy(sc, 1, pocp7 + length(cp7) + 6);
          SL.Add(Sc); sc := Reste;
        end
      end;
     
      SL.SaveToFile(repAppli + 'Journal_Classé.txt');
      RE1.Lines.Assign(SL); // on affiche le résultat dans le même RichEdit
      SL.Free;
    end;
    A+.
    EDIT : Au fait, je n'ai pas pu tester le code en conditions réelles car le .doc dont je dispose n'inclut aucun des 7 cas particuliers.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #29
    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,
    Je découvre en même temps, si ce n'est pas OK, cela peut être "BK" ou "TC".
    la longueur de MESURE peut varier de 0 à 360 seulement pour le CAP DU NAVIRE
    J'ai fait un nouveau test connecté au PC CMR, et voici en PJ ce que cela donne. Par contre lorsque je copie/colle le Journal Périodique lu du port Com sur mon RE1, effectivement il manque des lignes!
    Un RichEdit n'a pas de limite de ligne normalement?
    Fichiers attachés Fichiers attachés

  10. #30
    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
    Pour les séparateurs, #9 me semble bien
    Frédéric

  11. #31
    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,
    Voici le résultat pour les 7 cas particuliers :

    OK -0.32-06-3-04 PAS DEMANDES TD
    OK 278.42-06-3-02 ANGLE DE BARRE BD
    OK -5.42-06-3-03 ANGLE DE BARRE TD
    OK 6.42-06-3-05 PAS OBTENUS TD
    OK 7.02-06-3-07 PAS OBTENUS BD
    OK 7.32-06-3-06 PAS DEMANDES BD
    2-06-3-01 CAP DU NAVIRE

  12. #32
    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 Réponse à ton message d' Hier, 20h01
    Bonjour Marin,

    Je découvre en même temps, si ce n'est pas OK, cela peut être "BK" ou "TC".
    OK, l'essentiel est que BK, TC et OK soient toujours de la même longueur (je m'attendais à HS, mais bon).

    la longueur de MESURE peut varier de 0 à 360 seulement pour le CAP DU NAVIRE
    OK, je vais essayer une combine qui considère que la longueur de mesure peut varier pour les 7 cas particuliers.

    J'ai fait un nouveau test connecté au PC CMR, et voici en PJ ce que cela donne. Par contre lorsque je copie/colle le Journal Périodique lu du port Com sur mon RE1, effectivement il manque des lignes!
    Un RichEdit n'a pas de limite de ligne normalement?
    Il manque des lignes à quel moment ??? Je suppose que c'est lors du 1ier chargement dans le RichEdit car le code qu'on utilise ne supprime que des espaces redondants pour n'en conserver chaque fois qu'un seul.
    Comme JP 10.03.doc ne fait que 201 Ko ça tient largement dans un RichEdit.

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

  13. #33
    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,
    En fait cela me pose pb pour le moment car pour tester en atelier, je fais des copier/coller de ce que j'ai enregistré dans un .doc, mais en fonctionnement normal, l'application recevra directement le contenu sur le port com. Le pb ne devrait plus être.
    En faisant des copier/coller .doc vers l'application, sur le .doc, les numéros vont de 1-05-2-01 à 2-06-3-07 alors que dans l'application les numéros vont de 1-05-2-01 à 2-04-4-05 alors que je sélectionne l'ensemble du .doc!!
    Frédéric

  14. #34
    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 Réponse à tes 2 messages suivants d'HIER
    Re-salut,

    Pour les séparateurs, #9 me semble bien
    A mon avis il serait préférable d'utiliser des séparateurs différents, car pos(#9, Sc) renvoie toujours la position du 1ier séparateur
    et si on veut imprimer le résultat aligné sur des colonnes comme dans les .pdf ce serait plus facile de pouvoir distinguer directement Position1, Position2, etc

    Voici le résultat pour les 7 cas particuliers :

    OK -0.32-06-3-04 PAS DEMANDES TD
    OK 278.42-06-3-02 ANGLE DE BARRE BD
    OK -5.42-06-3-03 ANGLE DE BARRE TD
    OK 6.42-06-3-05 PAS OBTENUS TD
    OK 7.02-06-3-07 PAS OBTENUS BD
    OK 7.32-06-3-06 PAS DEMANDES BD
    2-06-3-01 CAP DU NAVIRE
    Cela ne correspond plus avec ce que j'ai obtenu en utilisant ton premier Journal périodique.doc converti en .txt
    Par contre j'obtiens le même résultat à partir de JP 10.03.doc converti en .txt
    Il n'est pas normal que le OK soit placé devant NUMERO, LIBELLE ... ni qu'il manque la valeur de MESURE pour le CAP DU NAVIRE : je vais voir d'où ça provient.

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

  15. #35
    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 "Il n'est pas normal que le OK soit placé devant NUMERO, LIBELLE ... ni qu'il manque la valeur de MESURE pour le CAP DU NAVIRE" :
    J'ai trouvé d'où ça provient le OK qui suit CAP DU NAVIRE est situé dans l'une des lignes suivantes : voir capture d'écran de mon Editeur Hexa où les .. (deux points dans la colonne de droite) sont des #13#10
    Reste plus qu'à modifier le code en conséquence.

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

  16. #36
    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
    Bien pratique ton éditeur Hexa

  17. #37
    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 "En faisant des copier/coller .doc vers l'application, sur le .doc, les numéros vont de 1-05-2-01 à 2-06-3-07 alors que dans l'application les numéros vont de 1-05-2-01 à 2-04-4-05 alors que je sélectionne l'ensemble du .doc!!" :
    Pour moi, l'essentiel est que le format des numéros soit constant car j'envisage de remanier le code pour repérer les débuts des enregistrements avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function iDebEnreg(const S: string): boolean; // 1-05-2-02
      begin
        Result := (S[2] = '-') and (S[5] = '-') and (S[7] = '-');
      end;
    ... et ensuite je ramasse les miettes jusqu'au suivant.

    Bien pratique ton éditeur Hexa
    Si tu veux le même, c'est gratuit ici : http://www.01net.com/telecharger/win...es/110455.html
    HxD Hex Editor

    Sur ce je vais continuer le ramasse-miettes.

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

  18. #38
    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,

    Voici le code du nouveau ramasse-miettes :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    procedure TfrmCryDecr.Button1Click(Sender: TObject);
    var
      S, Sc, Sd, Sp: string;
      i, poPage: 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;
     
      function iDebEnreg(const S: string): boolean; // Format des NUMEROS = 1-05-2-02
      begin
        Result := False; if S = '' then EXIT;
        Result := (S[2] = '-') and (S[5] = '-') and (S[7] = '-');
      end;
     
    begin
      SL := tStringList.Create; SL.Sorted := False;
      //RE1.Lines.LoadFromFile(RepAppli + 'Journal périodique Orig.txt');
      RE1.Lines.LoadFromFile(RepAppli + 'JP 10.03.txt');
     
      Sc := RE1.Text; ReduireEspacesA1(Sc); RE1.text := Sc; RE1.Update;
      Sc := '';
      i := -1;
      repeat
        inc(i);
        S := RE1.Lines[i];
        if S = '' then Continue;
        if (pos('Opérateur', S) = 2) or (pos('Groupes', S) = 2) or (pos('Page', S) = 2) then begin
          SL.Add(S); Continue;
        end else
          if iDebEnreg(S) then begin
          repeat
            Sc := Sc + RE1.Lines[i]; // Accumulation dans Sc de tout ce qui concerne le même enregistrement
            inc(i);
          until (i >= RE1.Lines.count - 1) or iDebEnreg(RE1.Lines[i]);
          poPage := pos('Page', Sc);
          if poPage > 0 then begin // Lignes formées par un enregistrement + Page 1/6 Opérateur : level 3 Groupes Fonctionnels : RELEVE GENERAL, etc
            Sd := Copy(Sc, 1, poPage - 1); ReduireEspacesA1(Sd); SL.Add(Sd);
            Sp := Copy(sc, poPage, MaxInt); ReduireEspacesA1(Sp); SL.Add(Sp);
          end else begin // Enregistrements courants
            ReduireEspacesA1(Sc);
            SL.Add(Sc);
          end;
          Sc := ''; dec(i);
        end;
      until i >= RE1.Lines.count - 1;
     
      SL.SaveToFile(repAppli + 'Journal_NON_Classé.txt');
      RE1.Lines.Assign(SL); // on affiche le résultat dans le même RichEdit
      SL.Free;
    end;
    ... il est nettement plus simple.

    Par contre pour y insérer des séparateurs ça va être le galère vu la pléthore de LIBELLES qui existent,
    sans oublier le problème non résolu du mélange LIBELLE + SEUIL dans par exemple 1-05-2-01 TEMP. ECHAP. APRES H C 4 H 5 A 0 U D I ERE RECUP TD OK 355 °C
    Au fait, puisque actuellement les journaux sont imprimés, elle fait comment votre imprimante pour décrypter ce type de charabia ???

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

  19. #39
    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,
    Le PDF datait du 10/2013, depuis quelques temps, cela ne fonctionne plus! et je ne sais pas comment l'imprimante OKI peut écrire ce charabia..
    C'est pas mal maintenant avec ton code, nous sommes très proche!! Plus que le charabia, as tu une idée?

    Frédéric

  20. #40
    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,
    Pour revenir sur le pb en amont, c'est à dire de l'imprimante, j'ai fouillé dans ses paramètres et elle re-fonctionne a nouveau avec:
    Nom :Généric
    Pilote : Oki ML 280 Elite (IBM)
    port Com 2
    Si sa peut d'aider..

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