le langage cobol

51
Bruno Delb http://www.brunodelb.com Date : 12/02/2001 Le langage Cobol Sommaire LA STRUCTURE D’UN PROGRAMME..................................................5 QUELLE EST LHISTOIRE 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....................................................................................................................................... 10 CLOSE.....................................................................10 Définition...................................................................................................................................................... 10 Syntaxe.......................................................................................................................................................... 10 COMPUTE...................................................................10 Définition...................................................................................................................................................... 10 DISPLAY...................................................................10 Définition...................................................................................................................................................... 10 Syntaxe 1....................................................................................................................................................... 11 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.......................................................................................................................................................... 12 MULTIPLY..................................................................12 Définition...................................................................................................................................................... 12 Syntaxe.......................................................................................................................................................... 12 OPEN......................................................................12 1

Upload: bruno-delb

Post on 21-Jun-2015

2.466 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: Le langage Cobol

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 ?..............................................................................................5QUELLE EST LA STRUCTURE D'UN PROGRAMME ?................................................................................5

IDENTIFICATION DIVISION....................................................................................................5ENVIRONMENT DIVISION......................................................................................................5DATA DIVISION.....................................................................................................................6

LES COMMANDES..............................................................................................9

ACCEPT....................................................................................................................................9Définition..............................................................................................................................9Syntaxe 1.............................................................................................................................9Description 1........................................................................................................................9Syntaxe 1.............................................................................................................................9Description 1........................................................................................................................9Equivallence Pascal.............................................................................................................9

ADD..........................................................................................................................................9Définition..............................................................................................................................9Syntaxe................................................................................................................................9Equivalence Pascal............................................................................................................10

CLOSE....................................................................................................................................10Définition............................................................................................................................10Syntaxe..............................................................................................................................10

COMPUTE...............................................................................................................................10Définition............................................................................................................................10

DISPLAY..................................................................................................................................10Définition............................................................................................................................10Syntaxe 1...........................................................................................................................11Syntaxe 2...........................................................................................................................11Description 1......................................................................................................................11Description 2......................................................................................................................11

DIVIDE....................................................................................................................................11Définition............................................................................................................................11Syntaxe..............................................................................................................................11

EXIT........................................................................................................................................11Définition............................................................................................................................11Syntaxe..............................................................................................................................11

IF............................................................................................................................................11Définition............................................................................................................................11Syntaxe..............................................................................................................................12

MULTIPLY...............................................................................................................................12Définition............................................................................................................................12Syntaxe..............................................................................................................................12

OPEN......................................................................................................................................12Définition............................................................................................................................12Syntaxe..............................................................................................................................12

PERFORM...............................................................................................................................12Définition............................................................................................................................13Syntaxe..............................................................................................................................13Equivalence Pascal............................................................................................................13

READ......................................................................................................................................13Définition............................................................................................................................13

1

Page 2: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

Syntaxe..............................................................................................................................13SUBSTRACT...........................................................................................................................13

Définition............................................................................................................................13Syntaxe..............................................................................................................................13Equivalence Pascal............................................................................................................14

WRITE.....................................................................................................................................14Définition............................................................................................................................14Syntaxe..............................................................................................................................14

>............................................................................................................................................14Définition............................................................................................................................14Syntaxe 1...........................................................................................................................14

<............................................................................................................................................15Définition............................................................................................................................15Syntaxe..............................................................................................................................15

=............................................................................................................................................15Définition............................................................................................................................15Syntaxe..............................................................................................................................15

>=..........................................................................................................................................15Définition............................................................................................................................15Syntaxe..............................................................................................................................15

<=..........................................................................................................................................15Définition............................................................................................................................15Syntaxe..............................................................................................................................15

IS............................................................................................................................................16Définition............................................................................................................................16Syntaxe..............................................................................................................................16

LA PROGRAMMATION STRUCTURÉE..................................................................17

QU’EST-CE QU’UN PROGRAMME ?..................................................................................................17QUELS SONT LES TYPES DE STRUCTURE EN ARBRE ?.........................................................................17

Qu’est-ce qu’un arbre ?.....................................................................................................17QUEL EST LE SCHÉMA DE CHARGEMENT DE TABLE ?..........................................................................18QUEL EST LE SCHÉMA DE RECHERCHE ?..........................................................................................18

DE PASCAL À COBOL.......................................................................................21

STRUCTURE GÉNÉRALE DU PROGRAMME..........................................................................................21WORKING-STORAGE SECTION...............................................................................................21

Scalaires non numériques.................................................................................................21Enregistrements................................................................................................................21Zone groupée.....................................................................................................................22Identification d'un champ..................................................................................................22Types..................................................................................................................................22Tableaux............................................................................................................................22Affectation..........................................................................................................................23Entrées sorties...................................................................................................................23Until....................................................................................................................................23Fichier séquentiel..............................................................................................................24IDENTIFICATION DIVISION..................................................................................................24ENVIRONMENT DIVISION....................................................................................................24DATA DIVISION...................................................................................................................25PROCEDURE DIVISION........................................................................................................25Règles d'écriture................................................................................................................25Déclaration de fichier [SELECT].........................................................................................25Déclaration d'enregistrement [FD]....................................................................................26Description d'enregistrement............................................................................................27Ouverture [OPEN]..............................................................................................................27Fermeture [CLOSE]............................................................................................................27Lecture [READ]...................................................................................................................27

ECRITURE [WRITE].................................................................................................................28

2

Page 3: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

FICHIER IMPRIMANTE......................................................................................28

FICHIER LECTEUR DE CARTE.................................................................................................28FICHIER IMPRIMANTE.............................................................................................................29ECRITURE [WRITE].................................................................................................................29ECRITURE V 2 [WRITE]..........................................................................................................29

CARACTERE DE SAUT.........................................................................................................30

FICHIER VSAM/ESDS........................................................................................30

DECLARATION DE FICHIER [SELECT].....................................................................................30OUVERTURE DE FICHIER [OPEN]...........................................................................................30

option.................................................................................................................................31FIN DE FICHIER.......................................................................................................................31RE-ECRITURE DE FICHIER [REWRITE]....................................................................................31

FICHIER VSAM/KSDS........................................................................................31

DECLARATION DE FICHIER [SELECT].....................................................................................31OUVERTURE DE FICHIER [OPEN]...........................................................................................32POSITIONNEMENT DANS UN FICHIER [START]......................................................................33LECTURE D'UN FICHIER [READ].............................................................................................34ECRITURE DANS UN FICHIER [WRITE]...................................................................................34

dépassement de capacité du fichier.................................................................................35RE-ECRITURE DANS UN FICHIER [REWRITE].........................................................................35SUPPRIMER UN ENREGISTREMENT [DELETE]........................................................................35OUVERTURE POSSIBLE..........................................................................................................36

FICHIER VSAM................................................................................................36

CODE RETOUR.......................................................................................................................36

E/S.................................................................................................................37

ARRET DE PROGRAMME [STOP]............................................................................................37LECTURE INFORMATION [ACCEPT]........................................................................................37ENVOI DE MESSAGE [DISPLAY].............................................................................................37

DONNEE.........................................................................................................38

DEFINITION............................................................................................................................38numéro-niveau...................................................................................................................38nom-donnée.......................................................................................................................38image.................................................................................................................................38image alphanumérique.....................................................................................................39image numérique..............................................................................................................39image numérique - EBCDIC...............................................................................................39image numérique d'édition...............................................................................................40image alphabétique...........................................................................................................41valeur initiale (optionnel)..................................................................................................41Représentation des données : USAGE..............................................................................42Valeur binaire : COMPUTATIONAL.....................................................................................42

WORKING STORAGE SECTION...........................................................................43

PRESENTATION......................................................................................................................43ZONE......................................................................................................................................43

ELEMENTAIRE.....................................................................................................................43GROUPEE...............................................................................................................................44

INDEPENDANTE..................................................................................................................44NOMBRE-NIVEAU................................................................................................................44Alignement mémoire.........................................................................................................44Redéfinition des zones......................................................................................................45Noms de condition.............................................................................................................45Expression RENAMES.........................................................................................................46

3

Page 4: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

PROCEDURE DIVISION.....................................................................................47

INTRODUCTION......................................................................................................................47

4

Page 5: Le langage Cobol

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 programme.

[DATE-COMPILED. commentaire]

Sécurité. [SECURITY. commentaire]

Remarques diverses. [REMARKS. commentaire]

ENVIRONMENT DIVISION.

CONFIGURATION SECTION.Nom de l'ordinateur sur lequel le source a été écrit.

[SOURCE-COMPUTER. nom [WITH DEBUGGING MODEM].]

Nom de l'ordinateur sur lequel l'objet a été créé.

[OBJECT-COMPUTER. nom-ordinateur

La taille mémoire est de "entier" unités "type" (WORDS, CHARACTERS, MODULES).

[MEMORY SIZE entier type]

[PROGRAM COLLATING SEQUENCE IS nom-alphabet].]

INPUT-OUTPUT SECTION.

5

Page 6: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

FILE-CONTROL.

Associe le fichier physique au fichier logique [classique, ou SYSIN (organe d'entrée) ou SYSOUT (organe de sortie)].

SELECT [OPTIONNAL] fichier-physique ASSIGN TO

fichier-logique

Type d'organisation (SEQUENTIAL, INDEXED, RELATIVE) séquentiel par défaut.

[RESERVE entier AREA]

Type d'accès (SEQUENTIAL, INDEXED, RELATIVE) séquentiel par défaut.

[ORGANIZATION type-organisation]

[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-format (F format fixe, V format varaible, U format indéfini).

FD fichier-physique [EXTERNAL] [GLOBAL]

[RECORDING MODE IS type-format]

Spécifie la taille d'un bloc, les limites inférieure et supérieure de la page étant entier1 et entier2 unités de type-bloc (RECORDS, CHARACTERS).

[BLOCK CONTAINS [entier1 TO] entier2 type-bloc]

Spécifie le nombre de caractères d'un enregistrement (simple commentaire).

[RECORD CONTAINS entier3 [TO entier4]]

[RECORD VARYING [FROM entier5]]

[RECORD [To entier6] CHARACTERS]

[DEPENDING ON nom-donnée]

Permet d'ajouter (STANDARD) ou de ne pas ajouter (OMITTED) selon "type-label" les "labels" définis le Sytème de Gestion de Fichier (SGF).

[LABEL RECORD type-label]

[VALUE OF FILE-ID nom-système]

Liste des enregistrements (en guise de commentaire).

[DATA RECORD nom-enreg1 [nom-enreg2] ...]

[LINAGE IS nom1 [FOOTING nom2]

[LINES TOP nom3]

[LINES BOTTOM nom4]]

[CODE-SET nom-alphabet]

[REPORT nom-état]

01 nom-enreg1.

...

WORKING-STORAGE SECTION.

77 nom-element PIC description [VALUE valeur].

6

Page 7: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

Il faut "littéral1" <= "littéral2". 88 nom-condition VALUE ARE littéral1

[THRU littéral2]

"nom-donnée1" est le nom de la donnée ou FILLER (permet de définir une variable à laquelle on n'a pas accès).

01 à 49 nom-donnée1 [EXTERNAL] [GLOBAL]

Redéfinit "nom2" avec la structure de "nom1".

[REDEFINES nom-donnée2]

[PIC description]

; Note : PIC peut être remplacé par PICTURE.

DECLARATIVES.

nom-section SECTION.

7

Page 8: Le langage Cobol

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

SyntaxeAffectation de "nom-donnée2 ..." à "nom-donnée1 ...", éventuellement avec arrondi.

ADD nom-donnée1 ... TO nom-donnée2

[ROUNDED] ...

Exécute "ordre1" en cas de dépassement de capacité.

[ON SIZE ERROR ordre1]

Exécute "ordre2" en cas de non dépassement de capacité.

[NOT SIZE ERROR ordre2]

Indique la fin de l'ordre ADD. [END-ADD]

Equivalence Pascal

9

Page 9: Le langage Cobol

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 de "expression".

= expression

Exécute "ordre1" en cas de dépassement de capacité.

[ON SIZE ERROR ordre1]

Exécute "ordre2" en cas de non dépassement de capacité.

[NOT SIZE ERROR ordre2]

Indique la fin de l'ordre COMPUTE. [END-COMPUTE]

DISPLAY

Définition

Affichage à l'écran

Affiche des données à l'écran.

Syntaxe 1

DISPLAY nom-donnée1 ...

10

Page 10: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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

SyntaxeINTO peut être remplacé par BY. DIVIDE nom-donnée1 INTO nom-donnée2

"nom-donnée3" := "nom-donnée1" / "nom-donnée2"

[GIVING nom-donnée3 [ROUNDED] ... ]

Exécute "ordre1" en cas de dépassement de capacité.

[ON SIZE ERROR ordre1]

Exécute "ordre2" en cas de non dépassement de capacité.

[NOT SIZE ERROR ordre2]

Indique la fin de l'ordre DIVIDIDE. [END-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

Page 11: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

Si "condition1" est vrai, alors "instruction1" est exécuté ou "instruction1" peut être NEXT SENTENCE (pointe sur l'instruction suivante, juste après le point).

IF condition1 instruction1

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-donnée1" * "nom-donnée2"

MULTIPLY nom-donnée1 BY nom-donnée2

"nom-donnée3" := "nom-donnée1" * "nom-donnée2"

[GIVING nom-donnée3]

[ROUNDED]

Exécute "ordre1" en cas de dépassement de capacité.

[ON SIZE ERROR ordre1]

Exécute "ordre2" en cas de non dépassement de capacité.

[NOT SIZE ERROR ordre2]

Indique la fin de l'ordre MULTIPLY. [END-DIVIDE]

OPEN

Définition

Ouverture de fichier

Ouverture du fichier "nom-fichier"

Syntaxeen 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

Traitement de paragraphe

Exécute une (ou des) procédure.

12

Page 12: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

SyntaxeTHRU permet l'enchaînement de l'exécution de plusieurs paragraphes avant de revenir à l'instruction qui suit PERFORM.

PERFORM [nom-procedure1 [THRU nom-procedure2]]

Continue jusqu'à ce que "condition" soit vrai, le test se faisant au moment "moment" (BEFORE, AFTER).

UNTIL condition [TEST moment]

[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".

SyntaxeINTO permet de transférer la valeur dans "nom-donnée".

READ nom-fichier [NEXT] RECORD [INTO nom-donnée]

Exécute "ordre1" si arrivé en fin de fichier.

[AT END ordre1]

Exécute "ordre2" si pas arrivé en fin de fichier.

[NOT AT END ordre2]

Indique la fin de l'ordre "READ". [END-READ]

SUBSTRACT

Définition

Soustraction

Effectue une soustraction.

Syntaxe"nom-donnée2" := "nom-donnée2" - "nom-donnée1 ..."

SUBSTRACT nom-donnée1 ... FROM nom-donnée2

"nom-donnée3" := "nom-donnée1" - "nom-donnée2"

[GIVING nom-donnée3]

[ROUNDED]

Exécute "ordre1" en cas de dépassement de capacité.

[ON SIZE ERROR ordre1]

Exécute "ordre2" en cas de non dépassement de capacité.

[NOT SIZE ERROR ordre2]

13

Page 13: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

Indique la fin de l'ordre SUBSTRACT.

[END-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".

SyntaxeFROM permet d'écrire "nom-donnée1" à la place de l'enregistrement "nom-enreg1".

WRITE nom-enreg1 [FROM nom-donnée1]

Fait sauter "nom-donnée2" lignes au moment "moment" (AFTER, BEFORE).

[moment ADVANCING nom-donnée2 LINE]

[moment ADVANCING nom-mnémonique]

Fait sauter une page au moment "moment" (AFTER, BEFORE).

[moment ADVANCING-PAGE]

Exécute "ordre" si arrivé en fin de page (concerne l'imprimante).

[END-OF-PAGE ordre]

Exécute "ordre" si pas arrivé en fin de page (concerne l'imprimante).

Note : END-OF-PAGE <=> EOP.

[NOT END-OF-PAGE ordre]

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

<

Définition

Opérateur <

14

Page 14: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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

IS

Définition

Retourne le signe

Syntaxe

15

Page 15: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

expression IS [NOT] signe

signe vaut (POSITIVE, NEGATIVE, ZERO).

16

Page 16: Le langage Cobol

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 DOBJET

la structure alternative : s'applique aux traitements NOEUD

F FEUILLE FEUILLE DOBJET 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

Page 17: Le langage Cobol

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 TABLEF 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

Page 18: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

RECHERCHERECHERCHE CLIENTEDITER

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.

19

Page 19: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

PERFORM D-RECHERCHE-CLIENT. 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

Page 20: Le langage Cobol

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ériquesPascal Cobol

VAR a : CHAR;

b : BOOLEAN;

c : STRING;

d : enumeration;

e : intervalle;

PIC X (ou zones groupées)

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)

EnregistrementsPascal Cobol

VAR WORKING-STORAGE SECTION.

21

Page 21: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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 champPascal 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)

TypesPascal 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.

TableauxPascal Cobol

VAR (pas d'équivalent direct)

t : ARRAY [1..100] OF STRING [10];

tab : RECORD 01 tab.

t : ARRAY [1..100] OF STRING [10]; 05 t OCCURS 100 PIC X(10).

Identification du tableau : TAB, TAB ou TAB.T

22

Page 22: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

Identification d'un élément de rang I : T (I) [IN TAB ]

m : ARRAY [1..10, 1..5] OF STRING [20]; (pas en COBOL)

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)

AffectationPascal 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 sortiesPascal 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

UntilPascal Cobol

WHILE condition DO PERFORM nom_paragraphe

instructions; UNTIL condition

nom-paragraphe-1.

(instructions)

nom-paragraphe-2.

23

Page 23: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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

La division ENVIRONMENT décrit physiquement les fichiers utilisés.

DATA DIVISION

La division DATA :

réserve la mémoire

24

Page 24: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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'écritureColonne 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.

Déclaration d'enregistrement [FD]

FD (File Definition) décrit les fichiers.

Nom du fichier utilisé dans le programme, définit avec SELECT.

FD nom-fichier

25

Page 25: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

Type de longueur des 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.

[RECORD MODE IS mode]

Longueur de l'enregistrement en caractères.

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)

[RECORD CONTAINS entier1 [TO entier2] CHARACTERS]

Taille des blocs physiques, afin de grouper des enregistrements.

Ne concerne pas les enregistrements de longueur indéfinie.

[BLOCK CONTAINS entier3

Indique le nombre 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

[TO entier4] CHARACTERS

Indique le nombre de caractères par bloc.

/RECORD]

Indique le type de labels. LABEL RECORD

Indique que le label du fichier est 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).

IS STANDARD/

Indique que le fichier n'a pas de label.

OMITTED

Indique le (ou les) nom(s) de la zone tampon.

[DATA RECORD IS nom-enreg1 [nom-enreg2] ...].

26

Page 26: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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 lecture.

INPUT/

Indique que le fichier est en écriture.

OUTPUT

Nom du fichier utilisé dans le programme, défini avec SELECT

nom-fichier-1 [nom-fichier2 ...]

Fermeture [CLOSE]

CLOSE :

ferme un (ou des) fichier(s)

vérifie les labels de fin

CLOSE

C'est le nom du fichier utilisé dans le programme, défini avec SELECT.

nom-fichier1

WITH LOCK s'applique aux fichier sur bande. Cette option permet de décharger et de libérer la bande.

[WITH LOCK] [nom-fichier-2 ...]

Lecture [READ]

READ :

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 l'enregistrement lu :

dans la variable indiquée par DATA RECORD et

dans la variable "nom-donnée"

[ INTO nom-donnée ]

27

Page 27: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

Exécuter les instructions indiquées lorsque la fin de fichier est atteinte.

AT END instructions.

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.

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

28

Page 28: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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 ]

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

29

Page 29: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

"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

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

optionValeur 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.

30

Page 30: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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

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é

31

Page 31: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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,¦

¦¦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 ].

32

Page 32: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

_ 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.

33

Page 33: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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]

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.

34

Page 34: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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 ].

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 / ACCESS

INPUT OUTPUT I-O EXTEND

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

35

Page 35: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

95 DLBL absente.

36

Page 36: Le langage Cobol

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 par défaut est l'imprimante.

37

Page 37: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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

Cette définition doit tenir en 30 caractères au maximum.

Il existe quatre types d'images :

image alphanumérique

image numérique

38

Page 38: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

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.

39

Page 39: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

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.

40

Page 40: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

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

41

Page 41: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

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é.

42

Page 42: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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

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)

43

Page 43: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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 :

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.

44

Page 44: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

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 ...

45

Page 45: Le langage Cobol

Bruno Delb http://www.brunodelb.com Date : 12/02/2001

Le langage Cobol

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.

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.

46