1. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Sommaire
LA STRUCTURE D’UN PROGRAMME..........................................................................5
QUELLE EST L’HISTOIRE DU COBOL ?...............................................................................5
QUELLE EST LA STRUCTURE D'UN PROGRAMME ?....................................................................5
IDENTIFICATION DIVISION...................................................................................5
ENVIRONMENT DIVISION......................................................................................5
DATA DIVISION...................................................................................................6
LES COMMANDES.....................................................................................................9
ACCEPT..................................................................................................................9
Définition............................................................................................................9
Syntaxe 1...........................................................................................................9
Description 1.......................................................................................................9
Syntaxe 1...........................................................................................................9
Description 1.......................................................................................................9
Equivallence Pascal..............................................................................................9
ADD.......................................................................................................................9
Définition............................................................................................................9
Syntaxe..............................................................................................................9
Equivalence Pascal...............................................................................................9
CLOSE..................................................................................................................10
Définition..........................................................................................................10
Syntaxe............................................................................................................10
COMPUTE.............................................................................................................10
Définition..........................................................................................................10
DISPLAY...............................................................................................................10
Définition..........................................................................................................10
Syntaxe 1..........................................................................................................10
Syntaxe 2..........................................................................................................11
Description 1.....................................................................................................11
Description 2.....................................................................................................11
DIVIDE.................................................................................................................11
Définition..........................................................................................................11
Syntaxe............................................................................................................11
EXIT.....................................................................................................................11
Définition..........................................................................................................11
Syntaxe............................................................................................................11
IF........................................................................................................................11
Définition..........................................................................................................11
Syntaxe............................................................................................................11
MULTIPLY.............................................................................................................12
Définition..........................................................................................................12
Syntaxe............................................................................................................12
OPEN...................................................................................................................12
Définition..........................................................................................................12
Syntaxe............................................................................................................12
PERFORM..............................................................................................................12
Définition..........................................................................................................12
Syntaxe............................................................................................................13
Equivalence Pascal.............................................................................................13
1
2. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
READ...................................................................................................................13
Définition..........................................................................................................13
Syntaxe............................................................................................................13
SUBSTRACT..........................................................................................................13
Définition..........................................................................................................13
Syntaxe............................................................................................................13
Equivalence Pascal.............................................................................................14
WRITE..................................................................................................................14
Définition..........................................................................................................14
Syntaxe............................................................................................................14
>.........................................................................................................................14
Définition..........................................................................................................14
Syntaxe 1..........................................................................................................14
<.........................................................................................................................15
Définition..........................................................................................................15
Syntaxe............................................................................................................15
=.........................................................................................................................15
Définition..........................................................................................................15
Syntaxe............................................................................................................15
>=.......................................................................................................................15
Définition..........................................................................................................15
Syntaxe............................................................................................................15
<=.......................................................................................................................15
Définition..........................................................................................................15
Syntaxe............................................................................................................15
IS........................................................................................................................16
Définition..........................................................................................................16
Syntaxe............................................................................................................16
LA PROGRAMMATION STRUCTURÉE......................................................................17
QU’EST-CE QU’UN PROGRAMME ?....................................................................................17
QUELS SONT LES TYPES DE STRUCTURE EN ARBRE ?.............................................................17
Qu’est-ce qu’un arbre ?.......................................................................................17
QUEL EST LE SCHÉMA DE CHARGEMENT DE TABLE ?..............................................................18
QUEL EST LE SCHÉMA DE RECHERCHE ?............................................................................18
DE PASCAL À COBOL..............................................................................................21
STRUCTURE GÉNÉRALE DU PROGRAMME.............................................................................21
WORKING-STORAGE SECTION................................................................................21
Scalaires non numériques...................................................................................21
Enregistrements.................................................................................................21
Zone groupée....................................................................................................22
Identification d'un champ....................................................................................22
Types................................................................................................................22
Tableaux...........................................................................................................22
Affectation.........................................................................................................23
Entrées sorties...................................................................................................23
Until.................................................................................................................23
Fichier séquentiel...............................................................................................24
IDENTIFICATION DIVISION.................................................................................24
ENVIRONMENT DIVISION....................................................................................24
DATA DIVISION.................................................................................................25
PROCEDURE DIVISION........................................................................................25
Règles d'écriture................................................................................................25
Déclaration de fichier [SELECT]...........................................................................25
Déclaration d'enregistrement [FD].......................................................................26
Description d'enregistrement...............................................................................27
2
3. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Ouverture [OPEN]..............................................................................................27
Fermeture [CLOSE]............................................................................................27
Lecture [READ]..................................................................................................27
ECRITURE [WRITE]................................................................................................28
FICHIER IMPRIMANTE..........................................................................................29
FICHIER LECTEUR DE CARTE..................................................................................29
FICHIER IMPRIMANTE............................................................................................29
ECRITURE [WRITE]................................................................................................29
ECRITURE V 2 [WRITE]..........................................................................................29
CARACTERE DE SAUT.........................................................................................30
FICHIER VSAM/ESDS............................................................................................30
DECLARATION DE FICHIER [SELECT].......................................................................30
OUVERTURE DE FICHIER [OPEN].............................................................................31
option...............................................................................................................31
FIN DE FICHIER.....................................................................................................31
RE-ECRITURE DE FICHIER [REWRITE].....................................................................31
FICHIER VSAM/KSDS............................................................................................31
DECLARATION DE FICHIER [SELECT].......................................................................31
OUVERTURE DE FICHIER [OPEN].............................................................................32
POSITIONNEMENT DANS UN FICHIER [START].........................................................33
LECTURE D'UN FICHIER [READ]..............................................................................34
ECRITURE DANS UN FICHIER [WRITE].....................................................................34
dépassement de capacité du fichier......................................................................35
RE-ECRITURE DANS UN FICHIER [REWRITE]............................................................35
SUPPRIMER UN ENREGISTREMENT [DELETE]............................................................35
OUVERTURE POSSIBLE...........................................................................................36
FICHIER VSAM.......................................................................................................36
CODE RETOUR......................................................................................................36
E/S........................................................................................................................38
ARRET DE PROGRAMME [STOP]...............................................................................38
LECTURE INFORMATION [ACCEPT]..........................................................................38
ENVOI DE MESSAGE [DISPLAY]..............................................................................38
DONNEE ................................................................................................................39
DEFINITION..........................................................................................................39
numéro-niveau..................................................................................................39
nom-donnée......................................................................................................39
image...............................................................................................................39
image alphanumérique.......................................................................................40
image numérique...............................................................................................40
image numérique - EBCDIC.................................................................................40
image numérique d'édition..................................................................................41
image alphabétique............................................................................................42
valeur initiale (optionnel)....................................................................................42
Représentation des données : USAGE...................................................................43
Valeur binaire : COMPUTATIONAL........................................................................43
WORKING STORAGE SECTION...............................................................................44
PRESENTATION.....................................................................................................44
ZONE...................................................................................................................44
ELEMENTAIRE....................................................................................................44
GROUPEE..............................................................................................................45
3
4. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
INDEPENDANTE.................................................................................................45
NOMBRE-NIVEAU...............................................................................................45
Alignement mémoire..........................................................................................45
Redéfinition des zones........................................................................................46
Noms de condition..............................................................................................47
Expression RENAMES..........................................................................................47
PROCEDURE DIVISION..........................................................................................48
INTRODUCTION.....................................................................................................48
4
5. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
La structure d’un programme
Quelle est l’histoire du COBOL ?
L’histoire du COBOL (COmmon Business Oriented Language) est résumée
dans le tableau suivant.
Année Evénement
1954 Premier langage évolué : FORTRAN
1960 CODASYL (Conférence On DAta SYstem Language fournit une ébauche de description)
=> COBOL 60, COBOL 61
1968 COBOL 65 reconnu comme standard
1974 Norme ANS (American National Standard)
CODASYL ajoute des perfectionnements au standard
Quelle est la structure d'un programme ?
IDENTIFICATION DIVISION.
Nom du programme. PROGRAM-ID. nom-programme.
Auteur [AUTHOR. commentaire]
Installation. [INSTALLATION. commentaire]
Date d'écriture du programme. [DATE-WRITTEN. commentaire]
Date de compilation du [DATE-COMPILED. commentaire]
programme.
Sécurité. [SECURITY. commentaire]
Remarques diverses. [REMARKS. commentaire]
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
Nom de l'ordinateur sur lequel le [SOURCE-COMPUTER. nom [WITH DEBUGGING
source a été écrit.
MODEM].]
Nom de l'ordinateur sur lequel [OBJECT-COMPUTER. nom-ordinateur
l'objet a été créé.
La taille mémoire est de "entier" [MEMORY SIZE entier type]
unités "type" (WORDS,
CHARACTERS, MODULES).
[PROGRAM COLLATING SEQUENCE IS nom-
alphabet].]
5
6. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
INPUT-OUTPUT SECTION.
FILE-CONTROL.
Associe le fichier physique au SELECT [OPTIONNAL] fichier-physique ASSIGN
fichier logique [classique, ou
SYSIN (organe d'entrée) ou TO
SYSOUT (organe de sortie)].
fichier-logique
Type d'organisation [RESERVE entier AREA]
(SEQUENTIAL, INDEXED,
RELATIVE) séquentiel par défaut.
Type d'accès (SEQUENTIAL, [ORGANIZATION type-organisation]
INDEXED, RELATIVE) séquentiel
par défaut.
[ACCESS MODE IS type-organisation]
[RECORD KEY nom-donnee-1]
[ALTERNATE RECORD KEY nom-donnee-2 [WITH DUPLICATES]]
DATA DIVISION.
FILE SECTION.
Le format des données est type- FD fichier-physique [EXTERNAL] [GLOBAL]
format (F format fixe, V format
varaible, U format indéfini). [RECORDING MODE IS type-format]
Spécifie la taille d'un bloc, les [BLOCK CONTAINS [entier1 TO] entier2 type-
limites inférieure et supérieure de
la page étant entier1 et entier2 bloc]
unités de type-bloc (RECORDS,
CHARACTERS).
Spécifie le nombre de caractères [RECORD CONTAINS entier3 [TO entier4]]
d'un enregistrement (simple
commentaire).
[RECORD VARYING [FROM entier5]]
[RECORD [To entier6] CHARACTERS]
[DEPENDING ON nom-donnée]
Permet d'ajouter (STANDARD) ou [LABEL RECORD type-label]
de ne pas ajouter (OMITTED)
selon "type-label" les "labels"
définis le Sytème de Gestion de
Fichier (SGF).
[VALUE OF FILE-ID nom-système]
Liste des enregistrements (en [DATA RECORD nom-enreg1 [nom-enreg2] ...]
guise de commentaire).
[LINAGE IS nom1 [FOOTING nom2]
[LINES TOP nom3]
[LINES BOTTOM nom4]]
[CODE-SET nom-alphabet]
[REPORT nom-état]
01 nom-enreg1.
...
6
7. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
WORKING-STORAGE SECTION.
77 nom-element PIC description [VALUE valeur].
Il faut "littéral1" <= "littéral2". 88 nom-condition VALUE ARE littéral1
[THRU littéral2]
"nom-donnée1" est le nom de la 01 à 49 nom-donnée1 [EXTERNAL] [GLOBAL]
donnée ou FILLER (permet de
définir une variable à laquelle on
n'a pas accès).
Redéfinit "nom2" avec la [REDEFINES nom-donnée2]
structure de "nom1".
[PIC description]
; Note : PIC peut être remplacé par PICTURE.
DECLARATIVES.
nom-section SECTION.
7
8. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Les commandes
ACCEPT
Définition
Lecture au clavier
Syntaxe 1
ACCEPT nom-donnée
Description 1
Lit une donnée au clavier et la met dans "nom-donnée".
Syntaxe 1
ACCEPT nom-donnée FROM nom-mnémonique
Description 1
"nom-mnémonique" est défini dans SPECIAL-NAMES ou vaut CONSOLE
(clavier), DATE (6 octets), DAY (5 octets), DAY-OF-WEEK, ou TIME (8
octets).
Equivallence Pascal
ACCEPT Zone <=> ReadLn (Zone);
ADD
Définition
Addition
Syntaxe
Affectation de "nom-donnée2 ..." ADD nom-donnée1 ... TO nom-donnée2
à "nom-donnée1 ...",
éventuellement avec arrondi.
[ROUNDED] ...
Exécute "ordre1" en cas de [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique la fin de l'ordre ADD. [END-ADD]
Equivalence Pascal
9
9. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
ADD a b TO c d.
<=> c := c + a + b;
d := d + a + b;
ADD a b GIVING c;
<=> c := a + b;
CLOSE
Définition
Fermeture de fichier.
Ferme le fichier "nom-fichier".
Syntaxe
CLOSE nom-fichier [type1 [FOR REMOVAL]]
CLOSE nom-fichier [WITH type2]
COMPUTE
Définition
Calcul
Effectue des calculs.
COMPUTE nom-donnée1
[ROUNDED]
"nom-donnée1" reçoit la valeur = expression
de "expression".
Exécute "ordre1" en cas de [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique la fin de l'ordre [END-COMPUTE]
COMPUTE.
DISPLAY
Définition
Affichage à l'écran
Affiche des données à l'écran.
Syntaxe 1
10
10. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
DISPLAY nom-donnée1 ...
Syntaxe 2
DISPLAY nom-donnée1 ... UPON nom-mnémonique
Description 1
Affiche "nom-donnée1 ..." à l'écran.
Description 2
Idem mais dans un nom-mnémonique, sur l'écran (CONSOLE) ou sur le
perforateur de carte (SYSPUNCH).
DIVIDE
Définition
Division
Syntaxe
INTO peut être remplacé par BY. DIVIDE nom-donnée1 INTO nom-donnée2
"nom-donnée3" := "nom- [GIVING nom-donnée3 [ROUNDED] ... ]
donnée1" / "nom-donnée2"
Exécute "ordre1" en cas de [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique la fin de l'ordre [END-DIVIDIDE]
DIVIDIDE.
EXIT
Définition
Sortie
Ne fait rien (utilisé dans les paragraphes vides).
Syntaxe
EXIT
IF
Définition
Condition "Si"
Exécution "instruction1" à la condition "condition".
Syntaxe
11
11. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Si "condition1" est vrai, alors IF condition1 instruction1
"instruction1" est exécuté ou
"instruction1" peut être NEXT
SENTENCE (pointe sur
l'instruction suivante, juste après
le point).
Sinon, "instruction2" est exécuté. [ELSE instruction2]
Indique la fin de l'ordre. [END-IF]
MULTIPLY
Définition
Multiplication
Effectue une multiplication.
Syntaxe
"nom-donnée1" := "nom- MULTIPLY nom-donnée1 BY nom-donnée2
donnée1" * "nom-donnée2"
"nom-donnée3" := "nom- [GIVING nom-donnée3]
donnée1" * "nom-donnée2"
[ROUNDED]
Exécute "ordre1" en cas de [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique la fin de l'ordre [END-DIVIDE]
MULTIPLY.
OPEN
Définition
Ouverture de fichier
Ouverture du fichier "nom-fichier"
Syntaxe
en lecture OPEN INPUT nom-fichier [REVERSED]
OPEN INPUT nom-fichier [WITH NO REWIND]
en écriture OPEN OUTPUT nom-fichier [WITH NO REWIND]
OPEN I-O nom-fichier1 ...
OPEN EXTEND nom-fichier1 ...
PERFORM
Définition
12
12. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Traitement de paragraphe
Exécute une (ou des) procédure.
Syntaxe
THRU permet l'enchaînement de PERFORM [nom-procedure1 [THRU nom-
l'exécution de plusieurs
paragraphes avant de revenir à procedure2]]
l'instruction qui suit PERFORM.
Continue jusqu'à ce que UNTIL condition [TEST moment]
"condition" soit vrai, le test se
faisant au moment "moment"
(BEFORE, AFTER).
[ordre END-PERFORM]
Equivalence Pascal
PERFORM tâche
UNTIL condition
=> condition à gauche, instruction à droite
READ
Définition
Lecture de fichier
Lit un enregistrement du fichier "nom-fichier".
Syntaxe
INTO permet de transférer la READ nom-fichier [NEXT] RECORD [INTO nom-
valeur dans "nom-donnée".
donnée]
Exécute "ordre1" si arrivé en fin [AT END ordre1]
de fichier.
Exécute "ordre2" si pas arrivé en [NOT AT END ordre2]
fin de fichier.
Indique la fin de l'ordre "READ". [END-READ]
SUBSTRACT
Définition
Soustraction
Effectue une soustraction.
Syntaxe
"nom-donnée2" := "nom- SUBSTRACT nom-donnée1 ... FROM nom-
donnée2" - "nom-donnée1 ..."
donnée2
"nom-donnée3" := "nom- [GIVING nom-donnée3]
donnée1" - "nom-donnée2"
13
13. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
[ROUNDED]
Exécute "ordre1" en cas de [ON SIZE ERROR ordre1]
dépassement de capacité.
Exécute "ordre2" en cas de non [NOT SIZE ERROR ordre2]
dépassement de capacité.
Indique la fin de l'ordre [END-SUBSTRACT
SUBSTRACT.
Equivalence Pascal
SUBSTRACT a b FROM c GIVING d.
<=> d := c - a b;
WRITE
Définition
Ecriture d'enregistrement
Ecrit l'enregistrement "nom-enreg1".
Syntaxe
FROM permet d'écrire "nom- WRITE nom-enreg1 [FROM nom-donnée1]
donnée1" à la place de
l'enregistrement "nom-enreg1".
Fait sauter "nom-donnée2" lignes [moment ADVANCING nom-donnée2 LINE]
au moment "moment" (AFTER,
BEFORE).
[moment ADVANCING nom-mnémonique]
Fait sauter une page au moment [moment ADVANCING-PAGE]
"moment" (AFTER, BEFORE).
Exécute "ordre" si arrivé en fin [END-OF-PAGE ordre]
de page (concerne l'imprimante).
Exécute "ordre" si pas arrivé en [NOT END-OF-PAGE ordre]
fin de page (concerne
l'imprimante).
Note : END-OF-PAGE <=> EOP.
Indique la fin de l'ordre WRITE. [END-WRITE]
>
Définition
Opérateur >
Syntaxe 1
nom-donnée1 IS [NOT] GREATER nom-donnée2
[NOT] >
nom-donnée1 > nom-donnée2
14
14. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
<
Définition
Opérateur <
Syntaxe
nom-donnée1 IS [NOT] LESS nom-donnée2
[NOT] <
nom-donnée1 < nom-donnée2
=
Définition
Opérateur =
Syntaxe
nom-donnée1 IS [NOT] EQUAL nom-donnée2
[NOT] =
nom-donnée1 = nom-donnée2
>=
Définition
Opérateur >=
Syntaxe
nom-donnée1 IS [NOT] GREATER OR EQUAL nom-donnée2
[NOT] >=
nom-donnée1 >= nom-donnée2
<=
Définition
Opérateur <=
Syntaxe
nom-donnée1 IS [NOT] LESS OR EQUAL nom-donnée2
[NOT] <=
nom-donnée1 >= nom-donnée2
15
15. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
IS
Définition
Retourne le signe
Syntaxe
expression IS [NOT] signe
signe vaut (POSITIVE, NEGATIVE, ZERO).
16
16. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
La programmation structurée
Qu’est-ce qu’un programme ?
C'est un ensemble de traitements conditionnels ou non conditionnels
appliqués à des objets hiérarchisés.
Quels sont les types de structure en arbre ?
Qu’est-ce qu’un arbre ?
Le COBOL structuré utilise les arbres pragmatiques (ou programmatiques).
Un arbre est constitué de :
• la structure répétitive : s'applique aux objets
NOEUD
F FEUILLE D
OBJET
• la structure alternative : s'applique aux traitements
NOEUD
F FEUILLE FEUILLE D
OBJET OBJET
Qu’est-ce qu’un rond ?
Un rond représente un noeud donnant naissance à une structure de niveau
inférieur.
Qu’est-ce qu’un feuille ?
Une feuille est un noeud en bout d'arbre.
Elle peut toujours être transformée en noeuds.
=> extensibilité de l'arbre
Qu’est-ce qu’un carré ?
Le carré représente une feuille dépendant toujours d'un noeud.
Un noeud donne toujours naissance à au moins deux feuilles carrées.
Comment lire l’arbre ?
Le sens de lecture est de la droite vers la gauche (sens des flèches).
Qu’est-ce qu’une feuille « Début » ?
D Début (toujours à droite de l'arbre)
Qu’est-ce qu’une feuille « Fin » ?
F Fin (toujours à gauche de l'arbre)
Qu’est-ce qu’une feuille « Intermédiaire » ?
17
17. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
In Feuille intermédiaire s
Quel est le schéma de chargement de table ?
CHARGEMENT D'UNE TABLE
F ARRETER CLIENT D
PROGRAMME
En partant du NOEUD :
• exécuter D-NOEUD
• exécuter CLIENT
• exécuter I
• rien ou arrêter programme
• exécuter F-NOEUD
=> Passer d'une feuille carrée à une autre d'un même niveau, c'est-à-dire
issue du même noeud en passant par l'intermédiaire de feuilles rondes qui
sont choisies en fonction de conditions.
Quel est le schéma de recherche ?
18
18. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
RECHERCHE
RECHERCHE CLIENT
EDITER
F CLIENT CUMULER D => SEARCH (1)
NON MONTANT => SEARCH ALL (2)
TROUVE
***********
* WORKING *
***********
*
WORKING-STORAGE SECTION.
77 NB-POSTE COMP VALUE 0.
88 DEPASSEMENT-TABLE VALUE 121.
77 INDIC-TROUVE COMP VALUE 0.
88 CLIENT-TROUVE VALUE 1.
01 TABLE.
05 POSTE-TABLE OCCURS 120
DEPENDING ON NB-POSTE
ASCENDING CLIENT-TABLE (2)
INDEXED BY IND-POSTE.
10 CLIENT-TABLE PIC XXXX.
10 MONTANT-TABLE PIC 59(5)V99 COMP-3.
**************************
* CHARGEMENT D'UNE TABLE *
**************************
*
************
* STRUCTURE
************
*
CHARGEMENT-TABLE-CLIENT.
PERFORM D-CHARGEMENT-TABLE-CLIENT.
PERFORM CLIENT.
UNTIL DERNIER-CLIENT OR DEPASSEMENT-DE-TABLE.
PERFORM I-1-CHARGEMENT-TABLE-CLIENT.
IF DEPASSEMENT-DE-TABLE-CLIENT.
PERFORM ARRETER-PROGRAMME.
PERFORM F-CHARGEMENT-TABLE-CLIENT.
*
*************
* TRAITEMENT
*************
*
D-CHARGEMENT-TABLE-CLIENT.
SET IND-POSTE TO 1.
CLIENT.
ADD 1 TO NB-POSTE.
MOVE CLIENT-FICHIER TO CLIENT-TABLE (IND-POSTE).
MOVE ZERO TO MONTANT-TABLE (IND-POSTE).
SET IND-POSTE UP BY 1.
READ FICHIER-CLIENT AT END
MOVE HIGH-VALUE TO ENR-CLIENT.
I-1-CHARGEMENT-TABLE-CLIENT.
CLOSE FICHIER-CLIENT.
ARRETER-PROGRAMME.
MOVE 'Plus de 120 clients dans la table. Arrêt du programme'
TO LIBELLE-ANO.
WRITE ENR-CR FROM LIGNE-ANO.
WRITE ENR-CR FROM LIGNE-FIN-ANO.
ENTER DUMPONS.
F-CHARGEMENT-TABLE-CLIENT.
EXIT.
****************************
* RECHERCHE « SEARCH » * (1)
* RECHERCHE « SEARCH ALL » * (2)
****************************
*
************
* STRUCTURE
************
*
RECHERCHE-CLIENT.
PERFORM D-RECHERCHE-CLIENT.
19
19. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
IF CLIENT-TROUVE
PERFORM CUMULER-MONTANT
ELSE
PERFORM EDITER-CLIENT-NON-TROUVE.
PERFORM F-RECHERCHE-CLIENT.
*
*************
* TRAITEMENT
*************
*
D-RECHERCHE-CLIENT.
SET IND-POSTE TO 1. (1)
SEARCH POSTE-TABLE AT END (1)
SEARCH ALL POSTE-TABLE AT END (2)
MOVE 0 TO INDIC-TROUVE
WHEN CLIENT-F = CLIENT-TABLE (IND-POSTE) (1)
MOVE 1 TO INDIC-TROUVE. (1)
CUMULER-MONTANT.
ADD MONTANT-F TO MONTANT-TABLE (IND-POSTE).
EDITER-CLIENT-NON-TROUVE.
MOVE CLIENT-F TO CLIENT-CR.
MOVE 'Client non trouvé dans la table.' TO LIBELLE-CLIENT.
WRITE ENR-CR FROM LIGNE-ANC-CLIENT.
F-RECHERCHE-CLIENT.
EXIT.
20
20. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
De Pascal à Cobol
Structure générale du programme
Pascal Cobol
PROGRAM nom_programme; IDENTIFICATION DIVISION.
PROGRAM-ID. nom_programme.
CONST ENVIRONMENT DIVISION.
TYPE ...
VAR DATA DIVISION.
FILE SECTION.
... (fichiers)
WORKING-STORAGE SECTION.
... (données)
BEGIN PROCEDURE DIVISION.
... ... (divisé en sections et
END. paragraphes
WORKING-STORAGE SECTION.
Pascal Cobol
VAR ident1 : INTEGER; DATA DIVISION.
ident2 : REAL; WORKING-STORAGE SECTION.
77 ident1 PIC longueur
[USAGE] ncode [VALUE
valeur]
Scalaires non numériques
Pascal Cobol
VAR a : CHAR; PIC X (ou zones groupées)
b : BOOLEAN;
c : STRING;
d : enumeration;
e : intervalle;
VAR C : CHAR; 77 C PIC X.
VAR B : BOOLEAN;
VAR S : STRING [40]; 77 S PIC X(40).
VAR J : (lundi, mardi,..); (pas d'équivalent)
VAR I : 1..31; (ne peut être que décimal)
Enregistrements
Pascal Cobol
21
21. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
VAR WORKING-STORAGE SECTION.
PERSONNE : RECORD 01 PERSONNE.
NUM_SS : STRING [13]; 05 NUM-SS PIC X(13).
IDENT : RECORD 05 IDENT.
NOM : STRING [20]; 10 NOM PIC X(20).
PRENOM : STRING [20]; 10 PRENOM PIC X(20).
END;
ETAT_CIVIL : CHAR; 05 ETAT-CIVIL PIC X(1).
ADRESSE : RECORD 05 ADRESSE.
NUM : STRING [5]; 10 NUM PIC X(5).
RUE : STRING [40]; 10 RUE PIC X(40).
VILLE : STRING [30]; 10 VILLE PIC X(30).
CODE_POSTAL : RECORD 10 CODE-POSTAL.
DEP : 1..95; 15 DEP PIC 9(2).
BUREAU : 0..999; 15 BUREAU PIC 9(3).
END;
END;
Zone groupée
Une zone groupée est un champ non terminal.
Elle est toujours considérée comme alphanumérique (donc en PIC X).
Identification d'un champ
Pascal Cobol
personne.adresse.rue rue (ou)
rue IN adresse (ou)
rue IN adresse IN personne
(à utiliser si l'on a plusieurs variables de même type)
Types
Pascal Cobol
TYPE (pas de type en COBOL)
pers = RECORD 01 p1.
nom : STRING [15]; 05 nom PIC X(15).
prenom : STRING [10]; 05 prenom PIC X(10).
END;
02 p2.
VAR 05 nom PIC X(15).
p1, p2 : pers; 05 prenom PIC X(10).
p1.nom nom IN p1.
p2.pre prenom IN p2.
Tableaux
Pascal Cobol
VAR (pas d'équivalent direct)
t : ARRAY [1..100] OF STRING [10];
tab : RECORD 01 tab.
22
22. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
t : ARRAY [1..100] OF STRING [10]; 05 t OCCURS 100 PIC X(10).
Identification du tableau : TAB, TAB ou TAB.T
Identification d'un élément de rang I : T (I) [IN TAB ]
m : ARRAY [1..10, 1..5] OF STRING (pas en COBOL)
[20];
tab_tab : RECORD 01 tab-tab.
t : ARRAY [1..10] OF 05 t OCCURS 10.
ARRAY [1..5] OF STRING [20]; 10 st OCCURS s PIC X(20).
END;
Identification des champs : tab-tab, tab-tab.t [i], t (i) ou t (i) IN
tab-tab, tab-tab.t [i] [j], st (i, j)
Affectation
Pascal Cobol
:= MOVE TO
VAR
s1 : STRING [6]; 77 s1 PIC X(6).
s2 : STRING [4]; s2 PIC X(4).
s2 := s1; MOVE s1 TO s2.
(=> erreur si¦(pas
d'erreur)
LENGTH (s2) > 4) (Zone émettrice > zone réceptrice => troncature
(Zone émettrice < zone réceptrice => troncature
Zones numériques :
Pascal Cobol
VAR (alignement sur la virgule, conversions)
i : INTEGER; 77 i PIC S9(4) COMP.
j : REAL; 77 j PIC COMP-1.
77 k PIC 9(4)V99 COMP-3.
77 l PIC S9V99.
MOVE i TO j.
(conversion dans le mode de représentation de j)
MOVE k TO l.
(k > 9,99 => erreur)
Entrées sorties
Pascal Cobol
VAR 77 i PIC S9(4) COMP. (faux)
i : INTEGER; ACCEPT i.
READLN (i); 77 a PIC 9(4) [DISPLAY].
77 i PIC S9(4) COMP.
ACCEPT a.
MOVE a TO i.
WRITELN ('coucou', i); DISPLAY 'coucou', i
Until
Pascal Cobol
WHILE condition DO PERFORM nom_paragraphe
23
23. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
instructions; UNTIL condition
nom-paragraphe-1.
(instructions)
nom-paragraphe-2.
Fichier séquentiel
Description :
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT nom-interne ASSIGN
TO nom-externe
...
DATA DIVISION.
FILE SECTION.
FD nom-interne
LABEL RECORD IS STANDARD
...
DATA RECORD IS nom-fenetre
01 nom-fenetre
(idem que WORKING-STORAGE SECTION)
Notes :
• nom-externe entre guillemets
• suffixe DAT pour données
• suffixe LIS pour imprimante
Utilisation :
Pascal Cobol
ASSIGN (nom-interne, nom-externe) SELECT (dans l'ENVIRONMENT DIVISION)
REWRITE (nom-interne) OPEN OUTPUT nom-interne
RESET (nom-interne) OPEN INPUT nom-interne
READ (nom-interne, nom-fenetre) READ nom-interne AT END instruction
WRITE (nom-interne, nom-fenetre) WRITE nom-fenetre
CLOSE (nom-interne) CLOSE nom-interne
IDENTIFICATION DIVISION
La division IDENTIFICATION donne un nom au programme, afin de le
différencier des autres.
Elle donne des explications (sous forme de commentaires) sur le programme.
ENVIRONMENT DIVISION
24
24. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
La division ENVIRONMENT décrit physiquement les fichiers utilisés.
DATA DIVISION
La division DATA :
• réserve la mémoire
• décrit logiquement les données (description des enregistrements, ...)
PROCEDURE DIVISION
La division PROCEDURE décrit le traitement à effectuer, c'est-à-dire les
ordres.
Règles d'écriture
Colonne début Colonne fin Description
1 6 Numéros de ligne.
7 7 "*" pour un commentaire.
"-" pour continuer la ligne précédente.
" " pour une ligne normale.
8 72 Noms de division, de section, de
paragraphe.
12 72 Instructions.
73 80 Commentaire.
Déclaration de fichier [SELECT]
SELECT nom-fichier
ASSIGN TO SYSn-classe-type-organisation nom-externe.
SELECT associe un fichier sur disque (nom-externe) à un nom utilisé dans le
programme (nom-fichier).
Argument Description
nom-fichier Nom du fichier utilisé dans le programme.
30 caractères au maximum.
SYSn Unité logique affectée à ce fichier.
n ∈ [0, 240]
classe Classe du périphérique.
"UR" (Unit Record) pour le lecteur de cartes ou l'imprimante.
"UT" (Utility) pour les fichiers séquentiels.
"AS" (Access Sequential) pour les fichiers ESDS.
type Type du périphérique.
"2501" pour le lecteur de cartes.
"1403" pour l'imprimante.
"2400" pour la bande.
"3330" pour le disque.
organisation Organisation du fichier.
"S" pour les fichiers séquentiels.
Rien pour les autres.
nom-externe Nom du fichier utilisé par le JCL (donc sur disque).
7 caractères au maximum.
25
25. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Déclaration d'enregistrement [FD]
FD (File Definition) décrit les fichiers.
Nom du fichier utilisé dans le FD nom-fichier
programme, définit avec SELECT.
Type de longueur des [RECORD MODE IS mode]
enregistrements :
- "F" pour une longueur fixe.
- "V" pour une longueur variable.
- "U" pour une lonueur indéfinie.
Note : "F" et "V" sont déterminés
automatiquement.
Longueur de l'enregistrement en [RECORD CONTAINS entier1 [TO entier2]
caractères.
CHARACTERS]
Pour les enregistrements :
- de longueur fixe, préciser
entier1
- de longueur variable, préciser
"entier1" (longueur du plus petit
enregistrement) et "entier2"
(longueur du plus grand
enregistrement)
Taille des blocs physiques, afin [BLOCK CONTAINS entier3
de grouper des enregistrements.
Ne concerne pas les
enregistrements de longueur
indéfinie.
Indique le nombre [TO entier4] CHARACTERS
d'enregistrements par bloc. Cas
particulier pour les
enregistrements de longueur
variable : prendre les
enregistrements de longueur
maximale.
Longueur physique du bloc :
( (Longueur maximale de
l'enregistrement)
+ 4 octets (comptage de
l'enregistrement) ) = Longueur
physique de l'enregistrement.
x nombre d'enregistrements dans
un bloc = Longueur logique
du bloc
+ 4 octets (comptage du bloc)
= Longueur physique du bloc
Indique le nombre de caractères /RECORD]
par bloc.
Indique le type de labels. LABEL RECORD
26
26. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Indique que le label du fichier est IS STANDARD/
au format IBM.
Le label est créé lors de l'écriture
dans le fichier.
Il est utilisé au niveau du JCL
(carte DLBL pour les fichiers sur
disque, carte TLBL pour les
fichiers sur bande magnétique).
Indique que le fichier n'a pas de OMITTED
label.
Indique le (ou les) nom(s) de la [DATA RECORD IS nom-enreg1 [nom-
zone tampon.
enreg2] ...].
Description d'enregistrement
Le nom de l'enregistrement :
• est au niveau 01
• se trouve dans la clause DATA RECORD de l'ordre FD
Notes : la clause VALUE est interdite, sauf pour les niveaux 88.
Ouverture [OPEN]
OPEN :
• ouvre un fichier
• contrôle (cas de la lecture) ou crée (cas de l'écriture) le label
OPEN
Indique que le fichier est en INPUT/
lecture.
Indique que le fichier est en OUTPUT
écriture.
Nom du fichier utilisé dans le nom-fichier-1 [nom-fichier2 ...]
programme, défini avec SELECT
Fermeture [CLOSE]
CLOSE :
• ferme un (ou des) fichier(s)
• vérifie les labels de fin
CLOSE
C'est le nom du fichier utilisé nom-fichier1
dans le programme, défini avec
SELECT.
WITH LOCK s'applique aux fichier [WITH LOCK] [nom-fichier-2 ...]
sur bande. Cette option permet
de décharger et de libérer la
bande.
Lecture [READ]
READ :
27
27. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
• lit un enregistrement
• le stocke dans la variable indiquée par DATA RECORD
• indique quoi faire en fin de fichier
READ
nom-fichier
Permet de stocker [ INTO nom-donnée ]
l'enregistrement lu :
• dans la variable
indiquée par DATA
RECORD et
• dans la variable
"nom-donnée"
Exécuter les instructions AT END instructions.
indiquées lorsque la fin de fichier
est atteinte.
Remarques :
• L'enregistrement est accessible tant qu'un READ ou qu'un CLOSE n'a pas été
exécuté.
• Ne plus utiliser la variable stockant l'enregistrement après une fin de fichier.
ECRITURE [WRITE]
WRITE écrit un enregistrement dans un fichier.
WRITE nom-enregistrement [ FROM nom-donnée ]
[ INVALID KEY instructions ].
Remarque : On n'indique pas le nom du fichier, mais le nom de
l'enregistrement.
nom-enregistrement C'est le nom de la variable
stockant l'enregistrement
indiquée par DATA RECORD.
FROM Permet de transférer le contenu
de la variable indiquée, et non
pas la variable indiquée par
DATA RECORD, dans le fichier.
INVALID KEY Si l'écriture fait déborder le
fichier, alors exécuter les
instructions indiquées.
28
28. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Fichier imprimante
FICHIER LECTEUR DE CARTE
Un lecteur de cartes est utilisé comme un fichier séquentiel.
Toutefois, il y a quelques différences :
• Les enregistrements contiennent 80 caractères, et sont donc fixes.
• Le fichier ne contient pas de label.
FICHIER IMPRIMANTE
Une imprimante est utilisée comme un fichier séquentiel.
Toutefois, il y a quelques différences :
• Les enregistrements contiennent 133 caractères (y compris le caractère de saut de
ligne), et sont donc fixes.
• Le fichier ne contient pas de label.
ECRITURE [WRITE]
WRITE imprime un enregistrement.
WRITE nom-enregistrement [ FROM nom-donnée ]
AFTER POSITIONING nombre/caractere-saut [ LINES ]
caractere-saut caractere-saut est est un
caractère contenant un code de
saut ASA.
Nombre Indique le nombre de lignes à
sauter. Si nombre = 0, alors
effectue un saut de page.
Note : Incompatible avec l'autre version (avec AFTER/BEFORE ADVANCING).
ECRITURE V 2 [WRITE]
WRITE imprime un enregistrement.
WRITE nom-enregistrement
[ FROM nom-donnée ]
29
29. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
AFTER/BEFORE ADVANCING nombre/caractere-saut [ LINES ]
Note : Incompatible avec l'autre version (avec POSITIONNING).
Nombre Indique le nombre de lignes à sauter
(maximum 100).
AFTER ADVANCING L'impression de la ligne s'effectue après
le saut précisé.
BEFORE ADVANCING L'impression de la ligne s'effectue avant
le saut précisé.
CARACTERE DE SAUT
On introduit ici la notion de caractère de saut "ASA".
Il permet d'effectuer un saut de ligne, de page, ou encore de modifier
l'espacement de ligne.
Caractère de saut Description
"" Espacement simple
"0" Espacement double
"-" Espacement triple
"+" Pas d'espacement
"1" Saut de page
"2".."9" Saut indiqué par le canal correspondant de la bande pilote
"A".."C" Saut au canal 10, 11, 12
Les sauts de canaux (1 à 9 et A, B, C) provoquent un saut à une ligne précise
de la page.
Cela dépend de la bande pilote utilisée.
Par exemple, le canal 1 provoque un saut en première ligne de la page
suivante.
FICHIER VSAM/ESDS
DECLARATION DE FICHIER [SELECT]
Il est préférable d'utiliser la clause "FILE STATUS".
Cette zone contient le code retour lors de l'ouverture et de la fermeture du
fichier.
Si le code retour est égal à :
• 00 : la lecture ou l'écriture s'est bien déroulée
• 10 : la fin du fichier a été atteinte
30
30. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
OUVERTURE DE FICHIER [OPEN]
OPEN option nom-fichier1 nom-fichier2 ... .
OPEN ouvre un fichier VSAM.
OPEN / ACCESS INPUT OUTPUT I-O EXTEND
READ O N O N O : accès autorisé
WRITE N O N O N : accès interdit
REWRITE N N O N
option
Valeur de option Description
INPUT Ouverture en mode lecture seulement.
OUTPUT Ouverture en mode écriture seulement.
I-O Ouverture en mode lecture et écriture.
EXTEND Ouverture en mode ajout.
FIN DE FICHIER
Pour tester la fin du fichier (FF), on peut :
• tester la valeur de la zone indiquée dans FILE STATUS : Elle sera égale à 10 s'il y
a FF.
• utiliser la clause AT END dans le READ. Cette clause est optionnelle.
RE-ECRITURE DE FICHIER [REWRITE]
REWRITE ré-écrit le dernier enregistrement lu.
Le fichier doit être ouvert en mode "I-O".
FICHIER VSAM/KSDS
DECLARATION DE FICHIER [SELECT]
SELECT nom-fichier
ASSIGN TO SYSn-nomDLBL
ORGANIZATION IS INDEXED
[ ACCESS MODE IS ] type-accès
31
31. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
RECORD KEY nom-zone-1
[ FILE STATUS IS nom-zone-2 ].
SELECT associe un fichier VSAM/KSDS sur disque (nom-externe) à un nom
utilisé dans le programme (nom-fichier).
nom-fichier Nom du fichier utilisé dans le
programme.
x 30 caractères au maximum.
SYSn Unité logique affectée à ce fichier.
X n _ [0, 240]
nom-DLBL Nom de la DLBL.
type-accès = SEQUENTIAL pour un accès séquentiel
(par défaut)
x = RANDOM pour un accès par clé
x = DYNAMIC pour un accès séquentiel et
par clé
RECORD KEY RECORD KEY précise la zone qui contient
la clé. La clé est une sous-zone de
l'enregistrement du fichier, et doit être
de longueur identique à celle définie dans
le paramètre KEYS du DEFINE du fichier.
RECORD CONTAINS Il est recommandé d'utiliser la clause
RECORD CONTAINS afin que COBOL
effectue le contrôle avec la description
faite au momen du DEFINE.
OUVERTURE DE FICHIER [OPEN]
OPEN option nom-fichier1 nom-fichier2 ... .
OPEN ouvre un fichier VSAM.
+--------------------------------------------------------+
¦Option¦Description¦
¦-----------+--------------------------------------------¦
¦INPUT¦Ouverture en mode lecture seulement,¦
¦¦avec accès sur clé pour RANDOM et DYNAMIC.¦
¦OUTPUT¦Ouverture en mode écriture seulement,¦
32
32. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
¦¦création si inexistant en mode SEQUENTIAL.¦
¦I-O¦Ouverture en mode lecture et écriture :¦
¦¦. modification / suppression pour l'accès¦
¦¦SEQUENTIAL/RANDOM/DYNAMIC¦
¦¦. ajout pour l'accès RANDOM/DYNAMIC¦
¦EXTEND¦Ouverture en mode ajout si :¦
¦¦. accès SEQUENTIAL¦
¦¦. le fichier est trié sur la clé¦
¦¦. clés à ajouter plus grandes que les plus¦
¦¦grandes du fichier¦
+--------------------------------------------------------+
POSITIONNEMENT DANS UN FICHIER [START]
START nom-fichier [ KEY IS operateur nom-zone ]
[ INVALID KEY instructions ].
START permet de se positionner sur un enregistrement dans un fichier.
+-------------------------------------------+
¦Opérateur¦Description¦
¦---------------+---------------------------¦
¦EQUAL TO¦= (égalité)¦
¦GREATER THAN¦> (supérieur)¦
¦NOT LESS THAN¦NOT < (supérieur ou égal)¦
+-------------------------------------------+
!KEY
_ Si KEY IS est omis :
Le positionnement est fait sur la clé indiquée
dans le RECORD KEY du fichier.
Si la clé est inexistante :
- si INVALID KEY est présent,
alors les instructions indiquées sont exécutées.
- si INVALID KEY est omis :
alors le code 23 est retourné dans le FILE STATUS.
33
33. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
_ Si KEY IS est présent :
- Le positionnement est fait sur une partie du groupe indiqué
dans le RECORD KEY du fichier.
- Si la clé est incomplète, elle est complétée à zéro à droite.
LECTURE D'UN FICHIER [READ]
READ nom-fichier [ NEXT ]
RECORD [ INTO nom-donnée ]
[ AT END instructions ]/[ INVALID KEY instructions ].
READ lit séquentiellement ou par clé un enregistrement d'un fichier.
!NEXT
La lecture se fait suivant le positionnement effectué par START.
Cette option n'est possible qu'avec un accès DYNAMIC.
Si elle est omise, la lecture est :
- séquentielle pour un accès SEQUENTIAL
- par clé pour un accès RANDOM ou DYNAMIC
!AT END
Cette option n'est possible qu'avec un accès SEQUENTIAL.
Si elle est omise, le code retour 10 est retourné.
!INVALID KEY
Cette option n'est possible que pour un accès par clé.
Si la clé n'est pas trouvée dans le fichier,
les instructions indiquées sont exécutées.
Si elle est omise, et si la clé est inconnue,
un code retour 23 est retourné dans le FILE STATUS.
ECRITURE DANS UN FICHIER [WRITE]
34
34. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
WRITE nom-enregistrement [ FROM nom-donnée ]
[ INVALID KEY instructions ].
WRITE écrit un enregistrement :
• séquentiellement ou
• par clé
Notes :
• L'ouverture en OUTPUT permet de créer un fichier et d'écrire des enregistrements.
• L'ouverture en EXTEND permet d'ajouter des enregistrements à la fin du fichier.
• L'ouverture en I-O permet d'ajouter des enregistrements de clés inexistantes dans
le fichier.
INVALID KEY Si une des conditions suivantes
est réalisée, alors les
instructions indiquées sont
exécutées.
dépassement de capacité du fichier
• Pour l'ouverture en (OUTPUT ou EXTEND) et l'accès en SEQUENTIAL : Les clés du
fichier ne sont pas triés dans l'ordre croissant.
• Pour l'ouverture en (OUTPUT ou I-O) et l'accès DIRECT ou DYNAMIQUE : La clé de
l'enregistrement à écrire existe déjà dans le fichier.
RE-ECRITURE DANS UN FICHIER [REWRITE]
REWRITE nom-enregistrement [ FROM nom-donnée ]
[ INVALID KEY instructions ].
Cette commande n'est utilisable qu'en ouverture I-O.
REWRITE permet de ré-écrire le dernier enregistrement lu.
INVALID KEY Si une des conditions suivantes est réalisée, alors les
instructions indiquées sont exécutées.
Pour les accès SEQUENTIAL : La clé à ré-écrire est différente de celle déjà
écrite.
Pour les accès DIRECT : La clé à ré-écrire n'existe pas dans le fichier.
SUPPRIMER UN ENREGISTREMENT [DELETE]
DELETE nom-fichier RECORD
[ INVALID KEY instructions ].
35
35. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Cette commande n'est utilisable qu'avec les fichiers :
• en ouverture I-O
• en accès SEQUENTIAL ou DIRECT
DELETE supprime logiquement un enregistrement dans un fichier.
INVALID KEY Cette clause n'est pas utilisable
en accès SEQUENTIAL.
Si la clé indiquée dans RECORD KEY n'existe pas, alors les instructions
indiquées sont exécutées.
OUVERTURE POSSIBLE
OPEN / INPUT OUTPUT I-O EXTEND
ACCESS
READ O N O N O : accès
autorisé
WRITE N O O O
REWRITE N N O N N : accès
interdit
DELETE N N O N
FICHIER VSAM
CODE RETOUR
VALEUR DESCRIPTION
00 Pas de problème.
10 Fin de fichier.
22 Clé inexistante.
23 Clé inconnue.
91 Ecriture sur un fichier non partagé.
92 Fichier déjà ouvert ou déjà fermé.
93 Fichier non disponible.
94 Fichier inconnu ou vide ou VSAM-KSDS
utilisé comme un ESDS.
36
36. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
95 DLBL absente.
37
37. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
E/S
ARRET DE PROGRAMME [STOP]
STOP RUN/littéral.
STOP arrêt le programme.
RUN Arrête l'exécution du programme et
donne le contrôle au superviseur.
Littéral Arrête le programme, affiche le littéral et
donne le contrôleur au pupitreur.
LECTURE INFORMATION [ACCEPT]
ACCEPT nom-donnée [ FROM SYSIPT/nom-symbolique/CONSOLE ].
ACCEPT lit une information (80 caractères au maximum) à partir :
• du lecteur si SYSIPT est indiqué (par défaut)
• de la console si CONSOLE est indiqué
• du périphérique nommé "nom-symbolique" dans la partie SPECIAL-NAMES
et l'écrit dans "nom-donnée".
ENVOI DE MESSAGE [DISPLAY]
DISPLAY littéral1/nom-donnée1 littéral2/nom-donnée2 ...
[ UPON SYSLST/SYSPCH/CONSOLE/nom-symbolique ].
DISPLAY envoie un message vers :
• le périphérique nommé "nom-symbolique" dans la partie SPECIAL-NAMES
• l'imprimante (120 caractères au maximum) si SYSLST est indiqué
• la console (100 caractères au maximum) si CONSOLE est indiqué
• la carte (80 caractères dont 72 utilisables au maximum)
UPON Si UPON est utilisé, le périphérique pris
38
38. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
par défaut est l'imprimante.
DONNEE
DEFINITION
numéro-niveau nom-donnée image valeur-initiale.
Exemple :
03 Libellé PIC X(7) VALUE 'TABLEAU'
numéro-niveau
Le numéro de niveau est composé de deux chiffres (de 01 à 49, et 77).
Il indique le niveau dans la hiérarchie de la structure.
Les niveaux 01 et 77 sont particuliers :
• Le niveau 01 définit le sommet de la hiérarchie. Un cadrage à gauche est effectué.
• Le niveau 77 définit une variable ne figurant dans aucun groupement.
Attention : Les définitions de niveau 77 doivent précéder les définitions de
variables.
Conventions :
• Commencer en marge B.
• Décaler de 4 positions à chaque changement de niveau.
nom-donnée
C'est le nom de l'article.
Il est préférable que le nom soit unique, mais il peut être tout de même
répété s'il se trouve dans des branches différentes.
Le nom FILLER peut être utilisé (entre les niveaux 02 et 49) chaque fois qu'il
y a une zone constante faisant partie d'une zone à éditer.
Mais aucune référence à cette zone ne pourra être faite.
image
On indique ici :
• la taille de la variable
• son type
• ce qu'on en fera
39
39. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Cette définition doit tenir en 30 caractères au maximum.
Il existe quatre types d'images :
• image alphanumérique
• image numérique
• image numérique d'édition
• image alphabétique
image alphanumérique
Cette zone peut contenir n'importe quel caractère.
Exemple : PIC XXXXXXXXXX ou PICTURE IS XXXXXXXXXX
définit une variable pouvant contenir jusqu'à 10 caractères.
On pourra écrire plus simplement : PIC X(10)
Si la zone de réception est plus grande que la zone d'origine, il y a cadrage à
gauche, et des espaces sont ajoutés pour combler.
Si la zone de réception est plus petite que la zone d'origine, il y a perte des
caractères dépassant à droite.
image numérique
Cette zone ne peut contenir que des nombres signés ou non. Seuls les
chiffres de 0 à 9 sont acceptés.
Exemple : PIC 9999999999
définit une variable pouvant contenir jusqu'à 10 chiffres.
On pourra écrit plus simplement : PIC 9(10).
Autres exemples :
• Si en mémoire on a 0123, alors PIC 99V99 stocke la valeur 01,23
• PIC 9999 stocke la valeur 0123
• PIC 999V9 stocke la valeur 012,3
• Si on transfère la valeur 265724 de PIC 9(4)V99 à 999V999, alors la valeur devient
657240.
Les troncatures sont signalées par un message d'avertissement du style «
ILA5011I-> HIGH ORDER TRUNCATION MIGHT OCCUR ».
Mais il y a poursuite de la compilation.
image numérique - EBCDIC
• Pour les nombres positifs, le chiffre extrême droit est remplacé par : A pour +1, B
pour +2, ... I pour +9.
• Pour les nombres négatifs, le chiffre extrême droit est remplacé par : J pour -1, K
pour -2, ... R pour -9.
Donc le signe n'occupe pas de place en mémoire.
40
40. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Exemple :
• +100,3 est représenté en mémoire par 000100C,
• -100,3 par 000100L.
En cas de troncature ou de remplissage avec des 0, Cobol gère correctement
le signe.
Attention : Penser à déclarer les variables avec signe lorsqu'elles sont
susceptibles de recevoir des valeurs négatives.
image numérique d'édition
Les images numériques d'édition permettent la représentation de valeurs
numériques sur les états.
On distingue :
• les caractères d'insertion ",", "B", "_", "/", "0", "F", "$", "+", "-", "CR", "DB"
• Ils sont insérés dans la chaîne de caractères à imprimer.
• Chacune occupe un caractère.
• Exemple :
• PIC 9(4)V99 (6 caractères)
• PIC 9(4),99 (7 caractères)
• la virgule ","
• Ce caractère d'insertion permet aussi le centrage sur la virgule réelle.
• Ne pas oublier d'indiquer "DECIMAL-POINT IS COMMA" dans le paragraphe
• SPECIAL-NAMES.
• Exemple :
• 005862 5862,00
• PIC ------ ------> -------
• 9(6) 9(4),99
• Le caractère "F" (pour les Francs) ou "$" (pour les dollars)
• Il insère un symbole de monnaie.
• Il doit figurer à gauche de l'image.
• Il faut indiquer CURRENCY SIGN IS 'F' dans le paragraphe SPECIAL-NAMES.
• Exemple : PIC F99.999.999
• Le caractère "."
• Il faut indiquer DECIMAL-POINT IS COMMA" dans le paragraphe SPECIAL-NAMES.
• Les caractères '-', '+', 'DB', 'CR'
• Les caractères 'DB' et 'CR' ne peuvent être placés qu'à droite.
• Les caractères '+' et '-' peuvent être placés à gauche ou à droite.
41
41. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
• Le '-' n'imprime le signe que s'il est négatif.
• Le '+' imprime toujours le signe.
• Les caractères "Z", "*"
• Le "Z" supprime les zéros non significatifs.
• Le "*" remplace les zéros non significatifs par des "*", afin de rendre difficile la
falsification des documents.
• Par convention, on ne cherche pas à supprimer les 0 de la partie décimale.
• Lorsque la valeur à imprimer dépasse de la taille de la zone d'impression, les
chiffres de gauche sont supprimés.
• Afin de garantir une sortie correcte, on colle toutes les informations en ajoutant un
chiffre significatif à l'image avec remplacement des zéros par un espace.
• Les caractères "F", "$", "+", "-"
• Ce sont des caractères de remplacement.
• Les zéros non significatifs sont remplacés par des espaces, sauf celui le plus à
droite, qui reçoit le symbole de monnaie (F, $) ou le signe (+, -).
• Il faut toujours prévoir un caractère de plus par rapport au nombre de chiffres
dans la zone émettrice.
• Exemple avec perte de chiffre :
• PIC S9(6) ----> PIC -(5)9
• 58625L -86253
• Lorsque la zone numérique est nulle, on peut n'imprimer que des espaces :
• PIC ZZZ,99 BLANK WHEN ZERO
image alphabétique
Les images alphabétiques permettent la représentation de groupes de lettres
(de 'A' à 'Z', plus l'espace).
Tous les autres caractères sont exclus : "-", "_", "1", ...
valeur initiale (optionnel)
Si on ne précise pas la valeur que prendra les variables au début du
programme, alors on ne peut connaître leur valeur.
Certains compilateurs les remettent à zéro, d'autres pas ...
Pour donner une valeur initiale, on utilise VALUE.
Exemple :
02 COMPTEUR PIC 999 VALUE 0.
02 NOM PIC X(20) VALUE 'DUPONT LAURENT'.
02 INDICE PIC 999 VALUE ZERO.
02 ADRESSE PIC X(20) VALUE SPACE.
42
42. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Notes :
• ZERO, ZEROS, ZEROES sont équivalent à 0.
• SPACE, SPACES sont équivalents à des espaces.
• La clause VALUE est possible au niveau du groupe. Mais un article ne peut pas
recevoir deux VALUE. Ainsi, dans ce cas, aucun de ses articles élémentaires ne
peut contenir elle-aussi la clause VALUE.
• Il est également possible de mettre une clause VALUE avec une image d'édition :
01 TOTAL PIC ZZ9,99 VALUE '0,00'.
Représentation des données : USAGE
Valeur binaire : COMPUTATIONAL
01 MONTANT PIC S9(7)V99 COMP-3 VALUE ZERO.
01 CODE PIC 99 COMP VALUE 80.
DE A TAILLE
9 9(4) 1/2 mot 2 octets
9(5) 9(9) 1 mot 4 octets
9(10) 9(18) 2 mots 8 octets
Note :
• COMP = COMPUTATIONAL
• COMP-1 = COMPUTATIONAL-1
• COMP-2 = COMPUTATIONAL-2
• COMP-3 = COMPUTATIONAL-3
Le cadrage n'est pas automatique. Mais en cas d'alignement incorrect,
chaque valeur est transférée vers une zone de travail pour les opérations
arithmétiques. Les calculs sont alors corrects, mais il y ralentissement.
La clause SYNC permet d'aligner correctement.
02 BOUCLE PIC 9(5) COMP SYNC.
Réserve 4 octets alignés sur un mot.
Exemple :
• 02 A PIC 9(6) COMP SYNC. 4 octets, soit 1 mot.
• 02 B PIC 9(3) COMP SYNC. 2 octets, soit 1/2 mot.
• 02 C PIC 9(5) COMP SYNC. 4 octets, soit 1 mot.
A B xxx C
2 octets sont donc rajoutés en "xxx" pour constituer 1 mot. La mention SYNC
pour B n'est pas nécessaire dans ce cas. Mais elle le serait dans le cas
d'éventuelles insertions.
COMP Représentation binaire.
43
43. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
COMP-1 Virgule flottante, simple précision.
• 4 octets.
• 6 chiffres significatifs.
• Valeur absolue de 10^(-78) à
10^(+75).
COMP-2 Virgule flottante, double précision.
• 8 octets.
• 16 chiffres significatifs.
• Valeur absolue de 10^(-78) à
10^(+75).
COMP-3 Décimal condensé.
• 5 octets.
• (9 1/2 octets pour les chiffres + 1/2
octets pour le signe) : 1 chiffre (1
octet) + 3 chiffres (2 octets) + 5
chiffres (3 octets)
On peut éviter le problème des cadrage en mettant les réservations dans
l'ordre suivant :
• doubles mots
• simples mots
• demi-mots
• valeurs EBCDIC
• valeurs en décimal condensé
WORKING STORAGE SECTION
PRESENTATION
La Working Storage Section contient toutes les zones utiles pour stocker des
informations au cours même de l'exécution d'un programme (zones de
travail).
ZONE
ELEMENTAIRE
44
44. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
Une zone élémentaire est une zone qui ne peut pas être subdivisée.
Exemple : la zone d'un compteur.
Elle contient une clause PIC.
GROUPEE
Une zone groupée est un regroupement de plusieurs zones élémentaires.
Exemple : la zone contenant plusieurs compteurs.
Elle ne contient pas de clause PIC, mais peut contenir les clauses USAGE
et/ou VALUE (par défaut PIC X et USAGE DISPLAY).
Exemple :
(PIC X) (PIC 9)
Zone groupée = Zone élémentaire 1 + Zone élémentaire 2 (PIC 9)
INDEPENDANTE
Une zone indépendante est une zone ni groupée ni faisant partie d'une zone
groupée.
NOMBRE-NIVEAU
Chaque niveau de description possède un nombre-niveau. Le plus haut
niveau d'une zone groupée est '01'. Les nombre-niveaux ne se suivent pas
forcément. Ils peuvent aller de '01' à '49'.
Les nombre-niveaux '01' et '77' commencent en marge A.
Seules les zones élémentaires ont une "picture".
Une zone groupée est suivie d'un point (après la clause USAGE s'il y en a
une).
Par convention, on décale de quatre position pour chaque changement de
niveau.
On cherche à regrouper des informations de même domaine dans un groupe.
01 nom-groupe VALUE ZEROS. permet de remettre à zéro une zone EBCDIC,
mais pas des zones en décimal condensé ou autre.
Alignement mémoire
Afin d'augmenter la rapidité d'exécution, le compilateur aligne les
informations de niveau 01 sur la frontière suivante :
Zone Alignement
2 octets, jusqu'à S9(4) Demi-mot
4 octets, jusqu'à S9(9) Mot
8 octets, au-delà de S9(9) Doubl-mot
Exemple :
45
45. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
• NUMERO sur 3 caractères 3 octets
• NOM sur 7 caractères 7 octets
• QUANTITE sur 4 octets (en binaire) 4 octets
Numéro Nom xxxxx Quantité
0 2 3 9 10 11
12 15
1 2 3 4 Numéro du mot
Redéfinition des zones
La redéfinition des zones sert dans le cas où l'on veut que une même zone de
travail contienne plusieurs types de renseignements.
Note importante : Cette redéfinition ne réserve pas de place en mémoire.
Voici les règles à respecter :
• La zone redéfinie doit être de même niveau que la zone à redéfinir.
• Dans le cas de plusieurs redéfinitions d'une même zone à redéfinir, les
redéfinitions se rapportent toujours à la zone à redéfinir.
• La zone redéfinie ne doit pas contenir de clause VALUE.
• Les zones redéfinies doivent immédiatement suivre la zone à redéfinir.
• La zone redéfinir doit avoir la même longueur que la zone à redéfinir.
Exemples :
• Une zone peut être décomposée deux plusieurs manières :
• 01 ZONE
• 02 ZONE-1 PIC X(10).
• 02 ZONE-2 PIC X(20).
• 01 ZONE-REDEF REDEFINES ZONE.
• 02 ZONE-3 PIC X(30).
• Une même zone peut avoir deux PIC différents :
• 01 ZONE-1 PIC X(5).
• 01 ZONE-2 PIC 9(5).
• Où encore :
• 01 ZONE.
• 02 ZONE-1 PIC 9(5).
• Car ZONE est définit en alphanumérique.
• Une conversion de francs en centimes par exemple :
• 77 FRANCS PIC 999V99.
46
46. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
• 77 CENTIMES REDEFINES FRANCS PIC 9(5).
Noms de condition
Un nom-condition est vrai s'il appartient à un certain ensemble de valeurs.
Ceci permet d'écrire des programmes plus parlants.
88 nom-condition VALUE littéral
[ TROUGH/THRU littéral ]
[ littéral [ TROUGH/THRU littéral ] ]
Exemples :
• Nationalité ...
77 NATIONALITE PIC 9.
88 FRANCAIS VALUE 1.
88 ETRANGER VALUE 2.
On écrirait : IF NATIONALITE = 1 COMPUTE ...
Mais on peut écrire : IF FRANCAIS COMPUTE ...
• Age ...
01 AGE PIC 9(3).
88 ENFANT VALUE 1 THRU 17.
88 JEUNE VALUE 18 THRU 25.
88 ADULTE VALUE 25 THRU 65.
88 VIEILLARD VALUE 66 THRU 100.
Les enfants ont de 1 à 17 ans.
Les jeunes de 18 à 25 ans.
Les adultes de 25 à 65 ans.
Les vieillards de 66 à 100 ans.
• Annuaire téléphonique ...
01 LETTRE PIC X.
88 VOYELLE VALUES 'A', 'E', 'I', 'O', 'U', 'Y'.
Expression RENAMES
RENAMES est très rarement utilisé et permet de redéfinir une zone à cheval
sur deux autres zones.
01 DATE.
02 DATE-1.
03 DATE-JJ PIC 99.
47
47. Bruno Delb http://www.brunodelb.com Date : 12/02/2001
Le langage Cobol
03 DATE-MM PIC 99.
03 DATE-AA PIC 99.
02 DATE-MM2 PIC 99.
66 DATE-2 RENAMES DATE-AA
THRU DATE-MM2.
• DATE-2 contient donc les zones DATE-AA (l'année) et DATE-MM2 (le
mois).
• La zone renommée ne suit pas obligatoirement les zones à renommer.
• Les zones à renommer ne peuvent pas être de niveau 01, 77 ni 88.
PROCEDURE DIVISION
INTRODUCTION
ROUNDED renvoit un arrondi à l'unité supérieure du chiffre le moins
significatif si > 4.
48