33
IEPSCF Uccle Section informatique Langage orienté gestion D’après les notes prises au cours de Mme Dominguez 2002 Feyaerts prod

IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

Embed Size (px)

Citation preview

Page 1: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

IEPSCF Uccle Section informatique

Langage orienté gestion

D’après les notes prises au cours de

Mme Dominguez

2002 Feyaerts prod

Page 2: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 2 Feyaerts Prod

TABLE DES MATIÈRE 1. Structure d'un programme Cobol .................................................................................2

Convention.......................................................................................................................4 Environnement .................................................................................................................4

2. Les déclarations .............................................................................................................5 Les zones.........................................................................................................................5 Les sous zones ................................................................................................................5 Les variables....................................................................................................................5 Les données.....................................................................................................................5 Les tables.........................................................................................................................5

3. Les instructions ..............................................................................................................5 L'exécution .......................................................................................................................6 L'affichage........................................................................................................................6 Instructions arythmétiques ...............................................................................................6

L'addition ......................................................................................................................6 La multiplication............................................................................................................7 La soustraction .............................................................................................................7 La division.....................................................................................................................7

Les instructions de transfert .............................................................................................8 La lecture......................................................................................................................8 L'affectation à une variable...........................................................................................8

Les instructions de test ....................................................................................................8 L'alternative ..................................................................................................................8

4. L'arithmétique signée.....................................................................................................9 Introduction ......................................................................................................................9 Les nombres réels Problème de la virgule......................................................................9

Rappel ..........................................................................................................................9 Méthode........................................................................................................................9

L'arithmétique Signée ......................................................................................................9 Rappel ..........................................................................................................................9 Méthode......................................................................................................................10

Et pour plus de précision !..............................................................................................10 Le décimal condensé..................................................................................................10 La virgule flottante ......................................................................................................10

Pour plus de rapidité ......................................................................................................10 Déclaration en binaire pur ..........................................................................................10

5. Les caractères d'insertions .........................................................................................11 Introduction ....................................................................................................................11 Les zones d'édition ........................................................................................................11 Les zones numériques...................................................................................................11

Le signe décimal : la virgule .......................................................................................11 Le signe......................................................................................................................11 Le signe monétaire .....................................................................................................12

Les caractères de remplacement...................................................................................12 6. Les fichiers standards..................................................................................................13

Description du ficher physique.......................................................................................13 Description du ficher physique.......................................................................................14 Ouverture, lecture, écriture, fermeture de fichiers..........................................................14

Ouverture....................................................................................................................14 Lecture........................................................................................................................14 Ecriture .......................................................................................................................14 Fermeture ...................................................................................................................15

Un exemple ....................................................................................................................16 La clause redefines........................................................................................................17 la clause justify...............................................................................................................18

Page 3: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 3 Feyaerts Prod

La clause corresponding ................................................................................................18 Conséquence importante. ..........................................................................................18

7. Les tables ......................................................................................................................19 Tables à 1 dimension.....................................................................................................19

Accès / affichage ........................................................................................................19 Tables à 2 dimensions (ou tableaux) ..........................................................................19

Déclaration table de structure.....................................................................................19 Déclaration d'une structure de tableau.......................................................................20 Accès et utilisation......................................................................................................20

Initialisation d'une table..................................................................................................20 A la compilation ..........................................................................................................20 Pendant le traitement .................................................................................................21

Les tables indexées .......................................................................................................22 Déclaration d'index .....................................................................................................22 Déclaration d'un index indépendant.(Qui n'est pas associé à une table) ...................22 Sauvegarde d'un index...............................................................................................22 Liste des comparaison entre index.............................................................................22 Manipulation d'index...................................................................................................22

L'instruction set .............................................................................................................23 Addition / incrémentation d'index................................................................................23

La recherche séquentielle en cobol. ..............................................................................23 La recherche dichotomique en cobol. ............................................................................23

8. Et pour terminer… ........................................................................................................25 L'instruction compute. ....................................................................................................25 L'instruction evaluate .....................................................................................................26 La clause rounded..........................................................................................................26 La clause size error........................................................................................................26

9. La fusion de fichiers.....................................................................................................27 Méthode......................................................................................................................27 Exemple......................................................................................................................27 Exercice......................................................................................................................29

Page 4: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 4 Feyaerts Prod

1. STRUCTURE D'UN PROGRAMME COBOL 4 divisions : Identification Division Permet l’identification du programme et de son auteur. Environment division Tout ce qui est extérieur au programme : on y déclare

les fichiers de données. Data division Partie la plus longue. On y déclare les variables. C’est

l’inconvénient du Cobol… il faut tout déclarer.

Procedure division. Instruction du traitement des données. Exemple

IDENTIFICATION DIVISION. PROGRAM-ID RECTANGL. AUTHOR. FEYAERTS. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 LO PIC 99 VALUE 18. 77 LA PIC 99 VALUE 15. 77 PER PIC 99. 77 SURF PIC 999. PROCEDURE DIVISION. PROG. ADD LO LA GIVING PER. MULTIPLY 2 BY PER. MULTIPLY LA BY LO GIVING SURF. DISPLAY "PERIMETRE = " PER. DISPLAY "SURFACE = " SURF. STOP RUN.

CONVENTION Toutes les lignes se terminent par un point Tout le programme est écrit en Majuscule On indique le titre de la division même si elle ne comporte rien.

ENVIRONNEMENT On utilise l’environement Roscoe Les tabulations. De 0 à 7 vide A partir de 8 déclaration des divisions des sections des fichiers des données des paragraphes A partir de 12 Réservé aux Instructions On peut écrire jusqu’à la colonne 72. Au delà plus rien n’est pris en compte par le compilateur. on s’arrête au dernier mot complet et on continue à la ligne suivante colonne 12.

Page 5: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 5 Feyaerts Prod

2. LES DÉCLARATIONS

LES ZONES 77 Zone indépendante pour les variables du programme 01 Zone des Structures Fichiers ou tables.

LES SOUS ZONES Exemples :

01 ENR. 02 NOM PIC X(20) 02 DATENAIS 03 JJ PIC 99 03 MM PIC 99 03 AA PIC 00 02 ADRESS 03 NUM PIX X(10) 03 RUE PIC X(20)

Jamais de PIC en 01. La sous zone porte un numéro supérieur mais pas nécessairement immédiatement supérieur. Les Sous zones de même niveau ont le même numéro

LES VARIABLES Toujours dans la WORKING-STORAGE de la DATA DIVISION Format : Leur nom débutent toujours par une lettre et ne comportent pas d’espace trait d’union permis pas de caractères spéciaux. Variables numériques: Cadrées à droite permettent les calculs. 77..NOMVAR PIC 9(longueur en chiffre) [VALUE Valeur initiale] .

Variables Alphanumérique : Cadrées à gauche 77 NOMVAR PIC X(Nb de caractères) [VALUE "Valeur"].

RMQ Longueur maximale 16

LES DONNÉES Immédiatement sous les variables 01 NOMFICHIER. 02 NOMVAR1 PIC X/9(longueur). 02 NOMVAR2 PIC X/9(longueur).

LES TABLES Immédiatement sous les données 01 TAB. 02 ELEM OCCURS (Nb d'éléments). 03 TNOMVAR1 PIC X/9(longueur). 03 TNOMVAR2 PIC X/9(longueur).

3. LES INSTRUCTIONS Les dernières variables sont dites réceptrices car elles reçoivent le résultat de l'instruction. K = constante ou littéral Var = Ident ou Variable

Page 6: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 6 Feyaerts Prod

L'EXÉCUTION Convention : § = paragraphe PERFORM §1 [THROUGH/THRU § 2]. PERFORM §1 [THROUGH/THRU § 2] K/Var TIMES. PERFORM §1 [THROUGH/THRU § 2] UNTIL condition. Exemple : PROG. PERFORM DEBUT. PERFORM TR1 UNTIL ENR = "*". PERFORM INTER. PERFORM TR2 2 TIMES. PERFORM FIN. STOP RUN.

STOP RUN Indique au programme qu'il doit s'arrêter Exemple 2 : PROG. PERFORM A PERFORM B UNTIL ENR "*". PERFORM C. STOP RUN A. B. PERFORM D. PERFORM E 3 TIMES. PERFORM F C. D. ...

L'AFFICHAGE DISPLAY K/Var1 [K2/Var2] ... . Les constantes sont affichées comme telle Seul le contenu des variables est affiché Exemple : DISPLAY "J'ai_"age"_ans" J'ai 024 ans

INSTRUCTIONS ARYTHMÉTIQUES

L'addition 1ère forme ADD K/Var [K2/Var2] ... TO Var3 [Var4].... Le contenu de la variable réceptrice est implémenté du résultat de l'addition. Exemple ADD A TO B. B = B + A ADD A B TO C. C = C + (A + B) ADD A TO B C. C= C + A & B = B + A

Page 7: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 7 Feyaerts Prod

2ème Forme ADD K/Var [K2/Var2] ... GIVING Var3 [Var4].... Le contenu de la variable réceptrice est écrasé et reçoit le résultat de l'addition. C'est l'addition traditionnelle Exemple ADD A TO B GIVING C. C = A + B

La multiplication 1ère forme MULTIPLY K/Var BY Var2 [Var3].... Le contenu de la variable réceptrice est implémenté du résultat de la multiplication. Exemple MULTIPLY A B BY C C = (A + B) * A MULTIPLY A BY B C C = C * A B = B * A RMQ pour A = A * B * C on a besoin de deux étapes MULTIPLY B BY A MULTIPLY C BY A 2ème Forme MULTIPLY K/Var BY K2Var2 GIVING Var3 [Var4].... Le contenu de la variable réceptrice est écrasé et reçoit le résultat de la multiplication. Exemple MULTIPLY A BY B GIVING C C= A * B

La soustraction 1ère forme SUBTRACT K/Var [K2/VAR2]... FROM Var3 [Var4].... Exemple SUBTRACT A FROM B A= A – B SUBTRACT A B FROM C C = C – (A + B) 2ème forme SUBTRACT K/Var [K2/VAR2]... FROM Var3... GIVING Var4. C'est la soustraction traditionnelle Exemple SUBTRACT A FROM B GIVING C C = A – B

La division 1ère forme DIVIDE K/Var INTO Var2 [Var3].... Le diviseur précède La zone réceptrice est le dividende Exemple DIVIDE A INTO B B = B : A

Page 8: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 8 Feyaerts Prod

2ème forme DIVIDE K/Var BY Var2 GIVING Var3 [Var4] ... Le diviseur suit Exemple DIVIDE B BY C GIVING A. A = B : C RMQ on peut aussi traduire DIVIDE C INTO B GIVING A. Mais alors le diviseur précède

LES INSTRUCTIONS DE TRANSFERT

La lecture ACCEPT Ident . Cette instruction lit séquentiellement les enregistrements d'un fichier et vient en ranger une copie dans ident. Ident que l'on aura pris soin de déclarer et dont on aura décrit l'image. Exemple ACCEPT ENR.

L'affectation à une variable MOVE K/Var TO Var2 [Var3].... La constante ou le contenu de la variable sera transféré dans la ou les variables réceptrice(s). La règle de cadrage est bien sur d'application le cadrage dépend du gabarit (de l'image). Exemple MOVE 0 TO CPT. CPT = 0 MOVE A TO B C. B = A et C = A

LES INSTRUCTIONS DE TEST

L'alternative IF condition THEN Série d'instructions 1 [ELSE Série d'instruction 2] . Ou IF condition THEN Série d'instructions 1[ ELSE Série d'instruction 2] END-IF. Exemple : IF CPT = 0 pas de point THEN display "fichier vide" pas de point ELSE DISPLAY "non vide". point = fin de IF Remarque le ELSE est facultatif si la 2ème branche de l'alternative est vide; dans ce cas le THEN est aussi facultatif.

Page 9: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 9 Feyaerts Prod

4. L'ARITHMÉTIQUE SIGNÉE.

INTRODUCTION La plupart de langages ont été développes aux Etats-Unis qui utilisent le point comme séparateur décimal et la virgule comme séparateur de millier.

Monde francophone Monde anglophone 11.000.000 11,000,000 3,1416 3.1416

On peut configurer la ENVIRONMENT DIVISION de façon à contourner ce problème ainsi que le signe de la monnaie. en y incluant ENVIRONMENT DIVISION

CONFIGURATION SECTION SPECIAL-NAMES. DECIMAL-POINT IS COMMA. CURRENCY SIGN IS €.

LES NOMBRES RÉELS Problème de la virgule

Rappel En cobol les nombres sont stockés en mémoire sous forme décimal codé binaire soit un Octet par chiffre. Exemple 1950 est codé F1 F9 F5 F0

Méthode On doit d'abord déclarer travailler avec des nombres réels par une variable sur laquelle on peut effectuer des calculs (avec une virgule virtuelle notée V). Ensuite prévoir une variable uniquement pour afficher le chiffre. Sur cette variable, on ne peut effectuer de calculs. DATA DIVISION. WORKING-STORAGE SECTION. 77 NOMVAR PIC 99V99. nomvar est codé sur 4 octets (1 octet par chiffre) 77 NOMVARAFF PIC 99,99. nomvaraff est codé sur 5 octets (1 / chiffre +1 virgule) … MOVE 15,25 TO NOMVAR MOVE NOMVAR TO NOMVARAFF. DISPLAY NOMVARAFF.

En ce qui concerne le cadrage il est centré sur la virgule 77 CPT PIC 99V99 MOVE 234,375 TO CPT MOVE CPT TO CPTAFF DISPLAY CPTAFF 34,37

L'ARITHMÉTIQUE SIGNÉE

Rappel En cobol les nombres signés sont stockés en mémoire sous forme décimal étendu codé binaire soit un Octet par chiffre. Exemple 1950 est codé F1 F9 F5 C0 C pour + Exemple -950 est codé F9 F5 d0 D pour -

Page 10: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 10 Feyaerts Prod

Méthode On doit d'abord déclarer travailler avec des nombres signés par une variable sur laquelle on peut effectuer des calculs. au moyen du signe S Ensuite prévoir une variable uniquement pour afficher le chiffre. Sur cette variable, on ne peut effectuer de calculs. DATA DIVISION. WORKING-STORAGE SECTION. POS PIC S9999. codé sur 4 octets POSAFF PIC +9999. codé sur 5 octets NEG PIC S999. NEGAFF PIC –999. MOVE +1678 TO POS. codé F1 F6 F7 C8 MOVE POS TO POSAFF. MOVE –123 TO NEG. MOVE NEG TO NEGAFF. DISPLAY POSAFF NEGAFF. +1678 -123

ET POUR PLUS DE PRÉCISION ! Par défaut le cobol utilise le cade décimal étendu des plus gourmand en espace mémoire.

Le décimal condensé est plus économe On le déclare comme suit : 77 DECOND PIC 9(3) COMP-3 VALUE 423 - La variable DECOND est déclarée - Une zone de 3 octets [9(3)] lui est réservée.(L/2 )+1 - Elle est codée en décimal condensé COMP-3 - En mémoire 423 est donc stocké sous forme de 00 42 3C - En mémoire - 423 est stocké 00 42 3C

La virgule flottante Pour encore plus de précision. Se déclare comp-1 en simple précision sur 8 octets comp-2 en double précision sur 18 octets

POUR PLUS DE RAPIDITÉ

Déclaration en binaire pur Le cobol traduit du décimal binaire hexadécimal pour le stockage des données en mémoire. Ensuite de l'hexadécimal binaire décimal pour l'affichage. La déclaration en binaire permet d'éviter 2 étapes binaire hexadécimal binaire On l'utilise pour les variables sur lesquelles on effectue beaucoup de calcul et dont les résultats intermédiaires ne doivent pas être affichés. Par exemple les compteurs. CPT PIC 9(3) COMP VALUE 0. CPTAFF PIC 9(3). … DISPLAY CPTAFF 100

Page 11: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 11 Feyaerts Prod

5. LES CARACTÈRES D'INSERTIONS

INTRODUCTION Pour plus de lisibilité, il peut être utile de pouvoir insérer des caractères zones d'édition zones numériques B insère un blanc (espace) , utile pour les décimale + indique le signe + ou - / utile pour les dates . - indique - si nég 0 insère un 0 (zéro) $ currency

LES ZONES D'ÉDITION WORKING-STORAGE SECTION. 77 A PIC X(7) VALUE BONJOUR. 77 AED PIC XXXBXXXX. 77 DAT PIC X(6)99 VALUE 280202. 77 DATED PIC XX/XX/XX. . . . DISPLAY AED. BON JOUR DISPLAY DATED. 28/02/02

LES ZONES NUMÉRIQUES

Le signe décimal : la virgule D'abord il faut déclarer le nouvel environnement dans la CONFIGURATION SECTION de l'ENVIRONMENT DIVISION. IDENTIFICATION DIVISION. PROGRAM-ID NOMPROG. AUTHOR. MOI. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMA. CURRENCY SIGNE IS "€" ne pas oublier les " car € est alphanumérique DATA DIVISION. WORKING-STORAGE SECTION. 77 PRIX PIC 9(3)V99 VALUE 103,45. 5 octets en mémoire 77 PRIXED PIC 9(3),9(2). 6 octets en mémoire . PROCEDURE DIVISION. DISPLAY PRIXED. 103,45

Attention les 2 zones doivent être compatibles sous peine de troncature. et le V doit avoir la même place que la, sinon le résultat d'une opération peut apparaître faux.

Le signe S déclare un signe + permet l'affichage de + et – - n'autorise l'affichage que du signe - pour les valeurs négatives. DATA DIVISION. WORKING-STORAGE SECTION. 77 AA PIC S9(3). 3 octets en mémoire 77 AAED PIC +9(3). 4 octets en mémoire 77 BB PIC S9(2) VALUE -15. 2 octets en mémoire F1D5

Page 12: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 12 Feyaerts Prod

77 BBED PIC -9(2). 3 octets en mémoire 77 CC PIC S9(4) VALUE 25. 4 octets en mémoire F0F0F2C5 77 CCED PIC +9(4). 5 octets en mémoire . PROCEDURE DIVISION. ADD CC TO BB GIVING AA. MOVE AA TO AAED. FOF1F0 MOVE BB TO BBED. MOVE CC TO CCED. DISPLAY AAED. 010 DISPLAY BBAED. -15 DISPLAY CCAED. 25

Le signe monétaire D'abord il faut déclarer le nouvel environnement dans la CONFIGURATION SECTION de l'ENVIRONMENT DIVISION. IDENTIFICATION DIVISION. PROGRAM-ID NOMPROG. AUTHOR. MOI. ENVIRONMENT DIVISION. CONFIGURATION SECTION SPECIAL-NAMES. DECIMAL-POINT IS COMMA. CURRENCY SIGN IS "€" ne pas oublier les " car € est alphanumérique DATA DIVISION. WORKING-STORAGE SECTION. 77 PRIX PIC S999V99 VALUE 100,25. 5 octets en mémoire 77 PRIXED PIC +€9(3),9(2). 8 octets en mémoire . PROCEDURE DIVISION. DISPLAY PRIXED. +€100,25 Attention : le signe + ou – doit toujours être à gauche du signe monétaire. On peut donc avoir

+€ NOMVAR +NOMVAR€ NOMVAR+€

mais pas €NOMVAR+

LES CARACTÈRES DE REMPLACEMENT. Z Remplace les 0 non significatifs par des blancs * Remplace les 0 non significatifs par des * $ ou € Remplace les 0 non significatifs par un $ ou € + Remplace les 0 non significatifs par un + ou un - - Remplace les 0 non significatifs par un – si la valeur est négative 77 VAL PIC 9(5) VALUE 10. 5 octets en mémoire 77 VALED1 PIC ZZZZ9(2). 10 77 VALED1 PIC ZZ9(3). 010 77 VALED1 PIC ***9(2). ***10

Page 13: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 13 Feyaerts Prod

77 VALED1 PIC **9(3). **010 77 VALED1 PIC ZZZZZ9. 10 77 VALED1 PIC *****9. ***10 Les caractères de remplacement n'affectent pas l'affichage de valeurs significative En règle générale, on laisse deux pic 9 de part et d'autre de la virgule. Malgré tout le 0 qui précède la virgule est toujours significatif. 77 VAL PIC 99V99 VALUE 4,05. 4 octets en mémoire 77 VALED1 PIC ZZ,9Z. 4,05 77 VALED1 PIC 9(3),9ZZ. 004,05 77 VALED1 PIC **9,**. **4,05 77 PRIX PIC 9(6) VALUE 32. 4 octets en mémoire 77 PRIXED PIC €€€9(3). €032 77 PRIXED PIC €€€€€9. €32 77 PRIXED PIC €(6). €32 RMQ avec €(5) on aura un warning.

N'importe où à droite à gauche Insertion

B / 0 , . + - $ € + - $ € Remplacement

Z * $ €

6. LES FICHIERS STANDARDS Les fichiers physiques sont un ensemble de données stockées sur un support Les fichiers logiques sont un ensembles de données et leur description (quelles sont-elles où sont-elles, sous quelle forme.) ETAPES il faut :

1. Décrire le(s) fichier(s) physiques et sa (leur) configuration dans L'ENVIRONMENT DIVISION.

2. Décrire le(s) fichier(s) logiques et sa (leur) format d'enregistrement dans la DATA DIVISION.. avant la WORKING-STORAGE SECTION.

3. Utiliser, traiter les données lire et écrire ouvrir fermer dans la PROCEDURE DIVISION..

DESCRIPTION DU FICHER PHYSIQUE IDENTIFICATION DIVISION. PROGRAM-ID NOMPROG. AUTHOR. MOI. ENVIRONMENT DIVISION. INPUT OUTPUT SECTION. avant ou après SPECIAL-NAMES ???. FILE CONTROL. SELECT NOMFICH ASSIGN TO DDIN UT – S - DDIN.

Où "NOMFICH" est un nom que l'on donne au fichier et qui sera utilisé par le programme. "DDIN" fait référence à la carte JCL. "UT" signifie Unité lente (UR = Unité rapide) "S" signifie fichier séquentiel

Page 14: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 14 Feyaerts Prod

La dernière ligne du programme sera la carte JCL qui dira au programme : quand tu vois nomfich va voir le nom du fichier physique. (carte JCL = ligne de JCL) //GO.DDIN DD DSN=NOMPHYSIQUE,DIST=DISP=SHR La carte JCL ne se termine pas par un point Respecter les espace !!!

DESCRIPTION DU FICHER PHYSIQUE data division. file section. FD NOMFICH RECORDING MODE F LABEL RECORD STANDARD.

Où FD signifie File Description. Où NOMFICH est le nom que l'on a donné au fichier. MODE F signifie que les enregistrements ont une longueur fixe. Immédiatement sous le FD suit la déclaration du fichier. Attention

OUVERTURE, LECTURE, ÉCRITURE, FERMETURE DE FICHIERS.

Ouverture Avant toute action sur un fichier lecture ou écriture il faut l'ouvrir et signaler ce que l'on veut y faire cela se fait dans la PROCÉDURE DIVISION. : INPUT pour le lire OUTPUT pour y écrire OUTPUT-OUTPUT pour une mise à jour. OPEN INPUT NOMFICH1 OUTPUT NOMFICH2 I-O NOMFICH3 .

Lecture Une fois le fichier ouvert on peut le lire. Il faut le lire jusqu'à la fin et signaler au programme qu'on est arrivé à la fin du fichier. 77..EOF PIC 9 COMPT VALUE 0.. dans la data division . . . READ NOMFICH AT END MOVE 1 TO EOF. Après AT END pas d'alternative

seulement instruction impérative.

Ecriture WRITE ENRFICH. Ecrit un enregistrement WRITE ENRFICH AFTER IDENT/LITT LINES. Ecrit un enregistrement après avoir sauté un nombre de ligne définit par ident(variable) ou par littéral (constante). WRITE ENRFICH BEFORE IDENT/LITT LINES Ecrit un enregistrement puis saute un nombre de ligne définit par ident(variable) ou par littéral (constante). WRITE ENRFICH AFTER IDENT/LITT PAGES. Ecrit un enregistrement après avoir sauté un nombre de page définit par ident(variable) ou par littéral (constante). WRITE ENRFICH BEFORE IDENT/LITT PAGES Ecrit un enregistrement puis saute un nombre de page définit par ident(variable) ou par littéral (constante).

Page 15: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 15 Feyaerts Prod

Fermeture CLOSE NOMFICH liste de tous les fichiers.

Page 16: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 16 Feyaerts Prod

UN EXEMPLE Input fichier profs. ANDS.READ.PROFS MATR NOM AN SX ADR CP LOC total 4CH 20X 2CH 1X 60X 4CH 30X 121 Output imprimez la liste des profs de plus de 40 ans ainsi que leur nombre. selon le format 2 lignes "LISTE DES PROFS" ( = titre centré) *** souligné 2 lignes liste des profs 2 lignes ligne continue (----- total des profs. Sachant qu'il y a 80 colonnes et lignes par page. IDENTIFICATION DIVISION. PROGRAM-ID. PROFS. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT PROFS ASSIGN TO DDIN. SELECT IMPRIM ASSIGN TO DDOUT. DATA DIVISION. FILE SECTION. 2 fichiers physiques : profs et imprim FD PROFS RECORDING MODE F LABEL RECORD STANDARD.profs = fichier physique 01 ENRPROFS. enrprofs = fichier logique. 02 MATR PIC 9(4). on aurait pu mettre filler. 02 NOM PIC X(20). 02 AN PIC 99. 02 FILLER PIC X (95). 121 – 4 – 20 – 2 = 95 FD IMPRIM MOD F. 01 ENROUT PIC X (80). WORKING-STORAGE SECTION. Variables pour le traitement & l'affichage 01 LIGNTIT. 1ère ligne à imprimer 02 FILLER PICX (32). 02 TIT PIC X(15) VALUE "LISTE DES PROFS". 15 car 02 FILLER PIC X(33) 32 –15 - 33 = 80 pour centrer sur 80 col. 01 LIGNTITSOUL. ligne qui souligne le titre 02 FILLER PICX (32). 02 TITSOUL PIC X(15) VALUE ALL "*". 15 car 02 FILLER PIC X(33). 32 –15 - 33 = 80 pour centrer sur 80 col. 01 LIGNENR. ligne qui affiche les noms 02 FILLER PIC X(32). 02 NOMAFF PIC X(20). 02 FILLER PIC X(28). 01 LIGNE SOUL. ligne de soulignement avant le total 02 FILLER PIC X (80) VALUE ALL "-". 01 LIGNTOT.. ligne qui affiche le total 02 FILLER PIC X(69). 02 . . . PIC X (8) VALUE "TOTAL".Le total est affiché en fin de ligne 02 TOTAFF PIC 9 (3) VALUE ZZ9. sans 0 non significatifs. 77 TOT PIC (9)3 VALUE 0. 77 EOF PIC 9 COMP VALUE 0. variable binaire test de fin de fichier. PROCEDURE DIVISION. Enfin le traitement ! PROG. PERFORM DEBUT. PERFORM TRTPROFS UNTIL EOF = 1. PERFORM FIN. STOP RUN. DEBUT. OPEN INPUT PROFS OUTPUT IMPRIM. ouverture des fichiers MOVE LIGNTIT TO ENROUT. ) WRITE ENROUT AFTER 2. OU ) =WRITE ENROUT FROM LIGNTIT AFTER 2 WRITE ENROUT FROM LIGNTITSOUL AFTER 2. Ecriture du titre READ PROFS AT END MOVE 1 TO EOF. lecture jusqu'à la fin du fichier.

Page 17: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 17 Feyaerts Prod

TRTPROFS. IF AN>40 THEN PERFORM IMPRESSION. ELSE NEXT SENTENCE. READ PROFS AT END MOVE 1 TO EOF. lecture jusqu'à la fin du fichier. FIN. WRITE ENROUT FROM LIGNSOUL AFTER 2. MOVE TOT TO TOTAFF. WRITE ENROUT FROMLIGNTOT AFTER 2. CLOSE PROFS IMPRIM. fermeture des fichier Fin du 1er étage. IMPRESSION. ADD 1 TO TOT. incrémentation du compteur de pros MOVE NOM TO NOMAFF. WRITE ENROUT FROM LIGNENR. / //GO.DDIN DD DSN=ANDS.READ.PROFS, DISP=SHR Carte cobol //GO.DDOUT DD SYSOUT=Z,OUTLIM=100 où z est l'écran et 100 le nombre de fois que peut tourner le pgm s'il boucle //

LA CLAUSE REDEFINES Permet de redéfinir une zone d'un data type en un autre data type et une structure en une autre structure. A la condition de se situer immédiatement sous la 1ère définition et que la zone redéfinie soit exactement de la même taille. Exemple : 77 A PIC 9(3) 77 B REDEFINES A PIC X (3)

En mémoire il n'y a qu'une fois la valeur de A. • Sur A on peut calculer et l'affichage cadrera à droite. • Sur B on ne peut calculer et l'affichage cadrera à gauche.

Utilité :Un seul fichier peut contenir des enregistrements. on les reconnaît par une variable initiale. Exemple : COD NUMMED NOMPAT ADRESSE NUMSIS TEL total PIC X PIC X(9) PIC X(20) PIC X(60) PIC X(12) PIC 9(9) 111 COD NUM-SOIN PRIX-SOIN DATE-SOIN total PIC X PIC X(8) PIC 9(4),9(2) PIC X(8) 88 111

Les enregistrements se suivent chacun occupe 111 octets, ils contiennent soit les références d'un patient, soit les références des soins donnés à ce patient. Le type de donnée est reconnaissable par la 1ère variable COD qui est soit 1 (ref patient) soit 2 (ref soins) ou encore 3 à la fin du ficher Dans la pratique on fait dons une rupture sur la variable COD

Page 18: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 18 Feyaerts Prod

LA CLAUSE JUSTIFY MOVE K/Var TO K/Var JUST. Utilité : permet l'affichage cadré à droite d'une variable cadrée à gauche mais doit être défini lors de la déclaration. 01 ZONE A. 02 AA PIC X(5) VALUE "MER". |M|E|R|Ђ|Ђ| 02 BB PIC X(5) VALUE "MAR" JUST. |M|A|R|Ђ|Ђ| . . . MOVE AA TO BB DISPLAY BB. ЂЂMAR

Corollaire. permet de convertir une variable alphanumérique en numérique. Si une telle variable comporte une lettre il faut tronquer par le biais des images. 01 ZONE B. 02 BA PIC X(5) VALUE "1250" |1|2|5|0|Ђ| 02 CC PIC X(5) JUST. |Ђ|Ђ|Ђ|Ђ|Ђ| 02 DD REDEFINES CC PIC 9(5).

LA CLAUSE CORRESPONDING Utilité permet de déplacer une ou plusieurs sous-zone d'une structure dans une autre structure. 01 A. 01 B. 02 Z1 PIC XX. 03 Z1 PIC XX. 02 Z2 PIC(X(3). 03 N1 PIC(9(4). 02 N1 PIC99. 03 COCO PC XX. . . . MOVE CORR A TO B.

Condition d'utilisation : Les variables doivent porter le même nom et avoir le même niveau d'ordre (pas pour autant le même numéro.

Lors du move le cadrage se fait à gauche.

Conséquence importante. Dans un même programme plusieurs variables portent le même nom. mais appartiennent à des structure différentes.

Quand on veut y accéder il faut en spécifier la structure. MOVE 10 TO N1 IN/FROM A.

Exemple : NOM PRENOM DN SX CP PROF ONSS 20 10 2 1 4 20 8

Output : NOM *** AGE*** CP***ONSS des enseignants 01 INPUT. 02 NOM PIC X(20). 02 PRE PIC X(10). 02 DN PIC 99. 02 SX PIC X. 02 PROF PIC X(20). 02 ONSS PIC X8(). 01 OUTPUT. 02 NOM PIC X(20). 02 FILLER PIC X(3) VALUE "***". 02 AGE PIC 99.

Page 19: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 19 Feyaerts Prod

02 FILLER PIC X(3) VALUE "***". 02 CP PIC X(4). 02 FILLER PIC X(3) VALUE "***". 02 ONSS PIC X'8). . . . PROCEDURE DIVISION. IF PROF = "ENSEIGNANT" THEN SUBTRACT DN FROM 102 GIVING AGE MOVE CORR INPUT TO OUTPUT WRITE ENROUT FROM OUTPUT. STOP RUN

7. LES TABLES (Table = Mot réservé en cobol) Le premier indice est 1 <> au "C"

TABLES À 1 DIMENSION DÉCLARATION dans la WORKING STORAGE division. 01 NOMTABLE. 02 ELT OCCURS (DIM). Occurs toujours sous le niveau 01; dim = nb d'élément 03 TNOM PIC X(30). de la table 03 TADR PIC X(50). 03 TDAT PIC 9(6).

TNOM TADR TDAT ELT (1) 1 2 TADR(1) =ZONE 3

Par commodité , par convention et pour ne pas confondre on fait précéder les noms de zone(champ) par un T Dans la mémoire il est bien évident que les éléments se suivent TNOM(1) TADR(1) TDAD(1) TNOM(2) TADR(2) TDAT(2) TNOM(3) TADR(3) ETC

Accès / affichage DISPLAY ELT(I). DISPLAY TADR(1)

TABLES À 2 DIMENSIONS (ou TABLEAUX)

Déclaration table de structure 01 NOMTABLE2. 02 LIGNE OCCURS (10). 04 ELT OCCURS (9). TVAR PIC 9(2). TVAR2 PIC.. ETC . . .

Un élément est donc désigné par 2 indice. L'usage veut que le premier soit la ligne l'autre la colonne.

1 2 3 4 5 6 7 8 9 1 LIGNE(2) 2 3 ELT(4,5) 4 5 6 7 8 9 10

Page 20: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 20 Feyaerts Prod

Déclaration d'une structure de tableau 01 NOM-TABLE-DE-STRUCTURE. 02 NOMTABLE1. 03 ELT1 OCCURS 8 PIC 99. 02 NOMTABLE2. 03 ELT2 OCCURS 3 PIC X(4). EN MÉMOIRE ON A :

TABLE1 TABLE2 1 2 3 4 5 6 7 8 1 2 3

En grisé : ELT1(5) et ELT2(2)

Accès et utilisation L'accès à un élément se fait par son numéro d'ordre appelé indice. L'indice est une valeur numérique comprise entre 1 et n où n est le nombre d'élément défini par OCCURS. L'indice est une variable qui doit être déclarée. La déclaration de l'indice se fera en binaire (COMP) par souci d'économie de traduction décimal > ecbdic > binaire > traitement > ecbdic . Si le résultat du programme exige l'affichage de l'indice prévoir une variable d'affichage. Exemples. 77 I PIC 99 COMP. 77 LI PIC 99 COMP. 77 COL PIC 99 COMP.

INITIALISATION D'UNE TABLE

A la compilation 01 TAB. 02 ELT OCCURS 7 PIC X(8).

On ne peut pas utiliser VALUE " " On utilise REDEFINES

1 2 3 4 5 6 7 LUNDIЂЂЂ MARDIЂЂЂ MERCERDI JEUDIЂЂЂ VENDREDI SAMEDIЂЂ DIMANCHE

01 TAB. 02 ELT OCCURS 7 PIC X(8). 01 TAB REDEFINE ZONE. 02 ZONE PIC X(56) VALUE "LUNDIЂЂЂMARDIЂЂЂMERCREDIJEUDIЂЂЂVENDR EDISAMEDIЂЂDIMANCHE".

Où 56 = 8X7

Page 21: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 21 Feyaerts Prod

Pendant le traitement Exemple le chargement d'un tableau. Utilisation de VARYING : répétition et incrémentation. Utilisation de READ INTO : READ + MOVE Conséquence il faut soustraire 2 de I pour obtenir BS.

IDENTIFICATION DIVISION. PROGRAM-ID CHARGEMENT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE CONTROL. SELECT FICHIER ASSIGN TO DDIN. DATA DIVISION. FILE SECTION. FD FICHIER RECORDING MODE F. 01 ENR. 02 VAR … . . . . WORKING STORAGE SECTION. 01 TAB. 02 ELT OCCURS 100. 03 VARX … . . . . 77 EOF PIC 9 COMP VALUE 0. 77 I PIC 999 VALUE 1. 77 BS PIC 999 COMP. 77 BSAFF PIC999. PROCEDURE DIVISION. PROG. PERFORM DEBUT PERFORM CHARG UNTIL EOF=1 OR I>100. PERFORM FIN. STOP RUN. DEBUT. OPEN INPUT FICHIER. READ FICHIER AT END MOVE 1 TO EOF. CHARG. MOVE ENR TO ELT. ADD 1 TO I. READ FICHIER AT END MOVE 1 TO EOF . FIN. SUBTRACT 1 FROM I GIVING BS BSAFF. DISPLAY BSAFF. CLOSE FICHIER.

IDENTIFICATION DIVISION. PROGRAM-ID CHARGEMENT. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE CONTROL. SELECT FICHIER ASSIGN TO DDIN. DATA DIVISION. FILE SECTION. FD FICHIER RECORDING MODE F. 01 ENR. 02 VAR … . . . . WORKING STORAGE SECTION. 01 TAB. 02 ELT OCCURS 100. 03 VARX … . . . . 77 EOF PIC 9 COMP VALUE 0. 77 I PIC 999 . . .. 77 BS PIC 999 COMP. 77 BSAFF PIC999. PROCEDURE DIVISION. PROG. PERFORM DEBUT PERFORM CHARG VARIYNG I 1 BY 1 UNTIL EOF=1 OR I>100. PERFORM FIN. STOP RUN. DEBUT. OPEN INPUT FICHIER. CHARG. MOVE ENR TO ELT. READ FICHIER INTO ELT(I) AT END MOVE 1 TO EOF. FIN. SUBTRACT 2 FROM I GIVING BS BSAFF. DISPLAY BSAFF. CLOSE FICHIER.

Page 22: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 22 Feyaerts Prod

LES TABLES INDEXÉES

Définitions : Indice = numéro d'ordre. Index = déplacement d'adresse. INDEX = (I –1) * LONGUEUR D'ÉLÉMENT.

L'index est donc le déplacement d'adresse en nombre d'octet par rapport à la 1ère entrée dans la table. Par convention et pour ne pas confondre avec les indices on fait suivre leur nom par un X Sous Mainframe IX prends 4 octets sous PC 2octets.

Déclaration d'index L'index se réfère au 1er octet de la table il est donc indissociable de celle-ci et ne concerne que celle-ci. Par conséquent il se déclare avec elle et fait partie intégrante de cette déclaration. 01 TAB. 02 ELT OCCURS 4 INDEXED IX [MX] PIC X(2).

On peut avoir besoin de plusieurs index, il faut les déclarer à ce moment cad das la WORKING STORAGE division. A 1 0 2 0 3 0 01 TAB. 02 NIV1 OCCURS 4 INDEXED IX1. 04 NIV2 OCCURS 5 INDEXED IX2 PIC(X)2.

Calcul de l'index de A selon la formule I-1X LONGUEUR. A NIV2(3,2) (3 -1) x 10 = 20 où 10 =5X2 Lgeur ELT ss-zone x nombre de ss-zone (2 -1) x 2 = 2 20 +2= 22

Déclaration d'un index indépendant.(Qui n'est pas associé à une table) 77 NOMINDEX.

Sauvegarde d'un index

Liste des comparaison entre index Index dune table index d'une autre table

Compare les n° d'ordre cad les indices. Index d'une table nombre. Compare une indice avec un nombre Index d'une table Identificateur d'usage index (en binaire) Compare adresse à une adresse Identificateur d'usage index Identificateur d'usage index

Manipulation d'index ADD SUBTRACT interdits

1 2 3 4 5 6 7 8 Adresse

Page 23: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 23 Feyaerts Prod

utilisation de SET

L'INSTRUCTION SET SET K(indent d'usage index/Var index TO valeur. Attention !!! la variable réceptrice est le premier membre de l'instruction. Ne jamais mettre I à 0 sinon pointe en dehors de la table.

Addition / incrémentation d'index. SET VARINDEX UP BY 1 pas d'incrémentation.. SET IX DOWN BY 1 pas de décrémentation.

LA RECHERCHE SÉQUENTIELLE EN COBOL. 3 Conditions. • Uniquement sur les tables indexées. INDEXED dans le WORKING STORAGE • Toujours initialiser l'index avant l'instruction. SET IX TO 1. • L'identificateur du SEARCH est toujours la zone associées à la clause OCCURS. Syntaxe : SEARCH IDENT [VARYING INDEX/IDENT] [AT END INSTUCTION IMPERATIVE] WHEN COND1 INSTRUCTION2 IMPERATIVE [WHEN COND2 INSTRUCTION3 IMPERATIVE] END SEARCH.

RmQ il faut utiliser la clause VARYING si l'on veut utiliser le 2ème index déclaré dans la WORKING STORAGE DIVISION.

Exemple WORKING STORAGE DIVISION. 01 TAB. 02 ELT OCCURS 200 INDEXED IX JX PIC X(4).. . . . PROCEDURE DIVISION. . . . TRT. SET IX TO 1. SET JX TO 1. SEARCH ALL ELT VARYING JX. AT END DISPLAY "PAS TROUVE" WHEN TVAR = VALEUR PERFORM TROUVE END SEARCH.

LA RECHERCHE DICHOTOMIQUE EN COBOL. 3 Conditions. • Uniquement sur les tables indexées et triées. DEPENDING ON borne sup. et

INDEXED et ASCENDING/DESCENDING KEY dans le WORKING STORAGE • Toujours déclare puis initialiser l'index avant l'instruction. SET IX TO 1. • L'identificateur du SEARCH est toujours la zone associées à la clause OCCURS.

Page 24: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 24 Feyaerts Prod

77 BSX PIC S9(4) COMP. 01 TAB. 02 ELT OCCURS 100 DEPENDING ON BSX BSX à déclarer INDEXED IX IX équivaut à une déclaration ASCENDING/DESCENDING KEY TVAR1 04 TVAR1 PIC X(20). 04 TVAR3 PIC 9 (2).

PROCEDURE DIVISION. PROG. PERFORM DEBUT. PERFORM CHARG VARYING IX FROM 1 TO 1 UNTIL IX > 100 OR EOF = 1. PERFORM INTER. PERFORM TRT UNTIL EOF = 1. PERFORM FIN. STOP RUN. DEBUT. OPEN INPUT FICHIER FICH2. CHARG. READ FICHIER INTO ELT(IX) AT END MOVE 1 TO EOF. INTER. SET IX DOWN BY 2. SET BSX TO IX. MOVE 0 TO EOF. READ FICH2 AT END MOVE 1 TO EOF. TRT. SET IX TO 1. SEARCH ALL ELT AT END (INSTRUCTION SI PAS TROUVÉ) Rech WHEN ELT(IX) = ENR (INSTRUCTION SI TROUVÉ) Dicho END SEARCH. READ FICH2 AT END MOVE 1 TO EOF. FIN. CLOSE FICHIER FICH2.

Page 25: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 25 Feyaerts Prod

8. ET POUR TERMINER…

L'INSTRUCTION COMPUTE. Sert à combiner des opérations arithmétiques. Cette instruction permet d'introduire des formules. COMPUTE K/Var = Expression arithmétique. Exemple COMPUTE RESULT = ((A + B) * 2) /252

Attention à l'ordre de priorité des opérateurs. () ** * + ET DE G--> D / -

donc RES =(((A**2 + 5)**2 + (B / (5*Y)- Z))

se fait comme suit: A**2 +5 Le tout **2 + 5*Y B/ le res du précédent -Z

équivaut aux instructions suivantes. MULTIPLY A BY A. ADD 5 TO A MULTIPLY 5 BY Y. MULTIPLY A BY A. DIVIDE Y INTO B. SUBTRACT Z FROM B. ADD A TO B. MULTIPLY W BY B GIVING RES.

Les opérations arithmétiques peuvent être combinées dans un test alors l'ordre de priorité des opérateurs logiques est : Opérateur arithmétique

() ** * + ET DE G--> D / -

Opérateur relationnel ∨ > = NOT <

Opérateur logique ∨ () AND OR

Le AND est prioritaire au OR car si le 1er terme d'un test est faux le résultat l'est aussi plus besoin de tester le 2ème. Le compilateur reconnaît les () logiques des () arithmétiques car les premières jouxtent au moins un opérateur logique.

Page 26: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 26 Feyaerts Prod

L'INSTRUCTION EVALUATE Les tests multiples EVALUATE IDENT1 ALSO IDENT2 ALSO IDENT3 WHEN CONDITION1 ALSO CONDITION2 ALSO ANY INSTRUCTION IMPERATIVE WHEN CONDITION1 ALSO ANY ALSO CONDITION3 INSTRUCTION IMPERATIVE WHEN ANY ALSO ANY ALSO CONDITION INSTRUCTION IMPERATIVE WHEN CONDITION1 ALSO CONDITION2 ALSO ANY INSTRUCTION IMPERATIVE WHEN OTHER INSTRUCTION IMPERATIVE END EVALUATE

Exemple EVALUATE SEX ALSO AGE WHEN = "F" ALSO 20 THRU 25 DISPLAY "JEUNE FEMME" WHEN = "M" ALSO > 50 DISPLAAY "HOMME" WHEN ANY ALSO < 15 DISPLAY "ENFANT" WHEN OTHER DISPAY "AUTRE" END EVALUATE.

Les conditions sont évaluées selon les opérateurs relationnels <> = NOT ALSO est optionnel et ne sert que pour les test composé ANY signifie toute valeur possible THRU permet d'introduire un intervalle de valeur.

LA CLAUSE ROUNDED permet d'arrondir le résultat d'un calcul. 77 TOT PIC 9(2)V99. ADD A B C GIVING TOT ROUNDED. DISPLAY TOT.

Si TOT vaut 16,4444 TOT s'affiche 16,44 Si TOT vaut 16,6666 TOT s'affiche 16,67 Si TOT vaut 16,5555 TOT s'affiche 16,56

LA CLAUSE SIZE ERROR permet de ne pas travailler avec des résultats tronqués. DIVIDE A INTO B GIVING Q. SIZE ERROR DISPLAY "OPERATION IMPOSSIBLE".

Page 27: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 27 Feyaerts Prod

9. LA FUSION DE FICHIERS Conditions : 2 fichiers triés avec la même clé de tri = Fichiers d'entrée. 1 fichier implicitement trié = Fichier de fusion = F de sortie Le programme lit les 2 fichiers en même temps selon les clés. Il écrit 1 enregistrement à la fois et un fichier d'erreur.

Méthode 1) 1 lire les 2 fichiers en entrée. 1er enr de Fich1 et 1er enr de fich2. 2) Compare les clés.

a) Si clé 1< clé 2 recopier 1er enr de Fich1 dans Fichier de sortie. lire enr suivant dans Fich1.

b) Si clé 1> clé 2 recopier 1er enr de Fich2 dans Fichier de sortie. Lire enr suivant dans Fich2

c) Si clé 1 = clé 2 fusionner les enregistrement en une seul dans le fichier de sortie. 3) Si fin de fichier rencontrée mettre la clé = à High Value

Exemple Une chaîne de magasin doit faire son inventaire annuel Elle doit fusionner les inventaires de ses 2 succursales. Fichiers entrée : Mag1 = code-article, libel article, quantité. Mag2 = code-article, libel article, quantité. Fichiers Sortie Cent = code-article, libel article, quantité Erreur = PROGRAMME: IDENTIFICATION DIVISION. PROGRAM-ID FUSION. ENVIRONMENT DIVISION. INPUT-OUPUT SECTION. FILE-CONTROL. SELECT MAG1 ASSIGN TO DDIN1. SELECT MAG2 ASSIGN TO DDIN2. SELECT CENTR ASSIGN TO DDOUT1. SELECT ERREUR ASSIGN TO DDOUT2. DATA DIVISION. FD MAG1 RECORDING MODE F. 01 ENRMAG1. 02 COD1 PIC X(10). 02 LIB1 PIC X(50). 02 QUANT1 PIC 9 (6). FD MAG2 RECORDING MODE F. 01 ENRMAG2. 02 COD2 PIC X(10). 02 LIB2 PIC X(50). 02 QUANT2 PIC 9 (6). FD CENTR RECORDING MODE F. 01 ENRCENT. 02 CODC PIC X(10). 02 LIBC PIC X(50). 02 QUANTC PIC 9 (6).

Page 28: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 28 Feyaerts Prod

FD ERRREUR RECORDING MODE F. 01 ENRERR. 02 CODER PIC X(10). 02 LIBER PIC X(50). PROCEDURE DIVISION. PERFORM DEBUT. PERFORM TRT-FUSION UNTIL COD1 = HIGH-VALUE AND COD2 = HIGH-VALUE. PERFORM FIN. STOP RUN. DEBUT. OPEN INPUT MAG1 MAG2. OPEN OUTPUT CENTR ERREUR. PERFORM LECTURE1 PERFORM LECTURE2 TRT-FUSION. PERFORM DEB-TRT. IF COD1<COD2 THEN PERFORM COD1-COD2 ELSE IF COD1>COD2 THEN PERFORM COD2-COD1 ELSE PERFORM COD1=COD2 END-IF. PERFORM FIN-TRT FIN. CLOSE MAG1 MAG2 CENTR ERREUR. LECT1. READ MAG1 AT END MOVE HIGH-VALUE TO COD1. LECT2. READ MAG2 AT END MOVE HIGH-VALUE TO COD2. DEB-TRT. EXIT. COD1-COD2. WRITE ENRC FROM ENRMAG1 PERFORM LECT1. COD2-COD1. WRITE ENRC FROM ENRMAG2 PERFORM LECT2. COD1=COD2. PERFORM DEB-FUS. IF LIB1=LIB2 THEN PERFORM MAJ ELSE PERFORM LIB1NOTLIB2 END-IF. PERFORM FINFUS. FIN-TRT EXIT. DEB-FUS. EXIT. MAJ. ADD QT1 TO QT2 GIVING QTC MOVE COD1 TO CODC WRITE ENRCENT. LIB1NOTLIB2. WRITE ENRERR FROM ENRMAG1. MOVE LIB2 TO LIBER. WRITE ENRERR. FINFUS. PERFORM LECT1.

Page 29: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 29 Feyaerts Prod

PERFORM LECT2.

Exercice Fichiers input a) fichier disque « soldes »

numéro-compte = CLE1 solde = SOLDEA 12 caractères 9 chiffres numéro de compte en banque solde du compte bancaire

• trié sur numéro-compte. • un enregistrement par compte bancaire. • b) fichier disque « transactions »

NUMÉRO-COMPTE = CLE2 type- transaction montant = MONTANT 12 caractères 1 caractère 9 chiffres numéro de compte en banque R = retrait, D = dépot montant de la transaction

• trié sur numéro-compte. • plusieurs enregistrements par compte. Fichiers Output a) nouveau fichier disque « soldes »

numéro-compte solde = SOLDEN 12 caractères 9 chiffres numéro de compte en banque solde du compte bancaire

• trié sur numéro-compte. • un enregistrement par compte bancaire. b) b) fichier disque « clients »

numéro-compte = CLECLI 12 caractères numéro de compte en banque

• trié sur numéro-compte. • un enregistrement par nouveau compte bancaire. Traitement Ancien client sans transaction : nouveau solde = ancien solde Avec transaction : Ancien client :nouveau solde = ancien solde + dépots - retraits Nouveau client : créer nouveau solde ( dépots - retraits ) créer liste clients

Page 30: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 30 Feyaerts Prod

Page 31: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 31 Feyaerts Prod

IDENTIFICATION DIVISION. PROGRAM-ID. BANQUE. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT SOLDE_ANC ASSIGN TO DDIN1. SELECT TRANSACTIONS ASSIGN TO DDIN2. SELECT SOLDE_NEW ASSIGN TO DDOUT1. SELECT CLIENTS ASSIGN TO DDOUT2. DATA DIVISION. FILE SECTION. FD SOLDE_ANC RECORDING MODE F. 01 ENR_SOLDEA. 02 CLE1 PIC X(12). 02 SOLDEA PIC S9(9). FD TRANSACTIONS RECORDING MODE F. 01 ENR_TRANS. 02 CLE2 PIC X(12). 02 TYPTRANS PIC X. 02 MONTANT PIC 9(9). FD SOLDE_NEW RECORDING MODE F. 01 ENR_SOLDEN. 02 CLE1 PIC X(12). 02 SOLDEN PIC S9(9). FD CLIENTS RECORDING MODE F. 01 ENR_CLI. 02 CLECLI PIC X(12). WORKING STORAGE SECTION. PROCEDURE DIVISION. PROG. PERFORM DEBUT. PERFORM TRT_FUSION UNTIL CLE1 = HIGH VALUE AND CLE2 = HIGH VALUE. PERFORM FIN. STOP RUN. DEBUT. OPEN SOLDE_ANC TRANSACTION INPUT. OPEN SOLDE_NEW CLIENTS OUTPUT. PERFORM LECT1. PERFORM LECT2. TRT_FUSION. PERFORM DEB_TRT_FUS. IF CLE1 < CLE2 PERFORM CLE1_ANC_SS_MOUV ELSE PERFORM CLE2_AVEC_MOUV END-IF. PERFORM FIN_TRT_FUS. FIN. CLOSE SOLDE_ANC SOLDE_NEW TRANSACTIONS CLIENTS. LECT1. READ SOLDE_ANC AT END MOVE HIGH VALUE TO CLE1. LECT2. READ TRANSACTIONS AT END MOVE HIGH VALUE TO CLE2. DEB_TRT_FUS. EXIT. CLE1_ CLE1_ANC_SS_MOUV. WRITE ENR_SOLDEN FROM ENR_SOLDEA. PERFORM LECT1.

Page 32: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 32 Feyaerts Prod

CLE2_AVEC_MOUV. PERFORM DEBUT_AVEC_MOUV. IF CLE1 = CLE2 PERFORM ANCIEN_CLIENT ELSE PERFORM NOUVEAU_CLIENT END-IF. PERFORM INTER. PERFORM TRANSACTION UNTIL CLEN NOT = CLE2. PERFORM FIN_AVEC_MOUV. FIN_TRT_FUS. EXIT. DEBUT_AVEC_MOUV. MOVE CLE2 TO CLEN. ANCIEN_CIENT. MOVE SOLDEA TO SOLDEN. PERFORM LECT_1. NOUVEAU_CLIENT. MOVE 0 TO SOLDEN. MOVE CLE2 TO CLECLI. WRITE ENR_CLI. INTER. EXIT. TRANSACTION. PERFORM DEB_TRANS. IF TYPTRANS= "D" PERFORM DEPOT ELSE PERFOM RETRAIT END-IF. PERFOM FIN_TRANS. FIN AVEC MOUV. WRITE ENR_SOLDEN. DEB_TRANS. EXIT. DEPOT. MOVE MONTANT TO SODEN. RETRAIT. SUBTRACT MONTANT FROM SOLDEN. FIN_TRANS. PERFORM LECT2.

Et c'est tout !!!

Page 33: IEPSCF Uccle Section informatique - users.belgacom.netusers.belgacom.net/feyaerts/pdf/cobol_theorie.pdf · Déclaration en binaire pur ... Déclaration d'une structure de tableau

L’essentiel sur le Cobol page 33 Feyaerts Prod