Cobol ANS 74/Tables

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche
Cobol ANS 74
Tables
Sommaire
Liens
Modifier ce modèle

Acces par Indice, Index, Search

  • OCCURS (1 par dimension)
ne va pas en 01 66 77 88

Une dimension[modifier | modifier le wikicode]

01 TAB.
   02 ELEM PIC 99; OCCURS 10.
      88 NUL VALUE 0.

*INITIALISATION.
01 TAB; VALUE "0102030405".
   02 ELEM PIC 99; OCCURS 5.
->TAB (5*2bit)

Multitables[modifier | modifier le wikicode]

01 TAB.
   02 FILLER PIC X(9) VALUE "JANVIER".
   02 FILLER PIC X(9) VALUE "FEVRIER".
   02 FILLER PIC X(9) VALUE "MARS".
   02 FILLER PIC X(9) VALUE "AVRIL".
   02 FILLER PIC X(9) VALUE "MAI".
   02 FILLER PIC X(9) VALUE "JUIN".
   02 FILLER PIC X(9) VALUE "JUILLET".
   02 FILLER PIC X(9) VALUE "AOUT".
   02 FILLER PIC X(9) VALUE "SEPTEMBRE".
   02 FILLER PIC X(9) VALUE "OCTOBRE".
   02 FILLER PIC X(9) VALUE "NOVEMBRE".
   02 FILLER PIC X(9) VALUE "DECEMBRE".

01 TAB-MOIS REDEFINES TAB.
   02 MOIS PIC X(9) OCCURS 12.
->TAB et TAB-MOIS (9*12bit)

Multidimension[modifier | modifier le wikicode]

01 ECOLE.
   02 NOM-ECOLE PIC X(20).
   02 CLASSE OCCURS 15.
      03 NOM-CLASSE PIC X(10).
      03 ELEVES OCCURS 20.
         04 NOM-ELEVE PIC X(20).
         04 ADR-ELEVE PIC X(30).
      03 PROF OCCURS 10.
         04 NOM-PROF PIC X(20).
         04 COURS OCCURS 5.
            05 INTITULE PIC X(15).
            05 HEURES PIC 99.
-> INTITULE(15, 10, 5) // INTITULE du 5e cours de 10e prof de 15e classe
-> COURS(15, 10, 5) // INTITULE+HEURES du 5e cours de 10e prof de 15e classe
-> NOM-PROF(15, 10) // NOM-PROF du 10e prof de 15e classe
-> PROF(15, 10) // 10e PROF de 15e classe
-> ADR-ELEVE(15, 11) // ADR-ELEVE de 11e eleves de 15e classe
-> NOM-CLASSE(3) // NOM-CLASSE de 3e classe

Recherche dans un tableau[modifier | modifier le wikicode]

indices[modifier | modifier le wikicode]

PERFORM RCH VARYING I FROM 1
                      BY   1
                      UNTIL I > 15
            AFTER   J FROM 1
                      BY   1
                      UNTIL J > 20 OR ADR-ELEVE(I, J) = "DANIEL".

index[modifier | modifier le wikicode]

  • accelere la recherche sur champs:
01 TAB.
   02 A OCCURS 5; INDEXED BY I1.
      03 B OCCURS 7; INDEXED BY I2, I3.
         04 C PIC 9; OCCURS 4 INDEXED BY I4
-> Chaque tab reçois un index !
Dans l'exemple suivant si C(4, 2, 3)=7 est le premier 7 trouvé, on aura un arret à ((3*7*4)+(1*2*3)) soit la 90e boucle de I4.
PERFORM RCH VARYING I1 FROM 1
                       BY   1
                       UNTIL I1 > 5
            AFTER   I2 FROM 1
                       BY   1
                       UNTIL I2 > 7 
            AFTER   I4 FROM 1
                       BY   1
                       UNTIL I4 > 9 OR C=(I1, I2, I4) = 7.
  • index permet le calcul et les const-> C(I1+3, I2-7, (4+3))
  • l'adressage n'accepte pas la présence d'indice et index en même temps// C(Index,1,indice)
  • SET index TO {index/ch-index/entier} //initialiser
  • SET index1, index2 {UP/DOWN} by entier //incrementer
  • champ index : sert à sauver valeur d'un index
77 CH-INDEX USAGE INDEX.

search[modifier | modifier le wikicode]

SEARCH nom [VARYING{index/ch-index/ch-entier}]
[AT END ins]
[WHEN cond1 {ins/NEXT SENTENCE}]
[WHEN cond1 {ins/NEXT SENTENCE}]
...
OCCURS entier TIMES
{{ASCENDING/DESCENDING} KEY IS nom1 (nom2)...}...
INDEXED nom1 [,nom2...

search all[modifier | modifier le wikicode]

  • Sur champs triés
SEARCH ALL nom1
[AT END ins]
WHEN {nom-cond/nom2{EQUAL}{expr/const/ident}
[AND{nom-cond/nom2{EQUAL}{expr/const/ident}]
{ins/NEXT SENTENCE}

inspect[modifier | modifier le wikicode]

INSPECT ident1 TALLYING
{ident2 FOR {{{ALL/LEADING}CHARACHTER}{ident3/literal1}}
[{before/after} INITIAL {ident4/literal2}]}...}...

string[modifier | modifier le wikicode]

STRING {{ident1/cont1}[ident2/const2]...
DELIMITED BY {ident1/const1/SIZE}}...
INTO ident4 [WITH POINTER ident5]
[ON OVERFLOW ins]

unstring[modifier | modifier le wikicode]

UNSTRING identificateur-1
[DELIMITED BY [ALL] {ident1/constante1},[OR[ALL] {ident1/const1}]]
INTO {ident4([DELIMITER ident5]/[COUNT ident6])}
[WHITH POINTER ident7]
[TALLYING ident8]
[ON OVERFLOW ins]

Exercices de synthese[modifier | modifier le wikicode]

? Faire la gestion d'une bibliotheque ?

Partant des deux fichiers FLIVRE et FTHEME, faire
A/ MenuPrincipal
1/ Ajout new livre (ouvre SousMenu2).
2/ Ajout nouvel exemplaire
3/ Modifier un livre
4/ Recherche de livre par (1/ titre, 2/ autheur, 3/ code, (? 4/ theme))
B/ SousMenu2
>Sort tous les enreg de FTHEME + num (a introduire en A1)
       |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
       ENVIRONMENT DIVISION.
       ...
       INPUT-OUTPUT SECTION.
        FILE-CONTROL.

         SELECT FLIVRE ASSIGN TO DISK
                ;ORGANIZATION INDEXED
                ;ACCESS MODE DYNAMIC
                ;RECORD KEY IS COD-LIV
                ;ALTERNATE ...
                ;STATUS IS SLIV.

         SELECT FTHEME ASSIGN TO DISK
                ;ORGANIZATION RELATIVE
                ;ACCESS MODE ...
                ;RELATIVE KEY IS ...
                ;STATUS IS STHEME.

       DATA DIVISION.
        FILE SECTION.
         FD FLIVRE LABEL RECORD STANDARD
            VALUE OF FILE-ID IS "FLIVRE.DAT".

         01 ENR-LIV.
            02 CODE PIC X(5).
            02 TITRE PIC X(30).
            02 AUTHEUR PIC X(15).
            02 THEME PIC 99.
            02 QTY-LIV PIC 99.
            02 QT-RESTE PIC 99; COMP-0.

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

         01 ENR-THE.
            02 DESC PIC X(20).
            02 RAYON PIC X(8).
            02 QT-MAX PIC 99.

        WORKING STORAGE SECTION.

         ...