Parcourir une liste – PERFORM VARYING

En COBOL, pour parcourir chaque élément d'une liste (un OCCURS) sans se préoccuper explicitement des numéros d'index, on utilise très souvent la forme PERFORM VARYING avec un compteur d'index. C'est l'équivalent le plus proche de la boucle « for each » des langages modernes.

Exemple de code

IDENTIFICATION DIVISION.
PROGRAM-ID. LISTE-FRUITS.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  FRUITS.
    05  FRUIT-ITEM      PIC X(12) OCCURS 6 TIMES.

01  IDX                 PIC 9 VALUE 1.

PROCEDURE DIVISION.
    MOVE "Pomme       " TO FRUIT-ITEM(1)
    MOVE "Poire       " TO FRUIT-ITEM(2)
    MOVE "Banane      " TO FRUIT-ITEM(3)
    MOVE "Kiwi        " TO FRUIT-ITEM(4)
    MOVE "Fraise      " TO FRUIT-ITEM(5)
    MOVE "Mangue      " TO FRUIT-ITEM(6)

    PERFORM VARYING IDX FROM 1 BY 1
            UNTIL   IDX > 6
        DISPLAY "Fruit n°" IDX " → " FRUIT-ITEM(IDX)
    END-PERFORM.

    STOP RUN.
        
Télécharger le code

Explication détaillée (pour débutants)

Sortie attendue

Fruit n°1 → Pomme       
Fruit n°2 → Poire       
Fruit n°3 → Banane      
Fruit n°4 → Kiwi        
Fruit n°5 → Fraise      
Fruit n°6 → Mangue      
        

Note : les espaces à la fin de chaque fruit viennent de la déclaration PIC X(12). On pourrait utiliser TRIM ou FUNCTION TRIM pour les enlever si besoin (à voir dans un prochain chapitre).