< Cobol ANS 74

Fichier séquentiel

ENVIRONMENT DIVISION.
  ...
  INPUT-OUTPUT SECTION.
   FILE-CONTROL.
    SELECT FNOM ASSIGN TO (DISK/PRINTER);
           ORGANIZATION IS SEQUENTIAL;
           ACCESS MODE RANDOM;
           FILE STATUS IS FS.
    01 ENREG.
       02 NM1 PIC X(15).
       02 FILLER PIX X(5); VALUE SPACE.
       02 NM2 PIX X(20). 
  DATA DIVISION.
   FILE SECTION.
    FD FNOM LABEL RECORD STANDARD;
       VALUE OF FILE-ID IS "FNOM.DAT".

*OPEN (INPUT/OUTPUT/I-O/EXTEND) FNOM.
*READ FNOM [AT END [INS ... ]].
*WRITE ENREG.
*REWRITE ENREG. - open I-O.
*CLOSE FNOM.


? FACTURE DE GAZ - créer un fichier de consommation de GAZ avec le nom en X(16), adresse X(40), ville X(15) et consommation 9(4)V99. > CRÉER ce fichier en le remplissant et s'il existe déjà, on demande si on veut le détruire (o/n). > FAIRE menu (1. Sortie écran / 2. Rechercher par nom / 3. Ajouter des personnes au fichier / 4. Modifier - smenu (1. nom / 2. adresse / 3. ville / 4. consommation / 0. fin) / 5. Sortie imprimante / 0. fin)

? Rajouter une option d'impression de liste de consommation par client avec numéro en bas de page

fichier indexe

  • OPEN (INPUT/ I-O/ OUTPUT) FICHIER - active CP
  • START FIC KEY IS ((>/ not</ =) nom); INVALID KEY...
    • seq.: Act et pointe CP pour lecture séq.
    • rand: START
    • dyn.: Tous sens.
  • READ
    • seq.: READ ... [AT END ...]; INVALID KEY ...
    • ran.: READ ... KEY IS ...; INVALID KEY ...
    • dyn.: direct / READ ... KEY IS ...; INVALID KEY ...
    • dyn.: sequen / READ ... NEXT [AT END ...]
  • REWRITE ... ; INVALID KEY ... - modif tt sauf CP
  • DELETE FNOM; INVALID KEY ... - charge CP et eff() ENREG
  • WRITE ENREG; INVALID KEY ... - I-O (ajouter), OUTPUT (écrire).
  • CLOSE FNOM

exercices

Soit le fichier suivant // (CP-ClePrimaire) est NUM-PROD et (CleAlternative) est DES-PROD

      *8   |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
       ENVIRONMENT DIVISION
       ...
       INPUT-OUTPUT SECTION.
        FILE-CONTROL.
   
         SELECT FPROD ASIGN TO DISK;
                ORGANIZATION INDEXED;
                ACCESS MODE ...
                RECORD KEY IS NUM-PROD;
                ALTERNATE RECORD DES-PROD DUPLICATES;
                FILE STATUS IS STAT-PROD.


       DATA DIVISION.
        FILE SECTION.

         FD FPROD LABEL RECORD STANDARD;
            VALUE OF FILE-ID IS "FPROD.DAT".

         01 ENR-PROD.
            02 NUM-PROD.
               03 FAM-PROD PIC XX.
               03 FILLER PIC X(4).
            02 NOM-PROD.
               03 DES-PROD PIC X(5).
               03 FILLER PIC X(10).
            02 INFO PIC XX.

        WORKING-STORAGE SECTION.
          
         77 STAT-PROD PIC XX.

? 1/ Faire programme pour CREER, REMPLIR, AFFICHER, MODIFIER, EFFACER dans ce fichier

  • acces sequentiel
? 2/ En acces sequentiel, afficher tout le fichier
? 3/ Afficher tous les produits dont le nom commence par B
  • acces random
? 4/ Entrer un numero de produit et l'afficher
  • acces dynamique
? 5/ En dynamic, affichet tous les produits dont le nom est "rivet"
? 6/ Faire les 5 exercices precedents en acces dynamique
? 7/ Afficher le 1er produit sans faire OPEN à partir de n'importe ou
? 8/ Pour tous les produits de la famille K2, si l'info est AA, elle devient XX. Si l'info est BB, on supprime le produit.
? 9/ Afficher tous les produits à partir du produit H51025. (En 2 versions // Toujours le faire / Le faire uniquement s'il est dedans)

fichier relatif

  • SELECT
  SELECT FICHIER ORGANISATION RELATIVE;
         ACCESS MODE [sequential/random/dynamic];
         RELATIVE KEY IS [VAR];
         STATUS IS [VAR].
  • OPEN
  OPEN {INPUT/OUTPUT/I-O} [FICHIER]
  • START
  START [FNOM] KEY IS {=/>/NOT <} clé-relative;
  [INVALID KEY]
  • READ
    • sequentiel : READ ... AT END ...
    • random : READ ... INVALID KEY ...
    • dynamic :
seq : READ ... NEXT AT END ...
dir : READ ... INVALID KEY ...
  • REWRITE [ENREG] INVALID KEY ...
En random ecrit en fonction de la cle.
En dynamique ecrit le dernier lu.
  • DELETE FNOM INVALID KEY ...
En dynamique efface à la clé.
En seqentiel efface le dernier lu.
  • WRITE [ENREG]; INVALID KEY ...
I-O
Pas en séquentiel.
Random et dynamique, en fonction de clé
OUTPUT
Crée dans ordre croissant de la clé.

files status

  • Chaque E/S fichier genere un status.
FSI/OORGANISATIONMODESIGNIFICATION
00AllAllAllSuccessful
02REWRITE WRITEIndAllCreated duplicate alternate key
02READIndAllDetected alternate duplicate key
04READAllAllRecord not size of user's buffer
05OPENAllAllOptional file not present
07CLOSE OPENAllAllInvalid file organization or device
10READAllSeqNo next logical record or option file not present (at end)
14READRelAllRelative record number too large
21REWRITEIndSeqPrimary key changed after READ
21WRITEIndSeqAttempted nonascending key value (invalid key)
22REWRITEIndAllDuplicate alternate key (invalid key)
22WRITEInd, RelRanDuplicate key (invalid key)
23DELETE READ REWRITE STARTInd, RelRanRecord not in file; optional file not present (invalid key)
24WRITEInd, RelAllBoundary violation or relative record number too large (invalid key)
30AllAllAllAll other permanent errors
34WRITESeqSeqBoundary violation
35OPENAllAllFile not found
37OPENAllAllInappropriate device type
38OPENAllAllFile previously closed with lock
39OPENAllAllConflict of file attributes
41OPENAllAllFile already opened
42CLOSEAllAllFile not opened
43DELETE REWRITEAllSeqNo previous READ or START
44REWRITE WRITEAllAllInvalid record size
46READAllSeqNo valid next record (at end)
47READ STARTAllAllFile not open, or incompatible open mode
48WRITEAllAllFile not open, or incompatible open mode
49DELETE REWRITEAllAllFile not open, or incompatible open mode
90AllAllAllRecord locked by another user (record available)
91OPENAllAllOpen is unsuccessful; file locked by another access stream
92DELETE READ REWRITE START WRITEAllAllRecord locked by another user (record not available)
93UNLOCKAllAllNo current record
94UNLOCKAllAllFile not open, or incompatible open mode
95OPENAllAllNo file space on device
Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons – Attribution – Partage à l’identique. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.