Aller au contenu

DOFOR

DOFOR

En bref

La commande DOFOR traite un groupe de commandes CL zéro fois ou plusieurs fois en fonction des valeurs indiquées pour cette commande.

Syntaxe minimale

DOFOR VAR(…) FROM(…) TO(…)

Paramètres

  • VAR Nom de la variable CL obligatoire
  • FROM De la valeur obligatoire
  • TO Valeur To obligatoire
  • BY Valeur By

Astuce : dans une session 5250, tapez DOFOR puis F4 pour l'invite de saisie, et F1 sur un paramètre pour son aide.

Aide IBM i de la commande

Texte du F1, IBM i 7.5 en français (bibliothèque QSYS)

Où s'exécute :

  • Programme batch (*BPGM)
  • Programme interactif (*IPGM)
Compatible multitâche : Oui

La commande DOFOR traite un groupe de commandes CL zéro fois ou plusieurs fois en fonction des valeurs indiquées pour cette commande.

La variable CL de contrôle de boucle (paramètre VAR) est restaurée à sa valeur initiale (paramètre FROM) et comparée à la valeur de fin de boucle (paramètre TO). Si la valeur d'incrémentation de la boucle (paramètre BY) est positive ou égale à zéro et si la variable de contrôle est inférieure ou égale à la valeur de fin, les commandes situées entre la commande DOFOR et la commande ENDDO correspondante sont traitées. Si la valeur d'incrémentation de la boucle est négative et la variable de contrôle est supérieure ou égale à la valeur de fin, les commandes situées entre la commande DOFOR et la commande ENDDO correspondante sont traitées.

Lorsque le contrôle atteint la commande ENDDO, la variable de contrôle de la boucle est ajustée par la valeur d'incrémentation de la boucle et comparée à la valeur de fin de boucle. Si la variable de contrôle est supérieure à la valeur de fin (si BY a une valeur égale ou supérieure à zéro) ou est inférieure à cette valeur (si BY a une valeur négative), le contrôle passe à la commande qui suit la commande ENDDO. Autrement, le contrôle passe à la première commande qui suit l'instruction DOFOR (le début de la boucle).

Restrictions :

  • Cette commande est admise uniquement dans un programme CL ou une procédure CL ILE.
  • Jusqu'à 25 niveaux d'imbrication de commandes DO, DOWHILE, DOUNTIL et DOFOR sont admis.

Paramètres

Mot-clé Description Valeurs possibles Remarques
VAR Nom de la variable CL CL variable name Obligatoire, positionnel 1
FROM De la valeur Entier Obligatoire, positionnel 2
TO Valeur To Entier Obligatoire, positionnel 3
BY Valeur By Entier, 1 Facultatif

Nom de la variable CL (VAR)

Indique la variable CL utilisée pour contrôler la boucle DOFOR. Cette variable doit être de type *INT ou *UINT. Le nom de la variable doit commencer par une perluète (&).

Ce paramètre est obligatoire.

nom-variable-entier-CL
Indiquez le nom de la variable de nombre entier à utiliser comme contrôle de boucle.

De la valeur (FROM)

Indique la valeur initiale de la variable CL utilisée pour contrôler la boucle DOFOR. Cette valeur doit être indiquée sous forme de constante entière, de variable CL déclarée de type *INT ou *UINT, ou d'expression dont le résultat est une valeur entière. La valeur initiale est attribuée à la variable CL de contrôle de boucle (paramètre VAR) une seule fois, avant le traitement du groupe de commandes CL comprises entre la commande DOFOR et la commande ENDDO correspondante.

Ce paramètre est obligatoire.

entier
Indiquez la valeur entière de la constante pour l'initialisation du paramètre VAR.
nom-variable-entier-CL
Indiquez le nom de la variable de nombre entier à utiliser comme valeur initiale pour la boucle.
expression-nombre-entier
Indiquez une expression dont le résultat sera traité comme une valeur de nombre entier.

Valeur To (TO)

Indique la valeur finale à comparer avec la variable de contrôle (paramètre VAR) pour contrôler la boucle DOFOR. Cette valeur doit être indiquée sous forme de constante entière, de variable CL déclarée de type *INT ou *UINT, ou d'expression dont le résultat est une valeur entière. La variable CL de contrôle de boucle (paramètre VAR) sera comparée à cette valeur finale avant le traitement du groupe de commandes CL comprises entre l'instruction DOFOR et l'instruction ENDDO correspondante, et après chaque itération de boucle.

  • Si la valeur du paramètre BY est négative, la boucle se termine lorsque la variable de contrôle de boucle est inférieure à la valeur de TO.
  • Si la valeur du paramètre BY est positive (ou égale à zéro), la boucle se termine lorsque la variable de contrôle de boucle est supérieure à la valeur de TO.

Ce paramètre est obligatoire.

entier
Indiquez la valeur de la constante à utilisez comme valeur de fin pour la boucle.
nom-variable-entier-CL
Indiquez le nom de la variable de nombre entier à utiliser comme valeur de fin pour la boucle.
expression-nombre-entier
Indiquez une expression dont le résultat sera traité comme une valeur de nombre entier.

Valeur By (BY)

Indique la valeur à ajouter à la variable de contrôle de boucle (paramètre VAR) après chaque itération de boucle. Cette valeur doit être indiquée sous forme de constante entière ; elle peut être positive, négative ou égale à zéro.

1
Incrémente la variable de contrôle indiquée pour le paramètre Nom de la variable CL (VAR) de 1 à chaque itération de boucle.
entier
Indique la valeur de la constante à ajouter à la variable de contrôle pour le paramètre VAR.

Exemples

Exemple 1 : DOFOR - Groupe de commandes traité un nombre de fois déterminé

DCL   VAR(&INT)  TYPE(*INT)  LEN(2)
 :
DOFOR   VAR(&INT)  FROM(1)  TO(10)
 :  (groupe de commandes CL)
ENDDO

Le groupe de commandes entre DOFOR et ENDDO est traité 10 fois. La variable CL &INT reprendra la valeur initiale 1 et est comparée à la valeur de fin de boucle 10. Après chaque itération de boucle, &INT est incrémenté de 1 (valeur par défaut pour le paramètre BY). Après itération de la dixième boucle, &INT prend la valeur 11 et le contrôle passe à la commande qui suit l'instruction ENDDO.

Remarque :Si la valeur de la variable CL &INT est modifiée au sein du groupe de commandes CL dans la boucle DOFOR, la boucle peut être traitée un nombre de fois plus ou moins égal à 10.

Exemple 2 : DOFOR - Utilisation de variables pour FROM et TO

DCL   VAR(&INT)  TYPE(*INT)  LEN(2)
DCL   VAR(&START)  TYPE(*INT)  LEN(2)
DCL   VAR(&END)  TYPE(*INT)  LEN(2)
 :
CHGVAR   VAR(&START)  VALUE(100)
CHGVAR   VAR(&END)  VALUE(0)
 :
DOFOR   VAR(&INT)  FROM(&START)  TO(&END)  BY(-5)
 :  (groupe de commandes CL)
ENDDO

Le groupe de commandes entre DOFOR et ENDDO est traité 21 fois. La variable CL &INT reprendra la valeur initiale 100 et est comparée à la valeur de fin de boucle 0. La valeur de l'incrément étant négative, la boucle est traitée jusqu'à ce que la variable &INT soit inférieure à 0. Après chaque itération de boucle, &INT est incrémenté de 5 et comparé à la valeur de TO. Après itération de la vingt-et-unième boucle, &INT prend la valeur -5 et le contrôle passe à la commande qui suit l'instruction ENDDO.

Remarque :Si la valeur des variable CL &INT et &END est modifiée au sein du groupe de commandes CL dans la boucle DOFOR, la boucle peut être traitée un nombre de fois plus ou moins égal à 21. La modification de la valeur de la variable &START dans la boucle n'affecte pas le comportement de celle-ci, car &START n'est utilisé que pour déterminer la variable de contrôle de boucle (&INT) avant la première itération.

© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.