Code opération RPG III / RPG/400 · IBM i (AS/400) · Lecture de fichiers
READP
Lire l'enregistrement précédent
Lit l'enregistrement qui précède la position courante du fichier ; l'indicateur de la colonne 58-59 s'allume au début du fichier.
Syntaxe
C READPfichier BF
C READPformat BF
- Facteur 2 (33-42)
- Le fichier ou l'un de ses formats d'enregistrement. Le facteur 1 reste vide.
- Colonne 53
N: lecture sans verrouillage.- Indicateurs (56-57)
- Facultatif : s'allume en cas d'erreur d'entrée-sortie.
- Indicateurs (58-59)
- Obligatoire (
QRG5134sinon) : s'allume quand il n'y a plus d'enregistrement avant la position courante (début de fichier). - Effet
- S'il existe un enregistrement avant la position courante, l'indicateur est éteint et les zones sont chargées ; sinon il s'allume et les zones ne changent pas.
À quoi ça sert
READP lit le fichier à l'envers : du dernier client au premier, ou le client qui précède celui qu'on vient de retrouver. Pour partir de la fin, on se place après le dernier enregistrement avec SETGT *HIVAL.
Exemple 1 : Le fichier à l'envers
H* READP : lire le fichier a l'envers apres SETGT *HIVAL
FCLIENT3 IF E K DISK
C *HIVAL SETGTCLIENT3
C READPCLIENT3 99
C *IN99 DOWEQ'0'
C NOM DSPLY
C READPCLIENT3 99
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Petit Atelier
Bernard Transports
Leroy SARL
Martin et fils
Dupont SA
SETGT *HIVAL place le fichier après le dernier enregistrement. Chaque READP recule d'un client : les cinq clients sortent du numéro 500 au numéro 100, puis 99 s'allume.
Exemple 2 : Le client qui précède, début de fichier
H* READP : lire l'enregistrement qui precede le client 300
FCLIENT3 IF E K DISK
C Z-ADD300 NUMERO 50
C NUMERO CHAINCLIENT3 99
C NOM DSPLY
C READPCLIENT3 98
C *IN98 IFEQ '0'
C NOM DSPLY
C END
C* Du debut du fichier, rien ne precede
C *LOVAL SETLLCLIENT3
C READ CLIENT3 97
C NOM DSPLY
C READPCLIENT3 98
C *IN98 IFEQ '1'
C 'Debut' DSPLY
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Leroy SARL
Martin et fils
Dupont SA
Debut
Après le CHAIN sur le client 300 (Leroy SARL), READP lit le client 200. Plus loin, après la lecture du premier client avec SETLL *LOVAL et READ, un READP allume l'indicateur : « Debut ».
Exemple 3 : Sans positionnement
H* READP : sans positionnement, le fichier est deja au debut
FCLIENT3 IF E K DISK
C READPCLIENT3 99
C *IN99 IFEQ '1'
C 'Debut' DSPLY
C END
C* Il faut se placer d'abord pour lire a l'envers
C *HIVAL SETGTCLIENT3
C READPCLIENT3 99
C NOM DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Debut
Petit Atelier
Sur un fichier qui vient d'être ouvert, READP allume tout de suite l'indicateur (« Debut ») : il n'y a rien avant le premier enregistrement. Après SETGT *HIVAL, le même READP lit le dernier client, Petit Atelier.
Le piège
Il faut d'abord se positionner. Sans cela, READP ne lit rien (troisième exemple). Placez-vous avec SETGT *HIVAL pour lire depuis la fin, ou avec CHAIN, READ ou SETLL.
L'indicateur 58-59 est obligatoire comme pour READ : sans lui, QRG5134, « Aucun indicateur résultant n'est défini pour l'opération ».
En RPG ILE full free
En RPG ILE full free : READP et %EOF, qui vaut aussi pour le début de fichier.
setgt *hival client3;
readp client3;
dow not %eof(client3);
dsply nom;
readp client3;
enddo;