Partage
  • Partager sur Facebook
  • Partager sur Twitter

Extraire un bloc d'un fichier texte

Sujet résolu
    24 juin 2020 à 14:01:36

    Bonjour,

    Il faut que je récupère un bloc de texte situé entre une ligne clé et s’arrêtant à une ligne vierge.

    Ex :

    *DATA BLK, LEVEL 0 OBTAINED BY PROGRAM-TPA2 RELEASED BY PROGRAM-N/A                                                                 
    00000000273D5380     00000000     00020000     00000000     00000000  ................                                              
    00000000273D5390     10C4E200     00000000     00000000     00000000  .DS.............                                              
    00000000273D53A0     00000000     00000000     0000E2D5     00000000  ..........SN....                                              
    00000000273D53B0     00000000     00000000     00000000     00000000  ................                                              
    00000000273D53C0     00000000     00008000     00000000     00000000  ................                                              
    00000000273D53D0     0000C9D5     D6000000     00000006     07C6D9D3  ..INO........FRL                                              
    00000000273D53E0     D7C40100     00001E96     001F8F00     000C1829  PD.....o........                                              
    ¤SYSTEM ERROR NUMBER   CTL-I000003   PROGRAM ERROR DETECTED IN OP                      TAPE G01934         DUMP 5010  PAGE 00000282 
    SYSTEM ERROR NUMBER   CTL-I000003   PROGRAM ERROR DETECTED IN OP                      TAPE G01934         DUMP 5010  PAGE 00000283  
    00000000273D53F0     00180000     00E3C7C6     00000081     19421080  .....TGF...a....                                              
    00000000273D5400     C6D9D3E8     E20014ED     0006DF00     E2D54DD9  FRLYS.......SN.R                                              
    00000000273D5410     4DD903DE     04E6C2C1     03830800     00000000  .R...WBA.c......                                              
    00000000273D5420     12010000     00000002     00000011     D4D40000  ............MM..                                              
    00000000273D5430     00000000     00000000     00000000     00000000  ................                                              
    00000000273D5440     00000020     00E2D500     00000000     00000000  .....SN.........                                              
    00000000273D5450     00000000     00000000     00000004     F4000800  ............4...                                              
    00000000273D5460     0D00004D     93029A00     00000000     00000000  ....l...........                                              
    00000000273D5470     00000000     0000FFFF     C6D9D5E3     C5010000  ........FRNTE...                                              
    00000000273D5480     00244700     33830000     14000000     00000002  .....c..........                                              
    00000000273D5490     00000000     00001020     001080C6     D9E3D5C5  ...........FRTNE                                              
    00000000273D54A0     00000000     00000000     00000000     00000000  ................                                              
    00000000273D5FF0     00000000     00000000     00000000     00000013  ................                                              
                                                                                                                                        
    *

    Ici la dernière ligne est une ligne vide et la première est marquée par "DATA BLK," et suivie du numéro du level.

    Voici mon code pour extraire des informations d'une ligne en recherchant une chaine de caractères.

    /*
            LEVEL : *DATA BLK,
            ECB : *ENTRY BLK
    */
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <stdbool.h>
    #define MAX_SIZE 136
    
    char * binstr(char * bin, int lngmax, const char * str){
            int lngstr = strlen(str);
            char * ret = NULL;
            for(int i=0; i<lngmax-lngstr; i++){
                if(memcmp(bin+i,str,lngstr)==0){
                    ret=bin+i;
                    break;
                }
            }
            return ret;
    }
    
    struct s_search {
        char *searched_value;
        char *title_to_display;
        bool already_displayed;
        unsigned short display_size;
        unsigned short offset;
    };
    
    int main(int argc, char *argv[])
    {
        if (argc != 1) {
            printf("usage: %s chemin\n", argv[0]);                                  
            return EXIT_FAILURE;
        }
    
        struct s_search search[]={
            {"FAILING PROGRAM","Version : ",false,2,18},
            {"FAILING PROGRAM","Programme : ",false,4,14},
            {"DATE - ","Date : ",false,5,0},
            {"TIME - ","Heure : ",false,8,0},
            {"START OF POST PROCESSING RUN FOR DUMP","Référence : ",false,4,1},
            {"SYSTEM ERROR NUMBER","Ctrl : ",false,11,3},
            {"FAILING PROGRAM","Déplacement : ",false,9,42},
            {"  R0","Registres :\r\nR0",false,42,0},
            {"  R2","R2",false,42,0},
            {"  R4","R4",false,42,0},
            {"  R6","R6",false,42,0},
            {"  R8","R8",false,42,0},
            {"  R10","R10",false,42,0},
            {"  R12","R12",false,42,0},
            {"  R14","R14",false,42,0},
            {"DATA BLK, LEVEL 0","Level 0 : ",false,86,0}
        };
    
        int nsearch=sizeof(search)/sizeof(search[0]);
        FILE* infile = fopen("./Dumps/dumpJSAD.txt", "rb");
        FILE* outfile = fopen("sortie.txt", "wb");
        char read_line[MAX_SIZE];
        
        if(infile != NULL){
            while(fgets(read_line,sizeof(read_line),infile)) {
                for(int i=0;i<nsearch;i++){
                    if(!search[i].already_displayed) {
                        char *result=binstr(read_line,sizeof(read_line),search[i].searched_value);
                        if(result){
                            fprintf(outfile,"%s%.*s\r\n",search[i].title_to_display,search[i].display_size,result+strlen(search[i].searched_value)+search[i].offset);
                            search[i].already_displayed=true;
                        }
                    }
                }
            }
        }
        fclose(infile);
        fclose(outfile);
    }
    Merci !

    -
    Edité par ElouanBesnard 24 juin 2020 à 14:07:42

    • Partager sur Facebook
    • Partager sur Twitter
      24 juin 2020 à 14:33:19

      Tien, ça me rappelle quelque chose : Extraire une ligne précise d'un fichier txt en C

      Mais aussi : Affichage informations texte en c

      Tu t'en vois avec c'est fichiers texte ? 

      Ton fichier ne semble pas être un fichier texte, sinon il y beaucoup de caractères de fin de chaîne !

      Ça va donc être difficile d'utiliser des fonctions comme fgets comme tu le fais ! Pour fgets une fin de ligne c'est un caractère '\n' ! 

      -
      Edité par rouloude 24 juin 2020 à 14:43:25

      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2020 à 14:57:05

        Oui il m'en fais voir de toutes les couleurs et je rempli aussi la bdd d'openclassroom sur se sujet:D.

        Où vois tu des fins de ligne partout ? Les différentes colonnes sont séparées par des espaces pas des \n.

        Et donc je fgets fonctionne puisque je l'ai utiliser plus haut !

        c'est à ca que sert ma fonction binstr : ça fait la même chose que strstr mais en ne prennant pas en compte des caractères binaires.

        Au final ma question est : comment récupérer un bloc entier ( enfin ça je sais le faire) mais comment faire ça entre DATA BLK et la ligne vide ?

        • Partager sur Facebook
        • Partager sur Twitter
          24 juin 2020 à 15:41:21

          Je n'ai pas dit fin de ligne mais fin de chaînes ! Le caractères fin de chaîne c'est le caractère '\0' qui a la valeur numérique 0. ton fichier en est bourré !

          Désolé, je n'ai pas compris la composition de ton fichier, qui semble venir d'un éditeur hexa. C'est un fichier texte sous la forme que tu as posté alors ?

          Pour toi, c'est quoi un bloc, tout ce qui ce trouve entre DATA_BLK et la ligne vide ? Je ne comprend pas tout !

          • Partager sur Facebook
          • Partager sur Twitter
            24 juin 2020 à 22:40:13

            Argh, c'est compliqué... C'est vrai que la tête de l'exemple ci-dessus suggère un fichier binaire vu par un éditeur hexadécimal. Mais qu'est-ce que c'est, ce fichier sur lequel tu travailles depuis quelque temps ? Là maintenant, j'avoue que je suis un peu découragé. C'est si compliqué !

            Est-ce que ce fichier a un format précis, documenté ?

            -
            Edité par robun 24 juin 2020 à 22:55:38

            • Partager sur Facebook
            • Partager sur Twitter
              24 juin 2020 à 23:12:18

              Ben, c'est pas le bout du monde:

              - tu répères le début de ta ligne clé

              - tu cherches le \n qui la termine, puis +1 --> tu as le début de ton bloc (void *block_begin) (à faire seulement si  la ligne clé ne doit pas être incluse dans le bloc)

              - à partir de block_begin, tu cherches les \n. Dès que tu en as deux qui se suivent, tu sais que le second est le début de ta ligne vierge

              Tu n'as plus qu'a copier le bloc où tu le souhaites (tu as le début et la longueur)

              -
              Edité par edgarjacobs 24 juin 2020 à 23:18:56

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                24 juin 2020 à 23:34:12

                edgarjacobs a écrit:

                Ben, c'est pas le bout du monde:

                - tu répères le début de ta ligne clé

                - tu cherches le \n qui la termine, puis +1 --> tu as le début de ton bloc (void *block_begin) (à faire seulement si  la ligne clé ne doit pas être incluse dans le bloc)

                - à partir de block_begin, tu cherches les \n. Dès que tu en as deux qui se suivent, tu sais que le second est le début de ta ligne vierge

                Tu n'as plus qu'a copier le bloc où tu le souhaites (tu as le début et la longueur)

                -
                Edité par edgarjacobs il y a 7 minutes

                Ça me parait bien, je vais essayer un truc du genre !

                robun a écrit:

                Argh, c'est compliqué... C'est vrai que la tête de l'exemple ci-dessus suggère un fichier binaire vu par un éditeur hexadécimal. Mais qu'est-ce que c'est, ce fichier sur lequel tu travailles depuis quelque temps ? Là maintenant, j'avoue que je suis un peu découragé. C'est si compliqué !

                Est-ce que ce fichier a un format précis, documenté ?

                -
                Edité par robun il y a 31 minutes



                Pourquoi compliquer ?:) au final les traitement du fichier se fait comme un fichier texte, juste en remplaçant le strstr par binstr.

                Et non ce fichier n'a pas de documentation, c'est un dump system, en gros c'est une image des machines à l'instant où elles ont un crash.

                Donc tu imagine bien que les informations sont de base en binaire et converti en texte par je ne sais quel moyen.

                • Partager sur Facebook
                • Partager sur Twitter
                  25 juin 2020 à 9:31:56

                  Le genre d'idée que j'avais en tête, c'est que par exemple dans un fichier de ce type, les blocs font toujours 1024 octets (valeur au hasard). Ça ne me surprendrait pas du tout (puisque les fichiers dumps sont destinés à être lus automatiquement par des programmes de débogage). Connaître ce genre d'information faciliterait ta tâche.

                  -
                  Edité par robun 25 juin 2020 à 9:32:34

                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 juin 2020 à 10:35:08

                    ElouanBesnard a écrit:

                    Il faut que je récupère un bloc de texte situé entre une ligne clé et s’arrêtant à une ligne vierge.

                    Une ligne vierge, je c'est ce que c'est. Du moins je crois, ton fichier a des ligne de longueur fixe apparemment, je suppose que le "<br>*" est un parasite ? 

                    Mais une ligne clé je ne sais pas, comment tu reconnais une ligne clé ! Je te pose la question pour ne pas partir dans un sujet à 31 ou 54 post !

                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 juin 2020 à 15:28:10

                      Pour moi la ligne clé ça serait "                                                                      " avec le nombre d'espace égal à celui de la ligne vide du dump.

                      Oui le"<br>*" est un parasite mais ne s'affiche pas dans mon fichier de sortie.

                      J'ai fais ça :

                      if(infile != NULL){
                              while(fgets(read_line,sizeof(read_line),infile)) {
                                  for(int i=0;i<nsearch;i++){
                                      if(!search[i].already_displayed) {
                                          char *result=binstr(read_line,sizeof(read_line),search[i].searched_value);
                                          if(result){
                                              fprintf(outfile,"%s%.*s\r\n",search[i].title_to_display,search[i].display_size,result+strlen(search[i].searched_value)+search[i].offset);
                                              if(search[i].searched_value == "DATA BLK, LEVEL"){
                                                  while(fgets(read_line,sizeof(read_line),infile) != "                                                                                                                                    "){
                                                      fprintf(outfile,"%s\n",result);
                                                  }
                                              }
                                              search[i].already_displayed=true;
                                          }
                                      }
                                  }
                              }
                          }

                      Bon le problème ici c'est que il ne s’arrête pas à une ligne vide comme je voudrais...

                      Et que maintenant mes caractère spéciaux (é) ne s'affichent plus correctement quand j'écris "Déplacement" ou "Référence".

                      C'est sûrement très mauvais ce que j'ai fais, j'hésite à refaire totalement une autre fonction pour rechercher un bloc.

                      Mais ça m'arrangerait si ça pouvait marcher comme ça.

                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 juin 2020 à 16:29:33

                        ElouanBesnard a écrit:

                        Pour moi la ligne clé ça serait "                                                                      " avec le nombre d'espace égal à celui de la ligne vide du dump.

                        Donc la clé et la ligne "vide" (constituée uniquement d'espaces)  sont des lignes identiques ? Donc tu cherches à récupérer le bloc entre deux lignes vide (constituée uniquement d'espaces) ? Je sens qu'il va falloir cinquante post pour savoir ce que tu souhaites faire ! (J'aurais capitulé avant) !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 juin 2020 à 16:48:40

                          Un bloc ne correspondrait-il pas à tout ce qu'il y a entre les deux * ?

                          Si c'est pas indiscret, une fois récupéré, que souhaite-tu faire avec ce bloc de texte ?

                          -
                          Edité par magma 25 juin 2020 à 16:53:56

                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 juin 2020 à 16:55:26

                            OK OK !

                            Explication claire (enfin j'espère cette fois) :

                            Il y a ce fichier texte (j'ai mis le fichier seulement entre le LEVEL 1 et le LEVEL 3 sachant que tout les levels ne sont pas toujours affichés)

                            *DATA BLK, LEVEL 1 OBTAINED BY PROGRAM-WGR1 RELEASED BY PROGRAM-N/A                                                                 
                            000000002720A000     C1C100A0     E3D7E6D3     7D2DBD32     00000000  AA..TPWL........                                              
                            000000002720A010     00000000     00000000     5B650C00     00000001  ................                                              
                            000000002720A020     C180C2C1     54D6F8F8     00000000     F4D7C1D7  A.BA.O88....4PAP                                              
                            000000002720A030     80001080     4D950000     20380000     00000000  .....n..........                                              
                            000000002720A040     00000000     00000001     00000000     00000000  ................                                              
                            000000002720A050     036D0071     7D2DBDAD     03000020     00000000  ................                                              
                            000000002720A060     000DC2C1     54E65BE3     D2D35BC6     C3C14E00  ..BA.W.TKL.FCA..                                              
                            000000002720A070     00000000     00000000     00000000     00000000  ................                                              
                            000000002720A0C0     00000000     00002100     00000001     00000000  ................                                              
                            000000002720A0D0     70798401     83DDE25D     20FF5000     00000000  ..d.c.S.........                                              
                            000000002720A0E0     01000000     00000000     84800001     00000000  ........d.......                                              
                            000000002720A0F0     00000101     00010000     00010000     86B9A9BE  ............f.z.                                              
                            000000002720A100     00000000     03005840     83DDE166     00000000  ....... c.......                                              
                            000000002720A110     00000000     60F060B5     86B4B859     00000000  ....-0-.f.......                                              
                            000000002720A120     00000000     00000000     00000000     00000000  ................                                              
                            000000002720A140     60F060B4     39020000     00000000     00000000  -0-.............                                              
                            000000002720A150     C6D91022     4D95F4D7     C1D7D7F3     F4010100  FR...n4PAPP34...                                              
                            000000002720A160     00000100     00004020     46C54E7C     60BBB23E  ...... ..E..-...                                              
                            000000002720A170     00000000     00000000     00090000     00000000  ................                                              
                            000000002720A180     0000006B     00000000     00006301     0420C8D2  ..............HK                                              
                            000000002720A190     4DB101E3     C8E2E203     000028FD     01168541  ...THSS.......e.                                              
                            000000002720A1A0     DB022DA9     0024C500     1525E3C8     40200000  ...z..E...TH ...                                              
                            000000002720A1B0     000000E3     C7C80000     00800001     8020FFE3  ...TGH.........T                                              
                            000000002720A1C0     C8032000     4003E24D     95A00000     00F0F2C6  H... .S.n....02F                                              
                            000000002720A1D0     D9000000     17400000     00000000     000517C5  R.... .........E                                              
                            000000002720A1E0     C4D30716     01F0F0F1     F80424F0     00000000  DL...0018..0....                                              
                            000000002720A1F0     00000000     00000000     00000000     00000000  ................                                              
                            000000002720A210     00000000     00000000     00000000     0000002B  ................                                              
                            000000002720A220     00000000     00002308     0201F1C4     C5C8C1D2  ..........1DEHAK                                              
                            000000002720A230     61C8C1D1     C9D9C16F     F3F0F8F4     F0F6F0F1  .HAJIRA.30840601                                              
                            000000002720A240     F5F9F4F4     F1F7F6F3     F2000000     0000000E  594417632.......                                              
                            000000002720A250     00000000     000003C1     E683C1C7     00000000  .......AWcAG....                                              
                            000000002720A260     00000000     00000000     00000000     00000000  ................                                              
                            000000002720A270     00000000     0000C008     7D2DBDAD     00100F00  ................                                              
                            000000002720A280     E3D3F0F7     F5F5C161     F2F6D4C1     E8000000  TL0755A.26MAY...                                              
                            000000002720A290     00000000     00000000     00000017     00000000  ................                                              
                            000000002720A2A0     00000F00     C6D9D7C1     D940D5D6     D7C8D6D5  ....FRPAR NOPHON                                              
                            �SYSTEM ERROR NUMBER   OPR-I000004   VIRTUAL STORAGE ERROR                             TAPE G01738         DUMP 3589  PAGE 00000165 
                            SYSTEM ERROR NUMBER   OPR-I000004   VIRTUAL STORAGE ERROR                             TAPE G01738         DUMP 3589  PAGE 00000166  
                            000000002720A2B0     C5000000     00000000     00000000     00000000  E...............                                              
                            000000002720A2C0     00000000     00000000     0000C008     7D2DBD32  ................                                              
                            000000002720A2D0     008F0000     00000000     00000000     00000000  ................                                              
                            000000002720A2E0     00203800     24C5E3C8     4DB1C200     00000000  .....ETH..B.....                                              
                            000000002720A2F0     00000000     0000C008     7D2DBD32     00100008  ................                                              
                            000000002720A300     00000000     00000008     00000000     00000001  ................                                              
                            000000002720A310     00000000     00000008     00000000     00000008  ................                                              
                            000000002720A320     00000000     00000008     00000000     00000000  ................                                              
                            000000002720A330     00000000     00000000     00000000     00000000  ................                                              
                            000000002720A360     00000000     00000000     7D2DBD30     01000034  ................                                              
                            000000002720A370     32080201     F1C4C5D9     C1D4C5C3     D6E4D9E3  ....1DERAMECOURT                                              
                            000000002720A380     0161D4C1     D9C9C540     D3C9D3D2     C15B5BF0  ..MARIE LILKA..0                                              
                            000000002720A390     F0F2F9F0     F9F0F1F6     F7F1F8F0     F1F1F3F5  0290901671801135                                              
                            000000002720A3A0     F9F6F0F0     F0F1F5F0     F1F9F4F2     F1C4D400  9600015019421DM.                                              
                            000000002720A3B0     00000000     00000000     00000020     00000000  ................                                              
                            000000002720A3C0     E4C2D3C1     E7D20000     00000000     80800000  UBLAXK..........                                              
                            000000002720A3D0     01000000     000003E4     51558691     00001008  .......U..fj....                                              
                            000000002720A3E0     08010800     00002000     08800004     00000000  ................                                              
                            000000002720A3F0     00000000     00000000     40000000     00010000  ........ .......                                              
                            000000002720A400     003F4600     3F460000     00000000     00000000  ................                                              
                            000000002720A410     00000000     00000000     6176D91B     00000000  ..........R.....                                              
                            000000002720A420     00000000     00000000     00000000     00000000  ................                                              
                            000000002720A440     0000E3D3     C6000000     00000000     00000000  ..TLF...........                                              
                            000000002720A450     00000000     00000000     00000000     000080E3  ...............T                                              
                            000000002720A460     D3D70000     080000E7     00000000     00000000  LP.....X........                                              
                            000000002720A470     00000000     00000000     00000000     00000000  ................                                              
                            000000002720A4A0     00000000     00000000     00000000     86B4B84A  ............f...                                              
                            000000002720A4B0     00000000     00000000     000083AF     21B4003F  ..........c.....                                              
                            000000002720A4C0     46D6F8F8     51558691     A000E3D3     C600D7C1  .O88..fj..TLF.PA                                              
                            000000002720A4D0     D6000000     0000E3D3     D7C20000     00000000  O.....TLPB......                                              
                            000000002720A4E0     00000000     00002000     02000000     00000000  ................                                              
                            000000002720A4F0     00000000     00000000     00000000     00000000  ................                                              
                            000000002720AFF0     00000000     00000000     00000000     00000013  ................                                              
                                                                                                                                                                
                            *DATA BLK, LEVEL 3 OBTAINED BY PROGRAM-TPB2 RELEASED BY PROGRAM-N/A                                                                 
                            0000000027214000     E3D20000     00000000     00000000     00000000  TK..............                                              
                            0000000027214010     4D9503E4     4D951022     0000157C     00AF21B4  .n.U.n..........                                              
                            0000000027214020     D7C1D7F0     F0F0F0F2     F4F8D6F8     F8F040E3  PAP0000248O880 T                                              
                            0000000027214030     D9C1C9D5     D3C9D5C5     F2F04040     40404040  RAINLINE20                                                    
                            0000000027214040     404040D7     C1D9C9E2     40404040     40404040     PARIS                                                      
                            0000000027214050     40404040     00000000     00000000     00000000      ............                                              
                            0000000027214060     00000000     00C5E4D9     02C5E4D9     02D7F3F4  .....EUR.EUR.P34                                              
                            0000000027214070     F040D7C1     D7F0F0F0     F0F2F4F8     AF21B6F6  0 PAP0000248...6                                              
                            0000000027214080     4BF5F5F9     F5F70000     000000C6     D9D7C1D9  .55957.....FRPAR                                              
                            0000000027214090     20C6D900     E4C2D3C1     E7D28000     00502000  .FR.UBLAXK......                                              
                            00000000272140A0     00008000     00010100     00010001     00010000  ................                                              
                            00000000272140B0     03194095     2F000100     00000000     01000100  .. n............                                              
                            00000000272140C0     00000000     01000000     D7E3F0F0     C1C40100  ........PT00AD..                                              
                            00000000272140D0     2A789B10     00000000     00000000     00000000  ................                                              
                            00000000272140E0     00000000     00000000     00000000     00000000  ................                                              
                            �SYSTEM ERROR NUMBER   OPR-I000004   VIRTUAL STORAGE ERROR                             TAPE G01738         DUMP 3589  PAGE 00000166 
                            SYSTEM ERROR NUMBER   OPR-I000004   VIRTUAL STORAGE ERROR                             TAPE G01738         DUMP 3589  PAGE 00000167  
                            0000000027214110     00000000     00000000     83DDE160     2A7829F4  ........c..-...4                                              
                            0000000027214120     00000000     00000000     00000000     00000001  ................                                              
                            0000000027214130     00000001     2A789B10     2A781B08     2A7ACDD8  ...............Q                                              
                            0000000027214140     27214000     2A7ACDD8     2A789B10     27208BE0  .. ....Q........                                              
                            0000000027214150     00000000     16BE502C     2A789B26     00002197  ...............p                                              
                            0000000027214160     00000004     00000000     27214000     27208BE0  .......... .....                                              
                            0000000027214170     27210424     00000000     00000000     01000000  ................                                              
                            0000000027214180     00000000     2A7B6020     00000000     00000000  ......-.........                                              
                            0000000027214190     00000000     00000000     00000000     00000000  ................                                              
                            0000000027214290     00002A77     C200C6D9     C6A002F1     4BF0F0F0  ....B.FRF..1.000                                              
                            00000000272142A0     F0F00000     8CEE0000     8CEE0000     8CEE0000  00..............                                              
                            00000000272142B0     157C0C2A     7931D400     000000F3     F0F8F4F0  ......M....30840                                              
                            00000000272142C0     F6F0F1F5     F9F4F4F1     F7F6F3F2     00000000  601594417632....                                              
                            00000000272142D0     00000000     00000000     00000000     00000000  ................                                              
                            00000000272142E0     00000000     00000063     2720A000     0292B000  .............k..                                              
                            00000000272142F0     27214000     27206A80     2720A000     27208BE0  .. .............                                              
                            0000000027214300     00000000     2A789B26     96F260A4     96E431AC  ........o2-uoU..                                              
                            0000000027214310     2A789B26     2A789CCC     83DDE25D     00000000  ........c.S.....                                              
                            0000000027214320     27210022     2721008A     00000000     00000000  ................                                              
                            0000000027214330     01B8012C     003B002B     00170000     80000001  ................                                              
                            0000000027214340     00000000     01010100     01C4C5C8     C1D261C8  .........DEHAK.H                                              
                            0000000027214350     C1D1C9D9     C1404040     40400000     00000000  AJIRA     ......                                              
                            0000000027214360     00000000     00000000     00000000     00000000  ................                                              
                            0000000027214370     00F0F0F0     F0F4F6F6     F916AF77     C62A77C7  .00004669...F..G                                              
                            0000000027214380     00272140     002A77C8     58272121     50272143  ... ...H........                                              
                            0000000027214390     712A789B     00000000     00000000     00000000  ................                                              
                            00000000272143A0     00000000     00000000     00000000     00000000  ................                                              
                            00000000272143C0     000000E3     00000000     00000000     00000000  ...T............                                              
                            00000000272143D0     00000000     00000000     00000000     00000000  ................                                              
                            0000000027214FF0     00000000     00000000     00000000     00000013  ................                                              

                            //ligne vide ici qui ne s'affiche pas, ne pas prendre en compte <br>


                            Comme tu peux le voir le début du bloc à rechercher commence par le mot clé "DATA BLK," et se fini par une ligne composée de 135 espaces.

                            Il faut donc que je récupère tout (sauf les lignes "SYSTEM ERROR NUMBER OPR-I000004 VIRTUAL STORAGE ERROR TAPE G01738 DUMP 3589 PAGE 00000166" mais c'est un détail on verra plus tard)

                            ce qu'il y a entre "DATA BLK, LEVEL 1" et la première ligne d'espace.

                            Puis ce qu'il y a entre "DATA BLK, LEVEL 3" et la deuxième ligne d'espace.

                            Puis ce qu'il y a entre "DATA BLK, LEVEL 4" et la troisième ligne d'espace.

                            etcétéra etcétéra etcétéra...

                            Jusqu'au "LEVEL F"

                            J'espère que ça t’éclaircit l'esprit, sinon je ne peux plus rien pour toi !!! 

                            C'est pourquoi, mon premier algorithme :

                            lire ligne fichier
                            |    POUR nb_info_a_rechercher
                            |        SI info_affichée=FALSE
                            |            rechercher_chaine --> resultat
                            |            afficher ce_qu'il_y_a_apres_chaine
                            |            info_affichée=TRUE
                                        

                             Et je voudrais :

                            Lire ligne fichier
                                rechercher chaine (DATA BLK, LEVEL)
                                SI chaine trouvée
                                    TANTQUE ligne != "             "
                                        afficher ligne

                            J'espère que mes explications sont clairs cette fois !


                            -
                            Edité par ElouanBesnard 25 juin 2020 à 16:58:49

                            • Partager sur Facebook
                            • Partager sur Twitter
                              25 juin 2020 à 17:00:42

                              ElouanBesnard a écrit:

                              J'espère que ça t’éclaircit l'esprit, sinon je ne peux plus rien pour toi !!! 

                              Merci ! Mais je n'ai besoin de rien !

                              • Partager sur Facebook
                              • Partager sur Twitter
                                25 juin 2020 à 17:05:33

                                rouloude a écrit:

                                ElouanBesnard a écrit:

                                J'espère que ça t’éclaircit l'esprit, sinon je ne peux plus rien pour toi !!! 

                                Merci ! Mais je n'ai besoin de rien !

                                rouloude a écrit:

                                Mais une ligne clé je ne sais pas, comment tu reconnais une ligne clé ! Je te pose la question pour ne pas partir dans un sujet à 31 ou 54 post !

                                D'explications apparemment. Effectivement je ne vais pas passer 50 posts à expliquer mon problème, les autres ont l'air d'avoir compris !

                                magma a écrit:

                                Un bloc ne correspondrait-il pas à tout ce qu'il y a entre les deux * ?

                                Si c'est pas indiscret, une fois récupéré, que souhaite-tu faire avec ce bloc de texte ?


                                Je souhaite simplement afficher ce bloc dans mon fichier texte de sortie.



                                • Partager sur Facebook
                                • Partager sur Twitter
                                  25 juin 2020 à 17:05:52

                                  (Je viens de taper cette réponse avant d'avoir vu l'explication détaillée d'ElouanBesnard. Je corrige en vert...)

                                  J'avais compris que la ligne-clé est la ligne qui commence par le mot-clé "DATA BLK" qui veut probablement dire « bloc de données ». Le but est de récupérer ce « bloc de données », qui est situé entre la ligne-clé et la prochaine ligne vide (en fait une ligne de 135 espaces).

                                  Si on lit ligne par ligne, il faut donc détecter qu'on est sur une ligne-clé (facile), puis continuer à parcourir les lignes, mais cette fois en les recopiant quelque part, et arrêter la recopie dès qu'on tombe sur une ligne vide (une ligne de 135 espaces). En gros :

                                  Lire une ligne
                                  Si la ligne commence par un mot-clé :
                                      /* Traitement du bloc associé à ce mot-clé */
                                      Initialiser bloc := un tableau de lignes
                                      Initialiser le booléen fin_bloc := false
                                      Faire :
                                          Lire une ligne
                                          Si la ligne n'est pas vide :   // n'est pas faite de 135 espaces
                                              L'envoyer dans 'bloc'
                                              Incrémenter l'indice du tableau 'bloc'
                                          sinon :
                                              /* Fin du bloc */
                                              fin_bloc := true
                                              Exploiter le bloc, ou le stocker quelque part, je ne sais pas...
                                      Jusqu'à fin_bloc

                                  -
                                  Edité par robun 25 juin 2020 à 17:13:05

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    25 juin 2020 à 17:14:03

                                    ElouanBesnard a écrit:

                                    les autres ont l'air d'avoir compris !

                                    Ils vont se faire un plaisir de te répondre. (J'ai tout de même enfin compris lors de ta dernière explication).

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      25 juin 2020 à 19:20:40

                                      Hello,

                                      Tu n'y arriveras pas avec la boucle que je t'avais montrée. Là, tu vas commencer à faire du bidouillage "pour que ça fonctionne avec le code de base". Mais il s'agit d'un traitement spécifique: repérage d'un début et d'une fin de bloc, et copie (quelque part) des lignes qui s'y trouvent, mais à la condition (je suppose) qu'elles commencent pas un chiffre.

                                      Pour les deux \n qui se suivent, je ne pouvais savoir que la ligne contenait des espaces: ce n'est pas visible à l'écran. Encore un manque d'info (quoique c'est peut-être moi qui ai n'ai pas saisi la subtilité entre 'vierge' et 'vide'). Et je ne me baserais pas sur le fait qu'il y ait 135 espaces, je me baserai sur le fait qu'il n'y ait que des espaces.

                                      Ce qui est dommage, c'est que si tu avais exposé clairement tout le machin dès ton premier post, il y avait surement une solution plus adaptée.

                                      -
                                      Edité par edgarjacobs 25 juin 2020 à 19:21:27

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                        25 juin 2020 à 19:34:09

                                        edgarjacobs a écrit:

                                        Ce qui est dommage, c'est que si tu avais exposé clairement tout le machin dès ton premier post, il y avait surement une solution plus adaptée.

                                        Allons donc !

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          25 juin 2020 à 20:22:32

                                          rouloude a écrit:

                                          edgarjacobs a écrit:

                                          Ce qui est dommage, c'est que si tu avais exposé clairement tout le machin dès ton premier post, il y avait surement une solution plus adaptée.

                                          Allons donc !

                                          :lol:

                                          -
                                          Edité par edgarjacobs 25 juin 2020 à 20:25:01

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                            26 juin 2020 à 10:03:45

                                            Ça à l'air très drôle ...

                                            Si vous êtes ici pour vous moquez je ne vous retiens pas ...

                                            Vous me demandez une explication plus que claire alors que, pour moi c'était clair depuis le début.

                                            Je vous l'ai donc donnée et en voici le résultat !

                                            Je suis ici pour apprendre pas pour me faire humilier...

                                            Bonne journée

                                            -
                                            Edité par ElouanBesnard 26 juin 2020 à 10:04:18

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              26 juin 2020 à 18:31:01

                                              Alors, donnes-nous des explications plus claires:
                                              + le format précis de ton fichier
                                              + on sait ce que tu veux faire.
                                              + qu'est-ce que tu ne comprends pas?
                                              Et on ne se moque pas toujours du PO, mais on le fait entre nous.
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Le Tout est souvent plus grand que la somme de ses parties.

                                                26 juin 2020 à 18:37:03

                                                Tu ne va pas t'y mettre aussi !
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  26 juin 2020 à 20:14:11

                                                  J'ai donné un algorithme qui me semble adéquat, donc j'ai la conscience tranquille... :magicien:

                                                  ElouanBesnard : au fait, tu en penses quoi, de cet algorithme ?

                                                  Mais c'est vrai que c'est difficile de t'aider. Tu demandes de l'aide concernant des points précis, c'est très bien, c'est la bonne façon de faire, et tu donnes les infos concernant ces points précis. Du coup on n'a pas la vision globale du sujet, ce qui fait que c'est encore plus difficile pour nous. Le risque, c'est qu'on ne peut que répondre à tes questions. C'est risqué parce que si tu pars dans une mauvaise direction, on ne le saura pas et on t'aidera à avancer dans la mauvaise direction.

                                                  Par exemple je soupçonne toujours que le fichier de départ a un format connu (par des gens, pas forcément par toi) et documenté (quelque part). Si c'est le cas, il faut forcément exploiter ce format, ce que tu ne fais pas (puisque tu penses, si j'ai bien compris, qu'il n'a pas de format connu − c'est peut-être vrai, mais je suis sceptique). Tiens, un exemple : je me souviens que tu n'avais pas remarqué que les deux caractères indiquant la version étaient toujours à la même position dans la ligne. Du coup, tu voulais les trouver en avançant dans le fichier jusqu'à tomber dessus. C'est bien plus simple si on remarque qu'ils sont toujours à la même position dans la ligne : on y accède directement avec leur indice. Mais si on ne connaît pas ce genre de détail, on se retrouve à t'aider à avancer dans le fichier, donc à perdre du temps...

                                                  -
                                                  Edité par robun 26 juin 2020 à 20:14:35

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    26 juin 2020 à 22:15:54

                                                    Chouette un dump ! Toute ma jeunesse, quand on allait chercher les erreurs dans le truc en hexadécimal :-)

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      27 juin 2020 à 0:49:42

                                                      Ah oui, le machin dans lequel (ibm 360) il fallait d'abord décoder le psp avant de pouvoir analyser d'où venait le plantage

                                                      -
                                                      Edité par edgarjacobs 27 juin 2020 à 0:51:12

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                                        27 juin 2020 à 0:59:02

                                                        edgarjacobs a écrit:

                                                        Ah oui, le machin dans lequel (ibm 360) il fallait d'abord décoder le psp avant de pouvoir analyser d'où venait le plantage

                                                        -
                                                        Edité par edgarjacobs il y a 2 minutes

                                                        Tu as connu ce genre de monstre? Ce n'était pas mieux avec le CDC Cyber 74 (bonus, le dump était en octal)

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Le Tout est souvent plus grand que la somme de ses parties.

                                                        Extraire un bloc d'un fichier texte

                                                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                        • Editeur
                                                        • Markdown