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 :
01
à 49
pour les groupes et leurs éléments),
77
pour les variables isolées, 88
pour les conditions,...picture
indiquant la représentation externe de la variableusage
indiquant si il s'agit d'une variable de calcul
ou d'édition
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).
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
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 " *".
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)
.
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".
pic X(30)
pic 9(6)
.pic s9(6) sign leading, separate
.
(occupe 7 caractères).pic 9(6)v99
. Le v
indique la position
virtuelle du point décimal. (Occupe 8 caractères).pic s9(6)v99 sign leading, separate
.
(9 caractères).
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.
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
v
, le point ``.'' est réel.Z
'' : le zéro non significatif est remplacé par un blanc.+
'' : le signe apparaît. -
'' : signe moins si négatif, espace si positif.,
'' ``/
'' ``0
'' s'insèrent dans la chaîne.
La lettre ``b
'' insère un espace.Il existe des variables alpha-numériques éditées:
77 TRUC pic xx/bxx0.
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 ....