COBOL - lignes de tailles variable

Discussion dans 'Web, design' créé par alleluia, 19 Avril 2004.

Statut de la discussion:
Fermée.
  1. Offline
    alleluia Elite
    voila comme moi je suis une burne, je cherche conseil aupres des connaisseurs:

    Code:
     
    On a un fichier de départ qui contient des lignes, les lignes commencent toutes par un @, les éléments sont sépare par un ; , il faut juste écrire dans un nouveau fichier tout ça sans les @ et les ;. 
      
    Ca on y arrive sans problème, mais dans cette crasse de cobol il faut fixer la longueur des variables des le départ, et la variable qu’on utilise pour lire les lignes a donc une valeur fixe et la ligne elle pas, donc dans l’écriture, le saut de ligne se fait après le nombre de caractère qu’on a fixe et non apres les @. 
      
    Ce serait tout con si on pouvait donner à la variable la longueur de la ligne et basta, mais bon on peut pas. Alors je sais pas si c’est plus simple de passer sous forme de tableau ou quoi. 
      
    Ou alors on avait pensé faire caractère par caractère mais c’est trop lourd. 
    si kkun est assez intelligent ( ou masochiste) pour expliquer comment faire ici, qu il n hesite pas. Merci d'avance
    alleluia, 19 Avril 2004
    #1
  2. Offline
    dagibbon Elite
    la taille des strings est aussi limitée à 256 char? (c un peu loin le cobol...) sinon tu fais un buffer de 256 char, puis avec un baladeur tu fais mumuse comme si c'était un tableau... Mais le cobol...tsss :D GL hein ... Si j'ai encore le courage en rentrant ce soir je regarderai :wink:
    dagibbon, 19 Avril 2004
    #2
  3. Offline
    alleluia Elite
    probleme resolu par l'adjonction de "ORGANIZATION IS LINE SEQUENTIAL." mais nouveau probleme au niveau de l'extraction du dernier champ, celui ci s'obstine a etre vide ( le dernier champ est le prix, si on le lit d'une traite, il est vide, sio on le lit en 2 partie ( unites + decimales), les unites sont la, mais les decimales manquent)

    A votre bon coeur mesdames, messieurs

    Voici le code du programme:

    Code:
           IDENTIFICATION DIVISION.
           PROGRAM-ID.                      program-prix.
          *Lacroix Sophie
          *Programme transformant un fichier en un autre.
          ******************************************************************
           ENVIRONMENT DIVISION.
           CONFIGURATION SECTION.
           special-names.
               decimal-point is comma.
           
           INPUT-OUTPUT SECTION.
           FILE-CONTROL.
               SELECT finput ASSIGN TO "C:\listprixcslux.txt"
                               ORGANIZATION IS LINE SEQUENTIAL.
                        SELECT foutput ASSIGN TO "C:\prix.txt".
          *****************************************************************
           DATA DIVISION.
           FILE SECTION.
           FD          finput.
           01  rec                          pic     x(150).
         
           FD          foutput.
           01          rec-out.
               03        cpt-out            pic     9(4). 
               03        catarticle-out     pic     x(40).
               03        marque-out         pic     x(40).
               03        description-out    pic     x(50).
               03        qte-out            pic S999999999 comp-3.
               03        prix-out           pic 9999999v99.
          *     03     unite-out           pic     9999999.
          *     03      decimal-out         pic     99.
           WORKING-STORAGE SECTION.
           01  FS-IN            PIC   XX.
                       88              EOF     VALUE '10'.
           01  liste.
               03        poubelle      pic     x(50). 
               03        catarticle    pic     x(40).
               03        marque        pic     x(40).
               03        description   pic     x(50).
               03        qte           pic     S999999999.
               03        prix          pic     9999999v99.
          *     03      unite           pic     9999999.
          *     03      decimal         pic     99.  
          *     03      reste           pic     x(50).
           01  cpt                     pic     9(4)    value zero.
           01  pause                   pic     x.  
                 
          ******************************************************************
           PROCEDURE DIVISION.
           begin.
               perform ouverture
               perform traitement      until EOF
               perform  cloture
               stop run.
           ouverture.
               open input finput
                    output foutput
               display "nouvelle presentation:"
               display "----------------------"
               display " "
               accept pause
               .
           traitement.
               
               read finput at end
               continue
               not at end
    
               unstring rec delimited by "@" or ";"
               into poubelle catarticle marque description qte prix
          *    unite decimal reste
               end-unstring           
               add 1 to cpt 
            
               move cpt to cpt-out
               move catarticle to catarticle-out
               move marque to marque-out
               move description to description-out
               move qte to qte-out
               move prix to prix-out
          *     move unite to unite-out
          *     move decimal to decimal-out 
    
               display cpt
          
               display " "
               display rec
               display "catarticle:  " catarticle
               display "marque:  "marque
               display "description:  "description
               display "qte:  "qte
               display "prix  " prix
          *     display "unite-prix:  "unite
          *     display "decimal-prix: " decimal
          *     display "reste:  "reste
               display "**************************************************"
               accept pause
               write rec-out after 1
               end-read
               .
          
           cloture.
               close finput foutput
               accept pause
               
               .  
    et un exemple du fichier source

    Code:
    @ Wireless Lan Accessories;3Com;Access Point 2000 WireLess Lan 11MBits/s;0;174.02 
    @ Wireless Lan Accessories;3Com;Access Point OfficeConnect WireLess Lan 11MBits/s;0;80.49 
    @ Wireless Lan Accessories;3Com;PCI AirConnect WireLess Lan 11MBits/s;0;126.01 
    @ Wireless Lan Accessories;3Com;Pcmcia 11Mbps Wireless OfficeConnect XJack Antenna;0;88.66 
    @ Destockage;Abit;SOCKA KT133A ATA100 KT7A;0;136.37 
    alleluia, 19 Avril 2004
    #3
  4. Offline
    houla, c'est vieux le cobol... mais le problème ne viendrait pas lors de la découpe du fait que tudevrais traiter aussi la fin de ligne comme séparateur ou un truc comme ça ?

    je sais plus du tout comme il fait quand il split une ligne.
    TheFornicator, 24 Avril 2004
    #4
Statut de la discussion:
Fermée.