Code opération RPG III / RPG/400 · IBM i (AS/400) · Écriture et contrôle des fichiers
FEOD
Forcer la fin de données d'un fichier
Signale la fin de données pour le fichier : la lecture suivante rencontre la fin de fichier ; le fichier reste ouvert.
Syntaxe
C FEOD fichier ER
- Facteur 2 (33-42)
- Le nom du fichier.
- Indicateurs (56-57)
- Facultatif : s'allume si l'opération échoue.
- Effet
- Sur un fichier en lecture, le
READsuivant allume l'indicateur de fin de fichier, même s'il restait des enregistrements. UnSETLLsuivi d'unREADredonne ensuite des enregistrements.
À quoi ça sert
FEOD sert à arrêter une lecture sans fermer le fichier : un programme qui a trouvé ce qu'il cherchait ou qui doit s'arrêter sur une erreur de données coupe la lecture, puis repositionne le fichier s'il en a encore besoin.
Exemple 1 : Couper la lecture
H* FEOD : fin de donnees forcee sur un fichier en lecture
FCLIENT3 IF E DISK
C*
C READ CLIENT3 90
C NOM DSPLY
C FEOD CLIENT3 56
C 56 MOVE '1' ERR 1
C N56 MOVE '0' ERR
C ERR DSPLY
C READ CLIENT3 90
C *IN90 DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Dupont SA
0
1
Un READ donne Dupont SA (il reste quatre clients). Après FEOD, l'indicateur 56 reste éteint (« 0 ») et le READ suivant allume 90 (« 1 ») : fin de fichier.
Exemple 2 : Se repositionner ensuite
H* FEOD : apres la fin de donnees forcee, repositionnement
FCLIENT3 IF E K DISK
C*
C READ CLIENT3 90
C FEOD CLIENT3
C READ CLIENT3 90
C *IN90 DSPLY
C READ CLIENT3 90
C *IN90 DSPLY
C *LOVAL SETLLCLIENT3
C READ CLIENT3 90
C *IN90 DSPLY
C NOM DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
1
1
0
Dupont SA
Après FEOD, deux READ donnent la fin de fichier (« 1 », « 1 »). Un SETLL *LOVAL repositionne : le READ redonne Dupont SA (« 0 »).
Le piège
FEOD ne ferme pas le fichier et n'efface rien : la fin de fichier ne dure que jusqu'à la prochaine opération de positionnement (SETLL). Pour libérer le fichier, utilisez CLOSE.
En RPG ILE full free
L'instruction FEOD existe aussi en RPG IV et en format libre.
read client3;
feod client3;