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

Déclaration de tableaux avec la clause occurs

En cobol, un “tableau” est une zone mémoire composée de plusieurs éléments identiques, stockés les uns à la suite. La clause  OCCURS  sert à répéter une définition de champ un certain nombre de fois. C’est une notion clé pour gérer des listes (noms, montants, codes), parcourir des données, et écrire des traitements batch structurés.

Données Tableaux Boucles

Conceptualiser

Notions clés

Un tableau cobol se décrit dans la  DATA  DIVISION  : vous créez une structure, puis vous répétez un élément avec  OCCURS .

Répétition d’un élément
 OCCURS 5 TIMES  signifie : “ce champ existe 5 fois”.
Accès par indice
On accède à un élément avec un indice (souvent de 1 à N) :  WS-NOM(WS-I) .
Parcours avec une boucle
En pratique, vous combinez  PERFORM  et  VARYING  pour lire / remplir / afficher chaque occurrence.
Point d’attention
Le risque classique est l’indice hors limites : accéder à l’élément 6 d’un tableau déclaré  OCCURS 5 TIMES . La règle simple : contrôlez toujours la borne.

Opérer

Exemple exécutable

Cet exemple déclare un tableau de 5 noms, le remplit, puis l’affiche. Vous voyez immédiatement la logique : déclarer avec  OCCURS , parcourir avec une boucle, et accéder à chaque élément par indice.

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

 >>SOURCE FORMAT FREE
 IDENTIFICATION DIVISION.
 PROGRAM-ID. DEMO-OCCURS.

 DATA DIVISION.
 WORKING-STORAGE SECTION.

 01 WS-I         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 REMPLIR-TABLE
    PERFORM AFFICHER-TABLE
    STOP RUN.

 REMPLIR-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 "--- Liste des noms ---"
    PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > WS-LIMITE
        DISPLAY "Element " WS-I " = [" WS-NOM(WS-I) "]"
    END-PERFORM.
Ce que vous comprenez
  • Un tableau = un groupe + un champ répété avec  OCCURS 
  • Les éléments sont accédés par indice :  WS-NOM(3) 
  • Une boucle  PERFORM  parcourt de 1 à N
  • Les crochets [...] rendent visibles les espaces de fin
Variante pratique
Vous pouvez remplacer le remplissage par des saisies utilisateur : boucle de 1 à 5,  ACCEPT  dans  WS-NOM(WS-I) , puis affichage récapitulatif.

Indice hors limites
Si votre tableau est  OCCURS 5 TIMES , les indices valides sont 1 à 5. Solution : utilisez une limite ( WS-LIMITE ) et un test clair dans la boucle.
Champ compteur trop petit
Un compteur  PIC 9(2)  sature vite si vous augmentez la taille du tableau. Solution : adaptez le format (ex.  9(4) ).
Affichage “bizarre” à cause des espaces
Un champ texte stocke des espaces à droite. Solution : encadrez systématiquement l’affichage : [ + valeur + ], surtout en phase d’apprentissage.
Expliquer
La clause  OCCURS  vous force à raisonner “structure + répétition”. C’est exactement la logique des traitements métier : mêmes règles appliquées à des séries de valeurs (lignes, codes, montants, listes de champs).
Explorer : exercices
1) Remplacez les 5 noms par des saisies clavier (boucle +  ACCEPT ).
2) Créez un tableau de 10 nombres ( PIC 9(3) ) et calculez la somme.
3) Affichez uniquement les éléments non vides (testez si le champ est différent d’espaces).

↑ Haut