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.
Explication détaillée (pour débutants)
01 FRUITS.
05 FRUIT-ITEM PIC X(12) OCCURS 6 TIMES.
On déclare un tableau de 6 cases. Chaque case (FRUIT-ITEM) peut contenir 12 caractères. Le motOCCURScrée la liste.01 IDX PIC 9 VALUE 1.
IDXest notre compteur (index). On commence à 1 (enCOBOLles tableaux commencent traditionnellement à 1, pas à 0).PERFORM VARYING IDX FROM 1 BY 1
C’est le début de la boucle « pour chaque élément ».
VARYING= la variable va changer
IDX FROM 1= commence à 1
BY 1= augmente de 1 à chaque tourUNTIL IDX > 6
La boucle continue tant queIDXest ≤ 6.
Dès queIDXdevient 7, la boucle s’arrête automatiquement.DISPLAY "Fruit n°" IDX " → " FRUIT-ITEM(IDX)
À chaque tour, on affiche le numéro et le contenu de la case numéroIDX.
FRUIT-ITEM(IDX)= on accède à l’élément numéroIDXdu tableau.END-PERFORM.
Marque la fin de la boucle (obligatoire avec cette syntaxe).
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).