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
KLISTou 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
READle lit, unREADPlit 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;