Code opération RPG III / RPG/400 · IBM i (AS/400) · Structures de contrôle
ITER
Passer au tour suivant d'une boucle
Saute le reste du corps de la boucle DO, DOWxx ou DOUxx la plus interne et reprend au END, pour le prochain tour.
Syntaxe
C ITER
- Indicateurs de conditionnement (9-17)
- Permettent de ne sauter que dans certains cas, sans
IFxxautour. - Facteurs et zone résultat
- Aucun : l'opération s'écrit seule sur sa ligne.
- Effet
- Aucun indicateur positionné. L'exécution reprend au
ENDde la boucle la plus interne qui contient l'ITER: unDOajoute son incrément à l'indice, unDOWxxou unDOUxxteste sa condition.
À quoi ça sert
ITER évite de multiplier les niveaux d'IFxx : on écarte tout de suite les cas à ignorer (client d'une autre ville, ligne vide) et le traitement normal reste au premier niveau.
Exemple 1 : Ignorer les clients d'une autre ville
H* ITER : passer au tour suivant sans finir le corps de la boucle
FCLIENT3 IF E K DISK
C Z-ADD0 NBVIL 30
C READ CLIENT3 90
C *IN90 DOWEQ'0'
C VILLE IFNE 'Lyon'
C READ CLIENT3 90
C ITER
C END
C ADD 1 NBVIL
C NOM DSPLY
C READ CLIENT3 90
C END
C NBVIL DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Martin et fils
Petit Atelier
2
Pour les clients hors de Lyon, le corps relit l'enregistrement suivant puis fait ITER. Seuls Martin et fils et Petit Atelier sont affichés, puis le compteur : 2.
Exemple 2 : L'indice avance malgré ITER
H* ITER : dans un DO, l'indice avance quand meme au tour suivant
C Z-ADD0 SOMME 30
C DO 6 I 20
C I IFEQ 3
C ITER
C END
C ADD I SOMME
C I DSPLY
C END
C SOMME DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
1
2
4
5
6
18
Dans DO 6, l'ITER du tour 3 saute l'addition et l'affichage : on voit 1, 2, 4, 5, 6 et la somme 18 (21 moins 3).
Le piège
ITER saute le reste du corps, y compris le READ de fin. C'est pourquoi le premier exemple relit l'enregistrement juste avant l'ITER : le READ placé en fin de corps n'est pas atteint pour les clients ignorés.
Il lui faut une boucle. Hors de toute boucle, la compilation échoue : QRG5232, gravité 20, « Aucune opération DO, DOUxx ou DOWxx associée à l'opération LEAVE ou ITER. » (message obtenu avec un LEAVE isolé, c'est le même texte pour les deux opérations).
En RPG ILE full free
L'instruction ITER existe à l'identique en RPG ILE full free, dans DOW, DOU et FOR.
for i = 1 to 6;
if i = 3;
iter;
endif;
somme += i;
endfor;