Aller au contenu

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;