Code opération RPG III / RPG/400 · IBM i (AS/400) · Tableaux, structures et bits
TESTZ
Tester la zone du premier caractère
Examine la partie zone du premier caractère d'une zone alphanumérique et allume l'indicateur plus, moins ou autre.
Syntaxe
C TESTZ zone PLMIAU
- Zone résultat (43-48)
- La zone alphanumérique dont on examine le premier caractère (celui de gauche). Facteur 1 et facteur 2 restent vides.
- Indicateurs (54-55)
- Premier caractère de zone « plus » : les lettres A et B, le caractère &, et leurs semblables (A à I).
- Indicateurs (56-57)
- Premier caractère de zone « moins » : les lettres J et K, le caractère -, et leurs semblables (J à R).
- Indicateurs (58-59)
- Tout autre premier caractère (chiffre, blanc…).
- Effet
- Un seul des trois indicateurs s'allume. La zone n'est pas modifiée.
À quoi ça sert
Dans un nombre zoné, le signe se cache dans la partie zone du dernier chiffre. TESTZ lit la partie zone du premier caractère d'une zone alphanumérique : on l'emploie pour reconnaître un champ dont le premier octet porte une marque « plus » ou « moins » dans des données reçues d'un autre système.
Exemple 1 : Premier caractère : lettre, signe, chiffre, blanc
H* TESTZ : zone du premier caractere d'une zone (lettre, signe, chiffre)
E SAIS 1 6 3
C* 71 = zone de A-I ou &, 72 = zone de J-R ou -, 73 = autre
C DO 6 I 30
C MOVE SAIS,I SAI 3
C SETOF 717273
C TESTZ SAI 717273
C MOVEL'?' LIB 3 P
C *IN71 IFEQ '1'
C MOVEL'71' LIB P
C END
C *IN72 IFEQ '1'
C MOVEL'72' LIB P
C END
C *IN73 IFEQ '1'
C MOVEL'73' LIB P
C END
C SAI CAT LIB:1 RES 8 P
C RES DSPLY
C END
C SETON LR
**
A12
J12
&12
-12
123
12
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
A12 71
J12 72
&12 71
-12 72
123 73
12 73
A12 et &12 allument l'indicateur 71 ; J12 et -12 l'indicateur 72 ; 123 et la zone commençant par un blanc l'indicateur 73.
Exemple 2 : Seul le premier caractère compte
H* TESTZ : seul le premier caractere compte
E SAIS 1 3 3
C* 71 = zone de A-I ou &, 72 = zone de J-R ou -, 73 = autre
C DO 3 I 30
C MOVE SAIS,I SAI 3
C SETOF 717273
C TESTZ SAI 717273
C MOVEL'?' LIB 3 P
C *IN71 IFEQ '1'
C MOVEL'71' LIB P
C END
C *IN72 IFEQ '1'
C MOVEL'72' LIB P
C END
C *IN73 IFEQ '1'
C MOVEL'73' LIB P
C END
C SAI CAT LIB:1 RES 8 P
C RES DSPLY
C END
C SETON LR
**
12J
J12
1J2
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
12J 73
J12 72
1J2 73
12J et 1J2 contiennent un J, mais pas en tête : l'indicateur 73 s'allume. Seule J12 allume l'indicateur 72.
Le piège
Seul le premier caractère est examiné : 12J n'allume pas l'indicateur « moins » (deuxième exemple), et la longueur de la zone ne change rien. Pour examiner le dernier caractère, copiez-le d'abord dans une zone d'un caractère (MOVE).
En RPG ILE full free
Il n'y a pas d'équivalent direct en RPG ILE full free. On teste le premier caractère par comparaison.
if %subst(zone : 1 : 1) >= 'J' and %subst(zone : 1 : 1) <= 'R';
dsply 'moins';
endif;