Code opération RPG III / RPG/400 · IBM i (AS/400) · Transferts de données
CLEAR
Remettre à blanc ou à zéro
Remet à blanc les zones alphanumériques et à zéro les zones numériques d'une zone, d'une structure de données ou d'un format d'enregistrement.
Syntaxe
C CLEARzone
C CLEARstructure
C CLEARformat
- Facteur 1 (18-27)
- Non utilisé : on le laisse à blanc.
- Facteur 2 (33-42)
- Ce qu'on remet à zéro : une zone, une structure de données ou un format d'enregistrement. C'est ici et non en zone résultat.
- Zone résultat (43-48)
- À laisser à blanc.
- Effet
- Aucun indicateur n'est positionné. Une zone alphanumérique est remplie de blancs, une zone numérique est mise à zéro, quelle que soit sa valeur précédente. Sur une structure de données, toutes ses sous-zones sont remises à blanc ou à zéro. Sur un format d'enregistrement, ce sont ses zones de sortie.
À quoi ça sert
CLEAR prépare un nouvel enregistrement ou un nouvel écran : on vide les zones avant de les remplir, sans écrire une ligne par zone. Une seule instruction remplace la série de MOVE *BLANKS et Z-ADD 0 des anciens programmes.
Le format CLEAR est pratique avant un WRITE : aucune zone ne garde la valeur du client précédent.
Exemple 1 : Vider un montant et un nom
H* CLEAR : remet a blanc ou a zero, quelle que soit la valeur
C Z-ADD1250 MONT 72
C MOVEL'Dupont' NOM 10
C MONT DSPLY
C NOM DSPLY
C CLEARMONT
C CLEARNOM
C MONT DSPLY
C NOM IFEQ *BLANKS
C 'NOM vide'DSPLY
C END
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
125000
Dupont
0
NOM vide
Le montant 1250,00 et le nom Dupont sont affichés, puis remis à vide par CLEAR. Le montant vaut 0 (affiché sans virgule) et le test NOM IFEQ *BLANKS réussit.
Exemple 2 : Structure de données, format d'un fichier en lecture
H* CLEAR : une structure de donnees et un format d'enregistrement
FCLIENT3 IF E K DISK
IADR DS
I 1 8 RUE
I 9 13 CP
C MOVEL'Rue Foch'RUE
C MOVEL'34000' CP
C MOVELADR AFF 13
C AFF DSPLY
C CLEARADR
C RUE IFEQ *BLANKS
C 'ADR vide'DSPLY
C END
C Z-ADD400 NUMERO 50
C NUMERO CHAINCLIENT3 99
C NOM DSPLY
C SOLDE DSPLY
C CLEARCLI3R
C NOM DSPLY
C SOLDE DSPLY
C SETON LR
Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :
Rue Foch34000
ADR vide
Bernard Transports
9800000
Bernard Transports
9800000
La structure ADR contient la rue et le code postal (Rue Foch34000). Après CLEAR ADR, la rue est vide. En revanche CLEAR CLI3R sur le format d'un fichier ouvert en entrée seule ne change rien : NOM et SOLDE sont les mêmes avant et après (le compilateur le signale par le message d'information 7114).
Le piège
L'opérande va en facteur 2. Écrit en zone résultat (colonnes 43-48), il est refusé : QRG5023, « Facteur 2 laissé à blanc pour l'opération définie », et QRG5032, « La zone Résultat n'est pas à blanc pour l'opération définie ».
CLEAR d'un format en entrée seule ne fait rien : il n'agit que sur les zones de sortie. Le listing donne le message de gravité 00 « Aucune zone en sortie pour l'opération CLEAR ou RESET demandée sur ce format d'enregistrement » et la compilation réussit, d'où un oubli facile à manquer (deuxième exemple : NOM garde son contenu).
En RPG ILE full free
L'instruction CLEAR existe à l'identique en RPG ILE. Pour une zone isolée on peut aussi affecter directement la valeur voulue.
clear montant;
clear nom;
clear adr;
nom = *blanks;
montant = 0;