Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Lecture de fichiers

SETGT

Se positionner après une clé, sans lire

Place le fichier sur le premier enregistrement dont la clé est strictement supérieure au facteur 1, sans rien lire.

Syntaxe

     C           cle       SETGTfichier              HI
     C           *HIVAL    SETGTfichier
     C           *LOVAL    SETGTformat               HI
Facteur 1 (18-27)
La clé : une zone, une liste KLIST ou une constante figurative (*LOVAL, *HIVAL).
Facteur 2 (33-42)
Le fichier (indexé) ou l'un de ses formats.
Indicateurs (54-55)
Facultatif : s'allume quand aucun enregistrement n'a une clé supérieure.
Indicateurs (58-59)
Non utilisable : le compilateur refuse un indicateur ici (QRG5130).
Effet
Le fichier est positionné avant le premier enregistrement de clé strictement supérieure : un READ le lit, un READP lit le dernier enregistrement de clé inférieure ou égale. Aucune zone n'est chargée.

À quoi ça sert

SETGT est le pendant de SETLL : là où SETLL se place avant la clé, SETGT se place après. On l'emploie pour lire à l'envers (SETGT *HIVAL puis READP), pour sauter tous les enregistrements d'une clé, ou avant un REDPE.

Exemple 1 : SETLL ou SETGT sur la même clé

     H*  SETGT : se placer apres la cle, SETLL se place avant
     FCLIENT3 IF  E           K        DISK
     C                     Z-ADD300       NUMERO  50
     C           NUMERO    SETLLCLIENT3
     C                     READ CLIENT3                  99
     C           NOM       DSPLY
     C           NUMERO    SETGTCLIENT3
     C                     READ CLIENT3                  99
     C           NOM       DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Leroy SARL
Bernard Transports

Sur la clé 300, SETLL puis READ lit Leroy SARL (la clé elle-même) ; SETGT puis READ lit Bernard Transports (400), le client suivant.

Exemple 2 : L'indicateur 54-55

     H*  SETGT : 54-55 s'allume quand aucune cle n'est plus grande
     FCLIENT3 IF  E           K        DISK
     C                     Z-ADD200       NUMERO  50
     C           NUMERO    SETGTCLIENT3              90
     C           *IN90     DSPLY
     C                     Z-ADD500       NUMERO
     C           NUMERO    SETGTCLIENT3              90
     C           *IN90     DSPLY
     C                     READ CLIENT3                  99
     C           *IN99     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

0
1
1

Après SETGT sur 200, des clés supérieures existent : 90 reste éteint (0). Sur 500, la plus grande clé du fichier, il n'y en a pas : 90 s'allume (1) et le READ qui suit trouve la fin de fichier (99 allumé).

Le piège

SETGT n'accepte pas d'indicateur en 58-59. Avec un indicateur dans cette zone, le compilateur répond QRG5130 (gravité 30) : « Les positions 58-59 (Indicateur résultant) ne sont pas à blanc pour l'opération définie. Blancs pris par défaut. ». Pour tester l'existence d'une clé, c'est SETLL qu'il faut.

Avec SETGT, le client de la clé n'est plus lu (premier exemple) : choisissez entre SETLL et SETGT selon que la clé doit faire partie de la lecture.

En RPG ILE full free

En RPG ILE full free : SETGT, sans indicateur ; la lecture qui suit dit s'il reste des enregistrements.

setgt numero client3;
read client3;
if not %eof(client3);
  dsply nom;
endif;