Aller au contenu

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;