Code opération RPG III / RPG/400 · IBM i (AS/400) · Chaînes de caractères
CHEKR
Vérifier une zone de droite à gauche
Comme CHECK, mais lit le facteur 2 de droite à gauche : donne la position du dernier caractère qui ne figure pas dans la liste du facteur 1.
Syntaxe
C valides CHEKRbase pos 20 58
C valides CHEKRbase:dep pos 20 58
- Facteur 1 (18-27)
- La liste des caractères autorisés (un littéral ou une zone).
- Facteur 2 (33-42)
- La zone contrôlée, éventuellement suivie de
:début. - Zone résultat (43-48)
- Zone numérique sans décimale : position du dernier caractère invalide, 0 si tout est valide.
- Indicateurs (58-59)
- Facultatif : s'allume quand un caractère invalide est trouvé.
- Effet
- La zone résultat contient la position du caractère invalide le plus à droite, 0 si tous sont valides. L'indicateur 58-59 est allumé si un caractère invalide existe.
À quoi ça sert
L'usage courant de CHEKR est de calculer la longueur utile d'une zone : avec le blanc comme liste, la position renvoyée est celle du dernier caractère non blanc, donc la longueur du texte sans ses blancs de fin. On s'en sert ensuite avec SUBST, SCAN ou CAT.
Exemple 1 : CHECK ou CHEKR sur une saisie
H* CHEKR : dernier caractere invalide (lecture de droite a gauche)
C MOVEL'01234' CHIF 10
C MOVE '56789' CHIF
C MOVEL'12A4B' SAISIE 5
C CHIF CHECKSAISIE PREM 10 58
C PREM DSPLY
C CHIF CHEKRSAISIE DERN 10 58
C DERN DSPLY
C *IN58 DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
3
5
1
Dans « 12A4B », avec la liste des chiffres, CHECK renvoie 3 (premier caractère invalide) et CHEKR renvoie 5 (dernier). L'indicateur 58 est allumé.
Exemple 2 : Longueur utile du nom d'un client
H* CHEKR : longueur utile du nom d'un client (blancs de fin ignores)
FCLIENT3 IF E K DISK
C MOVEL' ' BLANC 1
C Z-ADD200 NUMERO 50
C NUMERO CHAINCLIENT3 99
C BLANC CHEKRNOM LONG 20 58
C LONG DSPLY
C LONG SUBSTNOM:1 COURT 14
C COURT DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
14
Martin et fils
Le client 200 est lu dans CLIENT3. NOM fait 30 caractères mais « Martin et fils » n'en occupe que 14 : CHEKR avec un blanc comme liste renvoie 14, qui sert de longueur à SUBST pour obtenir le nom sans ses blancs de fin.
Le piège
La position renvoyée est celle du dernier caractère invalide, pas du premier. Avec « 12A4B », CHECK dit 3 et CHEKR dit 5 (premier exemple) : pour signaler la première erreur à l'utilisateur, prenez CHECK.
En RPG ILE full free
En RPG ILE, %CHECKR fait la même chose. Pour la longueur utile d'une zone, on utilise plutôt %LEN(%TRIMR(...)).
long = %checkr(' ':nom);
long = %len(%trimr(nom));