Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.
Une fois un tableau déclaré avec OCCURS , la question devient : comment viser un élément précis ?
En cobol, l’accès se fait par une position, généralement entre 1 et la taille du tableau. Cette position peut être portée
par une variable numérique (indice) ou par un INDEX déclaré spécifiquement pour le tableau,
selon votre style et votre compilateur. Dans tous les cas, l’idée est la même : un tableau = une liste d’éléments, et
un index = la case que vous êtes en train de lire ou de modifier.
Un tableau cobol se manipule “case par case”. L’expression NOM(3) signifie :
“le 3ᵉ élément du tableau NOM”. Si l’index est une variable, vous obtenez NOM(WS-I) .
WS-I , contient 1, 2, 3… et vous accédez à
WS-NOM(WS-I) .
INDEXED BY ) SET et des parcours rapides.
Pour démarrer, l’index numérique suffit.
Cet exemple remplit un tableau, demande une position à l’utilisateur, puis affiche l’élément correspondant. Ensuite, il modifie cette case pour vous montrer que l’accès par index sert autant à lire qu’à écrire.
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. DEMO-INDEX.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-I PIC 9(2) VALUE 0.
01 WS-POS-TXT PIC X(2) VALUE SPACES.
01 WS-POS PIC 9(2) VALUE 0.
01 WS-LIMITE PIC 9(2) VALUE 5.
01 WS-TABLE-NOMS.
05 WS-NOM OCCURS 5 TIMES PIC X(20) VALUE SPACES.
PROCEDURE DIVISION.
PERFORM INIT-TABLE
PERFORM AFFICHER-TABLE
DISPLAY "Choisissez une position (1 a 5) : " WITH NO ADVANCING
ACCEPT WS-POS-TXT
IF WS-POS-TXT IS NUMERIC
MOVE WS-POS-TXT TO WS-POS
ELSE
MOVE 0 TO WS-POS
END-IF
IF WS-POS >= 1 AND WS-POS <= WS-LIMITE
DISPLAY "Element choisi = [" WS-NOM(WS-POS) "]"
MOVE "MODIFIE" TO WS-NOM(WS-POS)
DISPLAY "Apres modif = [" WS-NOM(WS-POS) "]"
ELSE
DISPLAY "Erreur : position hors bornes (" WS-POS-TXT ")"
END-IF
STOP RUN.
INIT-TABLE.
MOVE "DURAND" TO WS-NOM(1)
MOVE "MARTIN" TO WS-NOM(2)
MOVE "BERNARD" TO WS-NOM(3)
MOVE "THOMAS" TO WS-NOM(4)
MOVE "PETIT" TO WS-NOM(5).
AFFICHER-TABLE.
DISPLAY "--- Etat initial ---"
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-LIMITE
DISPLAY "[" WS-I "] = [" WS-NOM(WS-I) "]"
END-PERFORM.
WS-NOM(WS-POS) MOVE X(2) , tester, puis convertir évite des comportements imprévisibles.
>= 1.
OCCURS à 10, adaptez la variable limite et le format
des champs (indice plus large si nécessaire).