Bienvenue dans la formation COBOL

Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.

Info : Ce module vous permet d’accéder rapidement aux contenus essentiels de la formation COBOL.
Retour au plan général

Accès aux éléments d’un tableau avec des index

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.

Tableaux Index Parcours

Conceptualiser

Mécanisme

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) .

Index numérique (le plus courant en débutant)
Une variable, par exemple  WS-I , contient 1, 2, 3… et vous accédez à  WS-NOM(WS-I) .
Index déclaré (selon style :  INDEXED BY )
Certains styles déclarent un index dédié au tableau. C’est très utilisé avec  SET  et des parcours rapides. Pour démarrer, l’index numérique suffit.
Sécurité : respecter les bornes
Un tableau de 5 éléments accepte les positions 1 à 5. Toute autre valeur est un piège classique.
Erreur typique
Penser comme en “zéro-based”. En cobol, les indices utilisés en pratique sont le plus souvent 1..N (pas 0..N-1). Gardez cette règle simple : commencez à 1, terminez à la limite.

Opérer

Lecture + modification

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.

Fichier : demo-index.cbl
Cobol (format libre)

 >>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.
Ce que vous pratiquez
  • Lire une position au clavier, puis la valider
  • Accéder à un élément avec  WS-NOM(WS-POS) 
  • Modifier une case du tableau avec  MOVE 
  • Contrôler les bornes : 1 ≤ position ≤ limite
Pourquoi lire la position en texte ?
Parce que l’utilisateur peut saisir une lettre, un espace, ou une valeur inattendue. Lire en  X(2) , tester, puis convertir évite des comportements imprévisibles.

Position à zéro
Si vous utilisez 0, vous êtes hors bornes. Solution : contrôlez explicitement >= 1.
Position trop grande
Si l’utilisateur saisit 9 alors que la limite est 5, vous devez refuser. Solution : test sur la limite.
Indice et taille incohérents
Si vous changez  OCCURS  à 10, adaptez la variable limite et le format des champs (indice plus large si nécessaire).
Explorer : exercices
1) Demandez une position, puis demandez un nouveau nom et placez-le dans cette case.
2) Ajoutez un test : si la case est vide (espaces), affichez “Attention : case vide”.
3) Créez un tableau de nombres et affichez l’élément choisi par l’utilisateur.

↑ Haut