Next Previous Contents

2. Les variables

2.1 Déclaration des variables

En COBOL les variables sont déclarées dans la data division. Selon leur fonction, elles sont déclarées dans la file section ou la working-storage section.

Une déclaration de variable comporte plusieurs volets, dont :

Groupes

Un groupe est une variable composée de plusieurs champs (variables subordonnées) qui sont déclarées avec des numéros de niveaux plus grands. Exemple :

01 PERSONNE.
  02 NOM     pic X(30).
  02 PRENOM  pic X(30).
  02 DATE-NAISSANCE.
    03 JOUR  pic 99.
    03 MOIS  pic 99.
    03 ANNEE pic 9999.
  02 ADRESSE pic X(30).

Variables isolées

Pour les variables isolées, on peut utiliser le numéro spécial 77 au lieu de 01.

77 TOTAL-JOUR  pic 9(6)V99.

Filler

Filler est un nom spécial pour désigner les variables ``de remplissage''.

01 LIGNE-IMPRESSION.
  02 filler    pic XX     value "* ".
  02 NOM       pic X(20).
  02 filler    pic XXX    value " * ".
  02 MOYENNE   pic Z9.99.
  02 filler    pic XX     value " *".

Depuis Cobol 85, on peut simplement omettre le nom des champs de remplissage :

01 LIGNE-IMPRESSION.
  02           pic XX     value "* ".
  02 NOM       pic X(20).
  02           pic XXX    value " * ".
  02 MOYENNE   pic Z9.99.
  02           pic XX     value " *".

Tableaux

On déclare un tableau par la clause occurs:

01 MOYENNE-GENERALE  pic 99v99   occurs 25.
01 TAB-NOTES occurs 25.
   02 NOTE-MATHS     pic 99v99.
   02 NOTE-FRANCAIS  pic 99v99.

Les indices partent de 1. On désigne chaque élement en faisant figurer l'indice entre parenthèses : MOYENNE-GENERALE(K), NOTE-MATHS of TAB-NOTES(NUMERO-ELEVE) ou plus simplement NOTE-MATH(NUMERO-ELEVE).

Redéfinitions de zone

Une variable peut en redéfinir une autre. Ceci revient à proposer plusieurs découpages d'une même zone. Exemple :

01 LIGNE pic X(80).
01 LIGNE-1 redefines LIGNE.
  02 ALPHA pic x(10).
  02 BETA  pic x(70).
01 LIGNE-2 redefines LIGNE.
  02 BETA  pic X(20).
  02 GAMMA pic X(60).

Les redéfinitions d'une même zone doivent être de la même longueur. Certains compilateurs refusent de redéfinir un elément qui a la clause occurs, comme dans :

01 JOURS pic X(2) occurs 7.
01 JOURS-INIT redefines JOURS pic X(14) value "LuMaMeJeVeSaDi".

On peut facilement contourner cette restriction, par exemple ainsi :

01 T-JOURS.
  02 JOURS pic X(2) occurs 7.
01 JOURS-INIT redefines T-JOURS pic X(14) value "LuMaMeJeVeSaDi".

2.2 Variables numériques et alphanumériques

Alphanumériques

Variables numériques

Variables de calcul

Sont déclarées avec une clause usage [comp|binary|packed decimal], selon le type choisi pour la représentation interne. La taille occupée par les variables dépend des implémentations.

2.3 Variables éditées

Destinées à être lues par l'utilisateur. On ne peut pas faire de calcul avec, mais elles peuvent apparaître comme résultat d'un move, d'un add, d'un compute etc. Exemples:

pic  9999.99          
pic  ZZ79.99
pic  ***9.99
pic +ZZZ9.99
pic -ZZZ9.99
pic 99/99/9999

Il existe des variables alpha-numériques éditées:

77   TRUC pic  xx/bxx0.

2.4 Conditions

Ce ne sont pas des variables, mais des conditions associées à des variables.

...
   05 MOYENNE-GENERALE pic 99v99.
     88 RECU value 10 THRU 20.
     88 COLLE value 0 thru 9.99.
...
   01 REPONSE pic X.
     88 OUI value "O", "o".
     88 NON value "N", "n".

On pourra alors écrire accept REPONSE; if OUI then .... au lieu de accept REPONSE; if REPONSE = "O" or "o" then ....


Next Previous Contents