Pour déclarer tout type de donnée, on doit d'abord préciser
le niveau auquel elle se situe.Le numéro 77 sert donc à déclarer
une variable. Ce chiffre est suivi du nom de la variable puis du mot PICTURE
(ou PIC). Ensuite on précise le type de variable:
Numérique=> 9
Alphanumérique=> X.
exemples:
* 77 var PIC X.
Déclaration d'une donnée appelée "var"
de type alphanumérique et de taille 1.
* 77 var PIC XXXXX. ou 77 var PIC X(5).
Cette déclaration est la même que ci-dessus avec une donnée
de taille 5.
* 77 var PIC X(5) VALUE "Nom: ".
Déclaration d'une donnée appelée "var"
de type alphanumérique et de taille 5.
On a initialisé cette donnée à "Nom: ".
* 77 var PIC X(2) VALUE SPACES.
Déclaration d'une donnée appelée "var"
de type alphanumérique et de taille 2.
On a initialisé cette donnée avec des espaces.
Le mot SPACES est prédéfini en Cobol.
* 77 entier PIC 9.
Déclaration d'une donnée appelée "entier"
de type numérique et de taille 1.
* 77 entier PIC 99999. ou 77 entier PIC 9(5).
Cette déclaration est la même que ci-dessus avec une donnée
de taille 5.
* 77 decimal PIC 9999V99. ou 77 decimal PIC 9(4)V9(2).
Ceci permet de déclarer un nombre à virgule. On aura
donc 4 chiffres avant la virgule et 2 après.
* 77 signé PIC S99 VALUE 5.
Déclaration d'une donnée appelée "signé"
de type numérique. Le "S" permet d'affecter un signe (positif
ou négatif). La taille de cette donnée est de 2 et sa valeur
est 5.On peut aussi l'initialiser à zero en écrivant:
VALUE 0.
ou VALUE ZERO.
Le nom "ZERO" peut être utilisé
car il est prédéfini en Cobol.
Il est impossible de faire une affectation du genre: VALUE ONE.
Ce type de déclarations permet notamment de faires des vecteurs
à une ou plusieurs dimensions.
Vecteur à une dimension
01 vecteur.
02 vecteur2 occurs 10 pic
99.
Ceci est une structure s'appelant vecteur et contenant un tableau à
une dimension s'appellant vecteur2 et composé de dix éléments.
Pour affecter des valeurs dans ce tableau on précise l'endroit dans
le vecteur:
->MOVE 50 to vecteur2(1). Ceci affecte la valeur 50 au premier élément du vecteur. En cobol le vecteur de dix éléments à un indice qui va de 1 à 10 à la différence du C++ dont l'indice va de 0 à 9.
Vecteur à plusieurs dimensions
01 vect.
02 vect2 occurs 10.
03
vect3 occurs 20 pic 999.
Ceci est une structure s'appelant vect composé d'un vecteur à
deux dimensions.
-> MOVE 249 to (1,5).
On a donc placé la valeur 249 à la ligne 1 et à
la colonne 5.
Autre type de structure
01 cart-id.
02 num-insee pic 9(13).
02 nom pic x(32).
02 adresse.
03
cp pic x(5).
03
rue pic x(64).
03
ville pic x(32).
Ceci est une structure permettant de donner l'identité d'une personne
avec pour la carte d'identité un numéro INSEE, un nom et
une adresse elle-même composé d'un code postal, d'une ville
et d'une rue.
Pour déclarer un fichier il y a plusieurs étapes:
-Dans la zone ENVIRONMENT DIVISION, on déclare la manière
dont on accède aux fichiers. C'est à dire en entrée,
en sortie ou les deux.
-On definit le contrôle des fichiers.
-On donne les différents fichiers et leur mode d'oganization (séquentiel
ou indéxé).
-Dans la zone DATA DIVISION, on déclare une section fichier.
-On déclare les différents fichiers.
-Dans la zone PROCEDURE DIVISION, on ouvre les différents fichiers
en lecture, écriture ou les deux.
-A la fin du programme ou de l'utilisation de ces fichiers, on les fermes.
Exemple:
...
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FPERSONNE ASSIGN TO DATABASE-PERSONNEL
ORGANIZATION SEQUENTIAL.
...
DATA DIVISION.
FILE SECTION.
FD FPERSONNE LABEL RECORD STANDARD.
01 EPERSONNE.
COPY DDS-ALL-FORMATS OF PERSONNEL.
...
PROCEDURE DIVISION.
OPEN I-O FPERSONNE.
...
CLOSE FPERSONNE.
Supposons qu'une entreprise possède plusieurs employés sauvegardé
dans un fichier PERSONNEL. Dans le programme cobol la fonction SELECT renomme
le fichier PERSONNEL en FPERSONNE. Celui-ci est organisé séquentiellement.
Le nom PERSONNEL est donc le nom externe du fichier, tandis que FPERSONNE
est le nom interne au programme.
FILE-SECTION est une zone à l'intérieur de laquelle on définit
les fichiers. 01 EPERSONNE... correspond à la copie de tous les
formats se trouvant dans le fichier. Cette notation de FPERSONNE et EPERSONNE
sera développé dans le chapitre V:Utilisation
des fichiers séquentiels.
Cette déclaration s'effectue de la même manière
que pour un fichier. Il y a donc plusieurs étapes similaires.
Exemple:
...
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FGRILLE nom-grille du programme ASSIGN
TO WORKSTATION-nom-membre des grilles.
...
FILE SECTION.
FD FGRILLE LABEL RECORD OMITTED.
01 EGRILLE.
COPY DDS-AL-FORMATS OF nom du membre où se
trouve les grilles.
...
PROCEDURE DIVISION.
OPEN I-O FGRILLE.
...
CLOSE FGRILLE.
Cf chapitre IV:Utilisation des grilles d'écran.
Exemple:
...
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FIMPR ASSIGN TO PRINTER-QSYSPRT
ORGANIZATION SEQUENTIAL.
...
FILE SECTION.
FD FIMPR LABEL RECORD OMITTED.
01 EIMPR PIC X(80).
...
PROCEDURE DIVISION.
OPEN OUTPUT FIMPR.
...
CLOSE FIMPR.
Un fichier d'impression est forcément organisé en séquentiel
pour la simple et bonne raison qu'une imprimante commence en haut de la
feuille et fini en bas (c'est logique).
EIMPR contient quand à lui le nombre maximum de caractère
se trouvant sur une ligne à imprimer.
Cf chapitre VII: D'autres programmes séquentiels.
Cette déclaration ce fait dans la WORKING-STORAGE SECTION. On donne
d'abord la déclaration des touches de fonctions, puis on les déclare
comme pour des entiers avec le préfixe 88 au lieu de 77.(Cf chapitre
IV:Utilisation des grilles d'écran.)
Exemple:
...
WORKING-STORAGE SECTION.
01 FTOUCHES PIC XX.
88 F3 VALUE "03".
La chaîne de caractères d'une telle donée est limitée
à certaines combinaisons des 14 symboles suivants:
B / V Z 0 9 , . + - * CR DB $
Une picture d'édition permet d'éviter de trainer des zéro
inutiles dans les calculs juste avant d'imprimer.
Le symbole 9 correspond aux caractères
numériques.
Le symbole Z retire les zéro inutiles.
Le symbole $ retire les zéro non significatifs
sauf le dernier zéro remplacer par $.
Le symbole - retire les zéro non significatifs
sauf le dernier zéro remplacer par -.
Le symbole + retire les zéro non significatifs
sauf le dernier zéro remplacer par +.
Le symbole * remplace les zéro non
significatifs par *.
Le symbole B permet l'insertion d'un blanc
ou espace.
Le symbole 0 permet l'insertion d'un zéro.
Le symbole / permet l'insertion d'un slash.
Le symbole V correspond à la virgule
dans la zone émettrice.
Le symbole . correspond à la virgule
dans la zone réceptrice.
Le symbole , représente la position
où une virgule sera insérée.
EXEMPLES:
Etant donné la picture de l'élément émetteur
et son contenu, et la picture de l'élément récepteur,
voici le contenu de l'élément récepteur après
affectation:
(b= 1 blanc ou 1 espace)
Picture de la zone émettrice | Contenu de cette zone | Picture de la zone réceptrice | à l'impression |
99999 | 12345 | ZZZ99 | 12345 |
99999 | 00001 | ZZZ99 | bbb01 |
99999 | 00123 | $$999 | b$123 |
99999 | 00123 | $9999 | $0123 |
S9999 | -0123 | -9999 | b-0123 |
S9999 | +0012 | +9999 | b+0012 |
S99999 | -00123 | ++++99 | bb-123 |
S99999 | +00001 | +++999 | bb+001 |
S99999 | +01234 | ---999 | bb1234 |
99999 | 00000 | ----- | bbbbb |
99999 | 12345 | **999 | 12345 |
99999 | 00001 | **999 | **001 |
999999 | 123456 | $ZZZ,ZZZ.99 | $123,456.00 |
9(4)V99 | 123456 | $ZZZ,ZZZ.99 | $bb1,234.56 |
S9(6) | -000123 | -(6)9 | bb1bbb234 |
9(6) | 000012 | Z(6)00 | bbbb1200 |
9(4)V99 | 000123 | $$$$,$$$.99 | bbbb,b$1.23 |
9(6) | 123456 | 99B99B99 | 12b34b56 |
9(4)V99 | 00078 | $$,$$9.99 | bb,b$0.78 |
Dans un programme:
...
WORKING-STORAGE SECTION.
02 Z1 PIC 9(5).
02 Z2 PIC ZZZ99.
...
PROCEDURE DIVISION.
...
MOVE Z1 TO Z2.
WRITE (IMPRIMANTE).
...