Code opération RPG III / RPG/400 · IBM i (AS/400) · Lecture de fichiers
REDPE
Lire l'enregistrement précédent s'il a la même clé
Lit l'enregistrement précédent à condition que sa clé égale le facteur 1 ; sinon l'indicateur de la colonne 58-59 s'allume.
Syntaxe
C cle REDPEfichier BF
C cle REDPEformat BF
- Facteur 1 (18-27)
- La clé de comparaison, de même longueur et de même type que la clé du fichier (zone ou liste
KLIST, éventuellement partielle). - Facteur 2 (33-42)
- Le fichier ou l'un de ses formats d'enregistrement.
- Colonne 53
N: lecture sans verrouillage.- Indicateurs (56-57)
- Facultatif : s'allume en cas d'erreur d'entrée-sortie.
- Indicateurs (58-59)
- Obligatoire : s'allume quand l'enregistrement précédent n'a pas la clé, ou qu'il n'y en a plus.
- Effet
- Si l'enregistrement précédent porte la clé du facteur 1, l'indicateur est éteint et les zones sont chargées ; sinon il s'allume et les zones ne changent pas.
À quoi ça sert
REDPE est le READE à l'envers : relire du dernier au premier les enregistrements d'une même clé, par exemple les dernières lignes d'une commande ou les clients d'une ville en ordre inverse. On se place juste après la clé avec SETGT.
Exemple 1 : Les clients d'une ville à l'envers
H* REDPE : les clients de Lyon, du dernier au premier
FCLIENT3VIF E K DISK
C MOVEL'Lyon' CHERCH 20
C CHERCH SETGTCLIENT3V
C CHERCH REDPECLIENT3V 99
C *IN99 DOWEQ'0'
C NOM DSPLY
C CHERCH REDPECLIENT3V 99
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Petit Atelier
Martin et fils
SETGT place le fichier après le dernier client de Lyon. REDPE lit d'abord Petit Atelier (numéro 500), puis Martin et fils (numéro 200), puis rencontre Brest : 99 s'allume.
Exemple 2 : Après SETLL, rien
H* REDPE : apres SETLL il ne trouve rien, il faut SETGT
FCLIENT3VIF E K DISK
C MOVEL'Lyon' CHERCH 20
C* SETLL se place AVANT le premier Lyon : le precedent est Brest
C CHERCH SETLLCLIENT3V
C CHERCH REDPECLIENT3V 99
C *IN99 IFEQ '1'
C 'Aucun' DSPLY
C END
C* SETGT se place APRES le dernier Lyon
C CHERCH SETGTCLIENT3V
C CHERCH REDPECLIENT3V 99
C *IN99 IFEQ '0'
C NOM DSPLY
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Aucun
Petit Atelier
Avec SETLL, le fichier est placé avant le premier client de Lyon : l'enregistrement précédent est un client de Brest, REDPE allume 99 (« Aucun »). Après SETGT, le même REDPE lit Petit Atelier.
Le piège
L'enchaînement est SETGT puis REDPE, pas SETLL puis REDPE. SETLL place avant la première occurrence de la clé, donc le précédent n'en fait jamais partie (deuxième exemple).
En RPG III, c'est REDPE, pas READPE. Le code opération tient en 5 colonnes (28-32). Écrit READPE, il est lu comme READP suivi d'un facteur 2 ECLIENT3V : le compilateur refuse la ligne (QRG5024, « Le facteur 2 est incorrect »). READPE est le nom de la même opération en RPG IV (ILE).
En RPG ILE full free
En RPG ILE full free, l'opération s'appelle READPE.
setgt chercher client3v;
readpe chercher client3v;
dow not %eof(client3v);
dsply nom;
readpe chercher client3v;
enddo;