Vous êtes sur la page 1sur 113

CHAPITRE I INTRODUCTION AU LANGAGE COBOL ***********

Le langage COBOL fut conu en 1957, sur demande du gouvernement des U.S.A. L'tude fut dveloppe par un comit d'utilisateurs et de constructeurs d'ordinateur. COBOL = Common Organization Business Oriented Language 1re tape acheve en 1959 : Systme COBOL, langage. * * Bas sur l'anglais Extrmement structur en DIVISIONS SECTIONS PARAGRAPHES PHRASES VERBES, NOMS, OPERATEURS, SIGNES DE PONCTUATION D'autres normes viendront corriger, amliorer ce premier travail : 1968 : COBOL A.N.S. (American National Standard) 1974 (Ajouts sur 1968 : sous programmes, tri intgr) 1985. . Les rgles de syntaxe associes ce langage sont relativement rigides et l'une de ses difficults est donc d'apprendre les matriser.

I-1 STRUCTURE DE BASE D'UN PROGRAMME COBOL


Tout programme COBOL se compose de 4 divisions obligatoirement prsentes (mme vides): IDENTIFICATION DIVISION ENVIRONMENT DIVISION DATA DIVISION PROCEDURE DIVISION A "IDENTIFICATION DIVISION" : Elle sert identifier le programme et renseigner l'utilisateur sur le nom de l'auteur, la date d'criture,

B "ENVIRONMENT DIVISION" : Contient une description sommaire de la configuration du calculateur utilis ainsi que des informations relatives la gestion des entres-sorties, aux conditions spciales de traitement des fichiers. C "DATA DIVISION" (trs importante !) Dcrit la structure des informations que le programme reoit, traite, ou produit. Les donnes sont groupes en deux catgories : * celles appartenant aux fichiers manipuls par le programme * celles qui sont cres de faon interne et places dans des zones intermdiaires selon un format donn. Cette DATA DIVISION comporte 3 sections (parfois 4) 1) FILE SECTION, dfinissant la structure des fichiers et des articles qu'ils contiennent. 2) WORKING-STORAGE SECTION : toutes les donnes internes autres que celles des fichiers. 3) "LINKAGE SECTION" : donnes communes un programme et un sous-programme. D "PROCEDURE DIVISION" (trs importante) Le programmeur y dcrit le traitement effectuer par le calculateur. C'est donc le lieu de la traduction de l'algorithme conu par le programmeur. Elle est compose d'un ensemble de sections ou de paragraphes.

CHAPITRE II NOTATIONS UTILISEES DANS LES FORMATS ET REGLES


Un format gnral montre la disposition des lments d'une clause ou d'une instruction. * les ELEMENTS qui composent une clause ou une instruction sont les MOTS crits en majuscules, ou en minuscules, les nombres niveaux, les crochets, les accolades et les caractres spciaux.
(1)

Les MOTS

Les mots en majuscules, souligns, sont appels MOTS-CLES et sont obligatoires. Les nonsouligns sont facultatifs pour l'utilisateur. Les mots en minuscules sont des termes gnriques utiliss pour reprsenter les mots utilisateurs, les littraux,
(2)

Les CROCHETS

Une partie du format gnral, place entre crochets, peut tre incluse ou omise, au choix de l'utilisateur.
(3)

POINTS DE SUSPENSIONS ()

Ils peuvent indiquer l'omission d'une portion de programme origine (voir contexte). Dans les formats gnraux, ils reprsentent un endroit o une rptition peut se produire. (4) Les CARACTERES +, -, <, >, = apparaissant dans les formats sont obligatoires bien que non souligns. (4) Les ACCOLADES Elles permettent le choix entre plusieurs options.

INPUT

n-fich-1

[WITH NO REVIND]

OUTPUT 1) OPEN I-O

n-fich-2

[WITH NO REWIND]

n-fich-5

[N-FICH-6]

EXTEND

n-fich-7

[N-FICH-8]

RECORDS 2) BLOCK CONTAINS ENTIER-1 TO ENTIER-2 CHARACTERS

CHAPITRE III LES ELEMENTS DU LANGAGE


******************** Le langage COBOL comme tout langage possde : - une grammaire qui doivent tre respectes au maximum. une orthographe

I jeu de caractres COBOL Les 51 caractres suivants sont admissibles : 0, 1, 2, --- 9 A, B, C, --- Z B + -/* / = $ .;.("') <> Chiffres Lettres majuscules Espace ou blanc Slash ou barre transversale Egal Signe montaire

on notera les espaces dans le texte par un b

II CREATIONS DE MOTS COBOL


Chiffres de 0 9 , lettre de A Z,
<lettre>

<lettre>

<chiffre>

30 caractres au maxi
Exemples de dclarations 77 J PICTURE 9 77 K PIC 99. 77 INDIC-1 PIC 9(3). 77 MODE-DE-PAIEMENT PIC X.

III SCHEMA GENERAL D'UNE DECLARATION EN DATA DIVISION


Nom-de-donne Nombre-niveau filler PIC PICTURE is Image-donne

(01 49 ou 77) Ce schma n'est pas complet, mais permet de dcrire, dans un premier temps, l'essentiel des donnes traiter : La notion image donne peut-tre reprsente par le diagramme.:
6

( 9

entier

S Rgles Les pictures" alphanumriques (X) peuvent tre <= 255 ou <= 120 selon les ordinateurs ; mais actuellement (c'est le cas sur l'AS 400) non limites. les "pictures" numriques (9) doivent tre <= 18

IV LES LITTERAUX
C'est une CONSTANTE non identifie par un nom symbolique A) Littral alphanumrique C'est une combinaison de caractres dlimite ses deux extrmits par des guillemets et compose de caractres quelconques appartenant au jeu de caractres du calculateur. La longueur d'un littral doit tre comprise, en gnral, entre 1 et 128. B) Littral numrique (de 1 18 chiffres) C'est un nombre de 18 chiffres maximum, crit seul, avec un point dcimal si ncessaire et prcd d'un + ou -. Ex 747 + 3.14159 - .58

N.B. Certains COBOL (IBM) autorisent l'usage des nombres en notation anglo-saxonne

+
7

Mantisse

exposant

V Les Constantes Figuratives


Ce sont des littraux alphanumriques ou numriques dsigns par des noms rservs et connus du compilateur. ZERO : reprsente la valeur zro dans le cas de donnes numriques. SPACE : dsigne le (ou une suite de) caractre(s) blanc(s) pour les donnes alphanumriques. [HIGH-VALUE] : pour les donnes alphanumriques dsignent un ou [LOW-VALUE] : plusieurs caractres ayant [la plus haute] [la plus basse] valeur dans la hirarchie de codification interne [ Soit [ 00 ] FF ] en hxadcimal

ALL littral : reprsente une ou plusieurs fois la chane de caractres composant le littral. VI REGLES D'ECRITURE EN COBOL Tout lment du programme sera prcd et suivi d'un ou plusieurs espaces, exception faite pour : * la ( qui n'est pas suivie d'espace * les ; , . ne sont pas prcds d'espace * la ) n'est pas prcde d'espace.

CHAPITRE IV LA FEUILLE DE PROGRAMME COBOL


******* Le format de la feuille de programmation offre une mthode normalise d'criture de programme COBOL. Chaque ligne reprsente l'image d'un enregistrement type (carte perfore autrefois, ligne d'un terminal). Le compilateur accepte des programmes crits dans le format de rfrence. 1) Colonnes 1 6 : contiennent les numros de squence, en gnral 1,2,3 4,5,6 page ligne

2) Colonne 7 : zone d'indicateurs permettant d'utiliser : - un commentaire si on a plac le signe * - une suite d'instruction COBOL n'ayant pu tre acheve sur la ligne prcdente (Ex mot coup en deux ou littral), si on utilise le signe (tiret) 3) Colonnes 8 72 : utilises pour crire les instructions du programme-source. - col 8 11, marge A : en-ttes de division, noms-de-section, noms-de-paragraphe, certains nombre-niveau. col 12 72, marge B : les instructions courantes. 4) Colonne 73 80 : identification du programme (peu utile au programmeur)

CHAPITRE V QUELQUES NOTIONS SUR LES DONNEES MANIPULEES EN COBOL ********


I DONNEES SIMPLES NON STRUCTUREES OU ELEMENTAIRES Ces donnes sont dcrites en DATA DIVISION, WORKING-STORAGE SECTION, l'aide d'un nombre niveau 77 (marge A), d'un nom-donne choisi par le programmeur et d'une image-donne introduite par le mot PIC. Ex : 77 TITRE 77 K PIC X(10). PIC 999.

II Les structures ou groupes Une structure est un ensemble d'informations places dans un ordre dfini et strict du point de vue TYPE et LONGUEUR. Ex1 : ZONE NOM 10C N PRENOM 8CN PRENOM =

Ex2 : LIGNE NOM =

Nous dcrivons ces structures en algorithmique de la faon suivante : Soit ZONE de type structure. dont NOM chane (10). dont PRENOM chane (8). Soit LIGNE de type structure, dont LIB1 chane (6) initial 'NOM b = b '. dont NOML chane (10), dont LIB2 Chane (9) initial 'PRENOM b = b '. dont PRENOML chane (8).

10

Pour dcrire les mmes objets COBOL on utilise les nombres-niveau allant de 01 49 EX 1 1 ZONE. 02 NOM PIC X (10). 02 PRENOM PIC X (8). LIGNE 02 02 02 02 FILLER PIC X(6) VALUE "NOM b = b". NOML PIC X(10). FILLER PIC X(9) VALUE "PRENOM b = b". PRENOML PIC X(8).

Le mot-cl FILLER permet de rserver une zone sans la nommer.

11

CHAPITRE VI NOTIONS SUR DES ENTREES-SORTIES SIMPLES PREMIERS EXEMPLES DE PROGRAMMES


********* I ENTREE D'INFORMATIONS A PARTIR DU CLAVIER L'instruction ACCEPT, dans son format le plus simple, permet de rendre disponible des informations de faible volume dans la donne spcifie. ACCEPT identificateur Identificateur est videmment un nom de zone ayant t dcrit dans la DATA DIVISION. ATTENTION 1) Il existe d'autres formes du ACCEPT que nous verrons ultrieurement. 2) Si la longueur de ce que vous tapez est infrieure celle de l'identificateur, vous ne pouvez prvoir ce qui va subsister dans la partie droite de cet identificateur. Ex : 77 IDENT PIC X(10).

ACCEPT IDENT Qu' y a-t-il dans IDENT

on rentre IUT b INFO puis return


IUT INFO ??

Les ?? signifient que l'utilisateur ignore la valeur de ces deux caractres. Ceci oblige trs souvent le programmeur rinitialiser une zone ( blanc par exemple) avant de prvoir un ACCEPT dessus. Par ailleurs l'ordre ACCEPT ne peut permettre de lire une srie de donnes comme dans dautres langages. ACCEPT X Y Z est OUBLIER

Si l'on veut absolument n'avoir qu'un seul ACCEPT il faut placer X,Y,Z dans une structure (voir Travaux Dirigs). II Sortie d'informations sur l'cran C'est l'opration quasi "symtrique" du ACCEPT puisqu'il s'agit d'afficher le contenu de zones de mmoire centrale par l'intermdiaire des noms-donnes manipuls dans le programme.
12

Mais en plus, on a la possibilit de rajouter des chanes de caractres ne figurant pas dans la mmoire centrale mais directement dans le programme.

Ident-1
DISPLAY

IDENT-2 LITT-2

..

Litt-1

Cette instruction provoque l'criture de faible volume d'informations l'cran. ATTENTION : Cette instruction n'est pas l'instruction privilgie de sortie du langage COBOL, mais elle est trs facile utiliser pour dbuter : Ex 77 TEXTE PIC X(8) VALUE "IUT INFO". | | (1) DISPLAY TEXTE (2) DISPLAY "LE TEXTE EST " TEXTE (1) provoque l'cran l'affiche de IUT INFO (2) provoque l'cran l'affiche de LE TEXTE EST IUT INFO ATTENTION : Une impression l'cran ne fait que RECOPIER un tat de la Mmoire Centrale mais ne la modifie en rien

13

III MOUVEMENT EN MEMOIRE CENTRALE

Z1
Format gnral

En algorithme Z2 = Z1 le verbe provoquant un transfert de caractres d une zone lautre est le verbe MOVE

Z2
Format gnral Ident-1 MOVE littral 1er Cas : Z1 et Z sont des donnes longueur Z1 = longueur Z2 aucun problme longueur Z1 < longueur Z2 on complte avec des b droite longueur Z1 > longueur Z2 on tronque A la longueur de Z2 longueur Z1 = longueur Z2, aucun problme longueur Z1 < longueur Z2, on complte Avec des zros gauche longueur Z1 > longueur Z2, on tronque gauche!! TO ident-2 [ident-3].

alphanumrique MOVE Z1 TO Z2

Numrique MOVE Z1 TO Z2

14

IV EXEMPLE DE PROGRAMME TRES SIMPLE Col 8 Col 12 IDENTIFICATION DIVISION. PROGRAM-ID. b EX1. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 77 Z1 PIC X(10). 77 Z2 PIC X(10). PROCEDURE DIVISION. PRINCIPAL SECTION. DEBUT. DISPLAY "ENTREZ UNE VALEUR POUR ZONE". MOVE SPACES TO Z1. ACCEPT Z1. MOVE Z1 TO Z2. DISPLAY Z2. FIN. STOP RUN. NB.- Attention !! Sur l'AS/400, le traitement des verbes ACCEPT ou DISPLAY est un peu particulier : chaque appel l'un de ces deux verbes provoque une interruption du droulement du programme et l'apparition d'un cran o s'affichent les MESSAGES engendrs par les DISPLAY. Les znes saisir par ACCEPT doivent l'tre sur une ligne rserve cet usage. Cet aspect confirme que les verbes ACCEPT et DISPLAY doivent intervenir le moins souvent possible en COBOL. En fait, ACCEPT et DISPLAY utilisent la console associe l'cran sur lequel le programme cobol tourne, cette console est normalement prvue pour les messages systmes ou la mise au point des programmes.

15

V DEUXIEME PROGRAMME UTILISANT DES DONNEES EN GROUPE Cet exercice reprend les donnes ZONE et LIGNE du chapitre. On veut savoir (en une seule lecture) le nom et le prnom d'un individu afin de les imprimer l'cran sous forme explicite (donc en utilisant la structure de LIGNE). Col18 Col 12 IDENTIFICATION DIVISION. PROGRAM-ID. b EX2. ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 ZONE. 02 NOM PIC X(10). 02 PRENOM PIC X(8). 01 LIGNE. 02 FILLER PIX X(6) VALUE "NOMb=b". 02 NOML PIC X(10). 02 FILLER PIC X(9) VALUE "PRENOMb=b". 02 PRENOML PIC X(8). PROCEDURE DIVISION. PRINCIPALE SECTION. DEBUT. DISPLAY "ENTREZ LES DONNEES SELON LE FORMAT:". DISPLAY "NOM(10),PRENOM(8)". ACCEPT ZONE. MOVE NOM TO NOML. MOVE PRENOM TO PRENOML. DISPLAY LIGNE. FIN. STOP RUN. N.B.1) Que manque-t-il par rapport EXI , 2) Pouvez-vous amliorer la saisie du nom et du prnom ? 3) Que faut-il pour crire le nom et le prnom sur deux lignes spares ?

16

CHAPITRE VII NOTIONS SUR LES OPERATIONS ARITHMETIQUES SIMPLES


********* Nous passerons en revue dans ce chapitre les quatre verbes : ADD SUBTRACT MULTIPLY DIVIDE dans leur format le plus utile. Pour chaque verbe, une succession d'exemples est fournie pour vous inviter toujours trouver la bonne formulation dans vos programmes. I ADDITION Cet ordre ne s'adresse videmment qu' des noms de donnes strictement numriques. FORMAT GENERAL ident-1 ADD litt-1 litt-2 ident-2 TO ident-m

ident-1 ADD litt-1 EXEMPLES ALGORITHMIQUE II+1 JJ+I+K JI+1 IK+L+M litt-2

ident-2 litt-3

ident-3 GIVING ident-m

COBOL ADD 1 TO I ADD I K TO J ADD 1 I GIVING J ADD K L M GIVING I

17

II SOUSTRACTION FORMAT GENERAL ident-1 (1) SUBTRACT litt-1 ident-1 (2) SUBTRACT litt-1 litt-2 litt-2 ident-2 FROM litt-m ident-m ident-2 .. FROM ident-m

GIVING ident-n EXEMPLES ALGORITHMIQUE I I1 J JIK J I1 I JKLM III MULTIPLICATION FORMAT GENERAL Ident-1 (1) MULTIPLY Litt-1 ident-1 (2) MULTIPLY litt-1 BY litt-2 ident-2 GIVING ident-3 BY ident-2 COBOL SUBTRACT 1 FROM I SUBTRACT I K FROM J SUBTRACT 1 FROM I GIVING J SUBTRACT K L M FROM J GIVING I

ALGORITHMIQUE I I*2

COBOL MULTIPLY 2 BY I MULTIPLY I BY J GIVING K

K I*J

18

IV DIVISION FORMAT GENERAL ident-1 (1) DIVIDE litt-1 ident-1 (2) DIVIDE litt-1 BY litt-2 [REMAINDER ident-4 ] ALGORITHMIQUE B B/A ou C B/A ou Si on veut le reste on rajoute COBOL DIVIDE A INTO B DIVIDE B BY A GIVING B DIVIDE A INTO B GIVING C DIVIDE B BY A GIVING C REMAINDER D INTO ident-2 GIVING ident-3 INTO ident-2

Il faut expliquer ici la spcificit du COBOL, comme langage de gestion : tous les calculs s'effectuent en entier, la prcision dcimale tant dcrite par les clauses PICTURE. C'est vritablement un atout du cobol, et la justification de son utilisation actuelle : les calculs sont justes, sans arrondi !

19

CHAPITRE VIII LES VERBES DE TRAITEMENT (PROCEDURE DIVISION) INITIATION


*************** FORMAT GENERAL SIMPLIFIE PROCEDURE DIVISION [nom-de-paragraphe, [phrase]}

La "Procdure Division" doit exister dans tout programme COBOL. Elle contient essentiellement les traitements. Les ordres essentiels sont : OPEN, CLOSE, STOP RUN, ADD, SUBTRACT, MULTIPLY, DIVIDE, PERFORM, READ, WRITE, REWRITE, GO TO, IF I INSTRUCTION MOVE Cette instruction est fondamentale puisqu'elle permet le transfert de donnes vers une ou plusieurs zone de donnes. FORMAT GENERAL : ident-1 MOVE littral Ex MOVE A (B) TO X. MOVE X TO C. MOVE X TO D(E). Cette instruction est simple comprendre, mais parfois dlicate utiliser (rle des PICTURE). Nous y reviendrons ultrieurement. (A(B) dsigne une case de vecteur) TO ident-2 [ident-3]

20

II EXPRESSIONS CONDITIONNELLES (voir COURS ALGO) Elles identifient les conditions valuer pour permettre le choix d'une alternative. IF, PERFORM sont les deux instructions essentielles utilisant de telles expressions, COBOL est riche en conditions : conditions simples (comparaison, classe, nom-condition, signe) conditions composes (OR, AND, NOT)

A CONDITION DE COMPARAISON Elle nous permet de fournir un premier format pour le IF : IF exp-arith-1 ident-1 litt-1 GREATER THAN IS [NOT] LESS THAN EQUAL TO > < = exp-arith-2 ident-2 litt-2

Il y a naturellement quivalence de sens entre : GREATER ET LESS ET EQUAL ET > < =

On note l'absence de signe pour > = et <= il faut traduire par NOT < et NOT > (sur l'AS/400, les signes > = et < = sont admis). B CONDITION DE CLASSE FORMAT GENERAL : IF ident IS [NOT] NUMERIC ALPHABETIC

Cette condition dtermine si l'oprande est numrique (compos uniquement de chiffres avec ou sans signe) ou alphabtique (A'Z', espace). Le test ALPHABETIC ne peut en principe pas tre utilis avec une donne numrique (PIC 9( )). Ces deux dernires phrases correspondent la norme ANS 74 mais peuvent tre largies comme c'est le cas en Cobol-Microsoft. Les autres conditions simples seront vues ultrieurement.

21

C CONDITIONS COMPOSEES Celles qui font intervenir les oprateurs logiques AND, OR, NOT.

D REGLES D'EVALUATION DES CONDITIONS (1) (2) (3) (4) (5) Les expressions arithmtiques sont calcules Les conditions simples sont tablies dans l'ordre : comparaison, classe, nom-decondition, signe. Les conditions simples ngatives sont tablies. Les conditions composes dans l'ordre AND, OR; Les conditions composes ngatives sont values.

N.B - L'utilisation des parenthses est conseille pour augmenter la lisibilit du programme et viter les erreurs d'interprtation. III EXEMPLES DE CONDITIONS COMPOSEES 1) 2) 3) IF A = B OR C = D action-2 IF (A = B OR C = D) AND (E > F) action-2 IF (A = B) OR (C = D AND E> F) action 3.

IV L'INSTRUCTION IF C'est l'instruction qui traduit les schmas algorithmiques bien connu : Si exp. Cond. action-1 Alors ou Sinon Action-2 Fsi Fsi Si exp. cond. action-3 Alors

22

FORMAT GENERAL : Suite-inst-1 IF condition NEXT SENTENCE ELSE NEXT SENTENCE Suite-inst-2 END-IF .

Le point terminal est l'lment le plus important de cette instruction. En effet suite-inst-1,2 reprsentent une srie d'instructions COBOL SANS POINT . Le END-IF n'est pas obligatoire en COBOL, parce qu'il a t introduit aprs coup dans le langage. NOUS VOUS CONSEILLONS D'UTILISER SYSTEMATIQUEMENT LE END-IF. Sans lui, s'est le point qui met fin au IF. Mais il met fin A TOUS LES IF EN COURS ! Cette rgle est malheureusement trs dangereuse et on l'apprend vite ses dpens ! En particulier, il est naturellement possible d'imbriquer des IF mais avec quelques prcautions. La rgle moderne, et vivement conseille, est de TOUJOURS utiliser le terminateur END-IF ! EXEMPLES DE STRUCTURE DE IF IMBRIQUES 1 Si EC1 Si Sinon Fsi Sinon Fsi 2 Si EC1 si Fsi Sinon ELSE
23

Alors EC2 Alors

IF IF ELSE

EC1 EC2

END-IF ELSE END-IF. Alors EC2 Alors IF IF EC1 EC2

ELSE NEXT SENTENCE END-IF

Fsi

END-IF.

D'ou le rle indispensable dans certains cas de la locution NEXT SENTENCE ! Par contre on ne peut traduire : 3 Si EC Si EC2 Alors Alors Non traduisible pour L'instant (ncessit de L'appel d'action) Fsi Sinon PERFORM SAUF SI ON UTILISE LE END-IF Fsi IF EC1 MOVE A TO B IF EC2 MOVE 1 TO N END-IF MOVE B TO C ELSE MOVE B TO C END-IF. V LINSTRUCTION EVALUATE Linstruction EVALUATE (rcente est celle que vous devez utiliser quand lutilisation du IF devient dlicate (essentiellement au del de deux imbrications) FORMAT GENERAL : Id-1 Litt-1 EVALUATE expr-1 TRUE FALSE WHEN phrase-1 inst-imp-1.
24

[WHEN END-EVALUATE

OTHER

inst-imp-2]

Linstruction value lgalit de lentit qui suit EVALUATE avec lune des phrases suivant WHEN. Si aucun WHEN na t slectionn, et si WHEN OTHER est crit, on effectue inst-imp-2, sinon on passe directement linstruction qui suit END-EVALUATE. Exemple 1 EVALUATE A WHEN 1 WHEN 2 WHEN OTHER END-EVALUATE. PERFORM P1 PERFORM P2 PERFORM P3

Si A = 1 on excute P1 et on continue aprs le END-EVALUATE, sinon, si A = 2 on excute P2. Dans tous les autres cas on excute P3. Exemple 2 EVALUATE A + B = 10 WHEN TRUE PERFORM P1 WHEN FALSE PERFORM P2 END-EVALUATE.

25

CHAPITRE IX NOTION DE PARAGRAPHES STRUCTURE DE REPETITION (TQ) INSTRUCTION GO TO INSTRUCTION PERFORM SIMPLE *********
I NOM DE PARAGRAPHE Un nom-de-paragraphe est un mot choisi par lutilisateur qui dsigne un paragraphe de la PROCEDURE DIVISION . Ces noms sont forms selon la mme rgle que les identificateurs de donnes. Ce sont les seuls noms commenant en marge A (colonne 8). Ils sont immdiatement suivis dun point. II INSTRUCTION TANT QUE : 1re TRADUCTION Il sagit de traduire le schma itratif TQ Exp. Cond. TQ IF NOT (E.C.) GO TO FTQ END-IF. (Col 8) GO TO TQ. FTQ FTQ.

On introduit de mme coup linstruction GO TO nom-de-paragraphe. Dont le fonctionnement rend vident le rle des noms-paragraphe. Comme pour les instructions IF imbriques, il faut fournir une traduction de plusieurs TQ imbriqus :

26

Algorithmique TQ1 TQ2 EC1 EC2. TQ2. FTQ2 FTQ2. col 8 TQ1.

Une traduction COBOL col12 IF NOT (EC1) GO TO FTQ1 END-IF. IF NOT (EC2) GO TO END-IF.

FTQ1. FTQ2. TQ3 EC3. FTQ1. FTQ3 TQ3.

GO TO TQ2

GO TO TQ1.

IF NOT (EC3) GO TO FTQ3 END-IF. GO TO TQ3 FTQ3.

27

III NOTION D'ACTION SANS PARAMETRES VERBE PERFORM La notion de paramtre n'existe pas en COBOL. Seules les actions sans paramtre et ne retournant aucun rsultat sont possibles. Les actions manipulent donc des variables globales. A chaque action algorithmique, nous allons faire correspondre une SECTION de PROCEDURE DIVISION. La PROCEDURE DIVISION commenant obligatoirement par la PRINCIPALE SECTION : action principale (correspondant au main java ou C). L'appel d'action s'crit alors : PERFORM nom-de-section Chacune de ces sections sera structure comme suit : PROCEDURE DIVISION. PRINCIPALE SECTION. DEBUT. Instructions cobol PERFORM TRAVAIL1. Instructions cobol. FIN. STOP RUN. Suivi des diffrentes sections correspondant aux sous-actions du programme : TRAVAIL1 SECTION. DEBUT. Instructions cobol. PERFORM TRAVAIL2. Instructions cobol. FIN. EXIT. TRAVAIL2 SECTION. DEBUT. Instructions cobol. FIN. EXIT. D'autres formes du PERFORM sont pour leur part, intressantes : PERFORM nom-de-section UNTIL condition.

La forme ci-dessus correspond exactement la structure tant-que algorithmique la ngation du test prs : la condition cite est celle d'arrt, alors que celle du tant-que indique de continuer. Nous dtaillons cette forme du PERFORM dans le paragraphe suivant. PERFORM nom-de-section VARYING nom-de-variable FROM valeur1 BY valeur2 UNTIL condition.
28

La forme ci-dessus correspond la structure for de Java ou du C. La section sera effectue tant que la condition est fausse, la variable initialise valeur1 tant incrmente chaque excution de la section d'une valeur valeur2. Plus simplement : la forme suivante rpte n fois une section donne : PERFORM nom-de-section valeur TIMES Dans les exemples prcdents, les valeurs sont des entiers ou des variables numriques. L'utilisation de sections pour l'instruction PERFORM permet une meilleure structuration des programmes. De plus, elle permet d'utiliser des noms de paragraphes locaux la section (TQ, FTQ etc). NOUS VOUS CONSEILLONS L'UTILISATION SYSTEMATIQUE DES SECTIONS. Malheureusement, ce conseil n'est parfois pas suivi. En effet, le COBOL possde des prsentations diffrentes de l'instructions PERFORM : PERFORM nom-de-paragraphe. N'excute que le paragraphe mentionn.

PERFORM paragraphe1 THRU paragraphe2. Excute le contenu des paragraphes 1 2. Dans ce cas le paragraphe2 doit tre dduit l'instruction EXIT. IV TRADUCTION DU TQ . Le PERFORM non-section UNTIL cond-1 END-PERFORM permet de donner un quivalent du TQ de lalgorithmique. Exemple I 1 TQ I <10 ss+v i i+1 Ftq Suite BOUCLE SECTION DEBUT. ADD V TO S. ADD 1 TO I. FIN. EXIT. MOVE 1 TO 1 PERFORM BOUCLE UNTIL I > 10 END-PERFORM suite

29

On peut viter lappel une section comportant aussi peu dinstructions en supprimant le nom BOUCLE ; Voici lcriture la plus proche de ce que vous crivez en cours dalgorithmique : MOVE 1 TO I. PERFORM UNTIL I > 10 ADD S TO V ADD 1 TO I END-PERFORM. Exemple de traitement dune file de caractres termine par un caractre fix lavance (*) Algorithmique Cobol 77 ZONE PIC X. en PROCEDURE DIVISION Lire zone TQ. TQ zone # * traiter-zone (action) IF ZONE = * GO TO FTQ. PERFORM TRAITER-ZONE ACCEPT ZONE lire zone FTQ. FTQ. Ou ACCEPT ZONE PERFORM UNTIL ZONE = " * " PERFORM TRAITER-ZONE END-PERFORM END-PERFORM. TRAITER-ZONE. ACCEPT-ZONE. EXIT. GO TO TQ. ACCEPT ZONE

30

CHAPITRE X COMPLEMENTS SUR LES STRUCTURES (NIVEAUX) CONSEQUENCES POUR LE VERBE MOVE
******* RAPPEL : Une structure ( article ) est le regroupement dinformations de types divers. COBOL permet la description en faisant ressortir ltat de la hirarchie qui relie ces donnes lmentaires. Une donne est donc crite par : 1) 2) 3) Un numro-de-niveau Une rfrence symbolique (nom-donne) Des attributs permettant de prciser la forme de cette donne.

I LES NUMEROS DE NIVEAUX (ou nombres-niveau) Un systme de numros-de-niveau prcise lorganisation des donnes lmentaires. Le niveau le plus gnral de la structure est 01. Les donnes internes reoivent un numro suprieur (pas ncessairement conscutif) allant de 02 49. Exemple : 1
CARTE DIDENTITE

NUM INSEE

NOM

ADRESSE

CODE POSTAL

RUE

VILLE

(4

DEP

SEQ

31

Se traduira en COBOL 01 CART-IDENT. 02 NUM-INSEE PIC 9(13). 02 NOM PIC X(20). ou 01 CART-IDENT. 02 FILLER PIX X(33). 02 ADRESSE. 03 CODPOS. 04 DEP PIC 99 04 SEQ PIC 999 . 03 RUE PIC(22). 03 RUE PIC X(22). 03 VILLE PIC X(20). 03 VILLE PIC X (20)

02 ADRESSE 03 CODPOS PIC 9(5). .

A partir de lune de ces descriptions, tout mouvement (MOVE) partiel ou global est possible condition que des zones correspondantes existent. Ex. : 01 LIGNE1. 02 ADRESSE1 PIC X(47). permet le transfert MOVE ADRESSE TO ADRESSE1.

32

CHAPITRE XI LA CLAUSE PICTURE LA CLAUSE BLANK WHEN ZERO


*********** I FONCTION DE PICTURE Cette clause dfinit la catgorie dune donne lmentaire et ses caractristiques ddition. FORMAT GENERAL : PICTURE IS PIC CETTE CLAUSE NE PEUT ETRE UTILISEE QUAU NIVEAU ELEMENTAIRE. II PICTURE DE TRAITEMENT A DONNEE ALPHABETIQUE A(n) n 120 en gnral domaine restreint aux lettres de lalphabet et de lespace (rarement utilise). B DONNEE NUMERIQUE 9,S,V Le contenu de la donne est une combinaison de dix chiffres de 0 9, plus ventuellement un signe algbrique. Cette picture permet deffectuer toutes les oprations arithmtiques sur de telles zones. Ex : 9(n) S9(n) 9(n)V9(m) S9(n)V9(m) O < n <= 18 reprsente un entier positif O < n <= 18 reprsente un entier sign O < n + m <= 18 reprsente un nombre dcimal non sign O < n + m <= 18 reprsente un nombre dcimal sign. Chane-de-caractres

33

Exemples : 77 I 77 J PIC 9(5). PIC S9(8).

77 K PIC 9(8)V99. 77L PIC S9(7)V9(4).

C DONNEE ALPHANUMERIQUE X(n) n <= 120 en gnral Le contenu dune telle donne est form de caractres quelconques du jeu de caractres du calculateur. Il est hors de question de faire subir des oprations arithmtique de telles donnes ! III PICTURE DEDITION La chane-de-caractres dune telle donne est limite certaines combinaisons des 13 symboles suivants en plus du symbole montaire. B / V Z O 9, . + - * CR DB Les symboles S, V, . , CR, DB ne peuvent figurer quune seule fois.

34

A IMPRESSION DUN SIGNE Ex -9(4) limpression 9(4)+ +9(4) + 9(4)+ 9(4)CR 9(4)DB si valeur < O B LES SYMBOLES , ET . Le symbole , reprsente la position o une virgule sera insre. Cette position est compte dans la longueur de la donne. Le symbole . figure la marque dcimale pour le cadrage, il ne doit pas tre le dernier de la chane-de-caractres. Ex : 9(4) , 9 9 permet dditer une donne en sparant en 2 parties sans rien prsupposer de la donne interne . CR DB si valeur > O bb _ b _ b

9(4).99 permet dditer sou la forme

et ncessite une picture de la zone mettrice avec un symbole V car le cadrage se fera du V sur ..

C LES SYMBOLES Z et * Ce sont les symboles de tte de chane-de-caractres permettant respectivement : Pour Z de supprimer tous les zros de gauche non significatifs. Pour * de marquer une protection (usage bancaire) par apparition du caractre * en lieu et place des zros de gauche non significatifs.

35

Ex : 77 77 I PIC Z(4) Valeur 0123 ldition b123 Valeur 0000 bbbb ldition

J PIC *(3)99 Valeur

00001 00000 00134 12345 D LE SYMBOLE MONETAIRE $

***01 ***00 **134 12345

Ce symbole (ainsi que le + ou -) peut-tre utilis de manire fixe ou flottante : $999 valeur 1 $(4) valeur 1 $(4) valeur dition $001 dition bb$1 dition bbbb Ceci permet de faire coller le signe la valeur significative de la donne. E LES SYMBOLES B, O et / Ces trois caractres reprsentant une position dun caractre dans lequel on insrera : un blanc ou espace (B) un zro (0) un slash (/)

Ex : 77 DATES PIC 99/99/99

fournira ldition 12/30/45

36

Lusage du B peut-tre intressant dans le cas suivant : 01 LIGNE1. 02 Z1 PIC X(9)B(10). 02 Z2 PIC X(10)B(43). Remplace 01 LIGNE1. 02 Z1 PIC X(9). 02 FILLER PIC X(10) VALUE SPACES. 02 Z2 PIC X(10). 02 FILLER PIC X(43). VALUE SPACES. IV LA CLAUSE BLANK WHEN ZERO. Cette clause, ajoute aprs la PICTURE, permet dliminer tous les caractres parasites insrs lorsque la zone diter est nulle. Format gnral : BLANK WHEN ZERO. Ex : 77 77 SOMME PIC 9(5)V99. SOM-EDIT PIC $$$B$$$9.99.

Si SOMME contient une valeur nulle et que lon fasse le transfert MOVE SOMME TO SOM-EDIT, on obtiendra : $0.00 Par contre, si lon dsire ne rien avoir on dcrit SOM-EDIT de la manire suivante : 77 SOM-EDIT PIC $$$B$$9.99 BLANK WHEN ZERO.

Lors de ldition, on nobtient que des espaces. Le seul symbole dincompatibilit est *.

37

CHAPITRE XII LES CLAUSES OCCURS, VALUE, REDEFINES (DATA DIVISION) ******** LE VERBE INITIALIZE (Procdure Division)
I LA CLAUSE VALUE Elle permet de dfinir la valeur initiale dune donne : constante figurative Format gnral Ex : 77 EXP PIC S9V9(5) VALUE 2.71828. 77 TITRE PIX X(12) VALUE FIN DU COURS. 01 STRUC. 1 CPT PIC 9 VALUE ZERO. VALUE IS littral

02 LIBEL PIC X(30) VALUE SPACES. La clause VALUE ne doit pas tre utilise dans une rubrique de description de donnes contenant une clause OCCURS ou REDEFINES. II LA CLAUSE OCCURS Elle permet dviter de dcrire sparment des donnes qui se rptent ; elle dfinit le nombre de ces rptitions et donne les informations ncessaires lemploi dindices. On dcrit donc des groupes de donnes composs dlments simples ayant tous des attributs identiques, puis, par gnralisation, on peut aussi crer des tableaux de structure .

38

A DESCRIPTION DUN VECTEUR TABLE-EX

EL(1)

EL(3)

EL(9)

Un tel groupe de donnes sera dcrit par : 01 TABLE-EX. 2 EL PIC 9(2) OCCURS 9 TIMES.

Dans la procdure division, un lment peut-tre recherch partir dun indice entier. Ex : ADD 1 TO EL (4). Ou MOVE 7 TO J. ADD 1 TO EL (J)

J tant un entier positif dcrit en WORKING-STORAGE SECTION ou en FILE SECTION. B TABLE A 2 OU 3 INDICES TABLE-EX-2 KNOT(2,1) KNOT(9,2)

EL(1)

EL(2)

EL(9)

Cest, par exemple, le cas o chaque lment du vecteur prcdent est son tour dcompos en lments conscutifs de mme type et de mme longueur.

39

Cette structure sera dcrite par : 01 TABLE-EX-2. 02 EL OCCURS 9. 03 KNOT PIC 99 OCCURS 3. On en dduit immdiatement lextension 3 indices. Dans la procdure division, on utilisera un lment KNOT de la faon suivante SUBTRACT 3 FROM KNOT(9.2) mais aussi un lment EL : MOVE 111111 TO EL (2). RAPPEL : pas de VALUE avec (ou sous) une clause OCCURS. C TABLE DE STRUCTURES TABLE-EX-3 NOM(1) NOM(2) AGE(2)

ETUD(1) sera dcrite par : 01 TABLE-EX-3.

ETUD(2)

ETUD(9)

02 ETUD OCCURS 9. 03 NOM PIC X(7) 03 AGE PIC 99. Naturellement, toute donne figurant dans la description dune zone en OCCURS doit tre convenablement indice. Ex : MOVE MARCEL TO NOM(2) MOVE 27 TO AGE(1) mais aussi MOVEMARCELb38TO ETUD(9). III LA CLAUSE REDEFINES
40

Elle permet de dcrire une zone de mmoire de diffrentes manires. FORMAT GENERAL numro-de-niveau n-d-1 REDEFINES n-d-2. REGLES DE SYNTAXE : 1) Cette clause suit immdiatement n-d-1 2) Les deux numros-de-niveau sont identiques 3) La clause ne peut semployer au niveau 01 de la FILE SECTION 4) Il ne doit pas y avoir dOCCURS dans la rubrique n-d-2 Exemple : 01 ZONE-PAYE-1. 02 NO-CLIENT PIC X(6) 02 NOM PIC X(8). 02 MONTANT PIC 9(6)V99. 02 DATE. 03 MOIS PIC XX. 03 AN PIC XX. 01 ZONE-PAYE-2 REDEFINES ZONE-PAYE-1. 02 NUM-C PIC 9(6). 02 VILLE PIC X(15). 02 CO-POST PIC 9(5). 01 ZONE-PAYE-3 REDEFINES ZONE-PAYE-1. 02 FILLER PIC X(6). 02 TOTAL PIC 9(8)V99. 02 ANNEE PIC XX. 02 FILLER PIC X(8). CONSEIL : Il faut videmment se donner les moyens de savoir dans quel type de structure on se trouve (par un test sur une partie de la zone redfinie par exemple). IV EXEMPLES DUTILISATION SIMULTANEE DES 3 CLAUSES VALUE, OCCURS, REDEFINES.
41

INITIALISATION DUNE TABLE sans faire appel laffectation en PROCEDURE DIVISION. Il est impossible de faire suivre la clause OCCURS de la clause VALUE, do la manire dinitialiser une table au moyen de REDEFINES (attention : usage rserv aux tables de petites dimensions). 01 TABSEM. 02 SEMAINE PIC X(56) VALUE LUNDIbbbMARDIbbbMERCREDI JEUDI DIMANCHE. 02 SEM-BIS REDEFINES SEMAINE. 03 JOUR PIC X (8) OCCURS 7. V LE VERBE INITIALIZE Ce verbe rcent permet dinitialiser les donnes spcifies selon leur NATURE, par dfaut : alphabtiques et alphanumriques : SPACE numriques : ZERO Les zones FILLER sont ignores. FORMAT GENERAL INITIALIZE REPLACING id-m lett-1 Ce verbe se rvle particulirement utile pour les grilles dcran et les structures de Workingstorage section. iden-1 [ident-2] BY

ALPHANUMERIC NUMERIC NUMERIC-EDITEM

42

CHAPITRE XIII LES FICHIERS * GENERALITES

I QUELQUES DEFINITIONS A ENREGISTREMENT LOGIQUE (ARTICLE) Cest un ensemble dinformations lmentaires organis et choisi par le programmeur. B FICHIER Cest un ensemble denregistrements logiques stock sur un support informatique. C INDICATIF (CLEF) Trs souvent, chaque article possde une zone privilgie qui sert dindicatif repre. Tous les indicatifs sont en principe diffrents dans le fichier. D SUPPORTS * Clavier, cran, cartes perfores, imprimante, cassettes. * Bandes, disques, disquettes, cartouches magntiques. E DEROULEMENT DUNE ENTREE/SORTIE Toute opration de lecture (entre) ou dcriture (sortie) entre un organe priphrique et lunit centrale est une opration TRES LONGUE, vis vis des temps de traitements en U.C. (rapport facilement suprieur 1000). II NOTION DENREGISTREMENT PHYSIQUE (BLOC) Cest lensemble dinformations transmises dun seul coup en une opration entre/sortie. Ex : * 1 ligne dimprimante Dans le cas des supports magntiques (bandes, disques) on a intrt regrouper des articles trop courts pour former un bloc lu en une seule fois. Dans les langages volus (COBOL, PL/1, FORTRAN, PASCAL, BASIC , JAVA), les ordres de lecture/criture correspondent toujours des enregistrements logiques. DEFINITION : Le nombre denregistrements logiques contenus dans un enregistrement physique est appel le FACTEUR DE GROUPAGE (ou de BLOCAGE).

43

Cette notion prsente peu dintrt au niveau des micro-ordinateurs. Elle peut-tre importante fixer sur moyens ou gros systmes. EXEMPLES : Soit un fichier muni dun facteur de blocage = 10 Lire (fichier) 1re lecture (en Mmoire Centrale) TQ non dernier (fichier) TRAITER Lire (fichier) FTQ Seule, la 11me lecture dclenchera une nouvelle lecture physique. Avantage du systme prcdent : On divise pour ce programme les temps dE/S par 10. Inconvnient : Pour les E/S sur ce fichier, il faut un buffer 10 fois plus grand. III DIFFERENTS TYPES DE FICHIERS 1) Fichiers enregistrement de longueur fixe : ceux dont tous les enregistrements logiques ont le mme nombre de caractres. 2) Fichiers enregistrement de longueur variable : on gre une zone permettant dcrire ou de lire des enregistrements de longueur variable (<= longueur maximale connue). (Dans ce second cas, le programmeur peut avoir grer cette longueur dans une zone de WORKING-STORAGE SECTION, en COBOL). IV UTILISATION DUN FICHIER PAR PROGRAMME COBOL Un fichier est caractris par certains ATTRIBUTS qui sont associs ce dernier sa cration et ne seront pas remis en cause au cours de la vie de ce fichier. Lattribut majeur est son ORGANISATION : * squentielle * relative * squentielle indexe. 1 2 10

10 articles sont lus en une seule fois

44

Les autres attributs peuvent tre : une cl, le maximum de longueur de lenregistrement logique, des conventions de labe, le type de lenregistrement (fixe ou variable), le facteur de groupage. A ORGANISATION SEQUENTIELLE Un tel fichier est organis de telle faon que chaque enregistrement a un unique successeur (sauf le dernier !). La relation de succession est tablie lors de la cration du fichier (ordre WRITE). En dehors de la consultation et de la modification darticles, la seule chose que lon puisse faire sur un tel fichier est de rajouter des enregistrements aprs le dernier. Un fichier squentiel sur disque (ou disquette) peut-tre mis jour sur place , ce qui nest pas le cas du mme fichier sur bande (ou cassette). B ORGANISATION RELATIVE (DISQUE, DISQUETTE) Cest un fichier pour lequel chaque enregistrement peut tre rang, ou retrouv, en fournissant la valeur de son numro relatif denregistrement. Le dixime enregistrement est repr par le numro 10 qui sera charg dans une zone adquate de WORKING-STORAGE SECTION, P par exemple, qui sera explicitement la cl daccs ce fichier (voir plus loin lutilisation pratique). C ORGANISATION INDEXEE (DISQUE, DISQUETTE) Cest un fichier dans lequel chaque enregistrement est caractris par la valeur dune clef spcifique (indicatif) figurant dans lenregistrement. Pour chaque cl, un index est maintenu. Il existe donc des Tables dindex associes au fichier lui-mme. Chaque index permet laccs un enregistrement quelconque du fichier. Le fichier est cr de telle manire quil puisse aussi tre utilis en squentiel pur.

45

CHAPITRE XIV PRIMITIVES SUR LES FICHIERS EN COBOL


********** I OUVERTURE DE FICHIER OPEN 1) OPEN OUTPUT nom-de-fichier : ordre utilis pour une cration de fichier (M.C. priphrique). 2) OPEN INPUT nom-de-fichier : utilis pour la lecture (consultation) de fichier (priphrique M.C.). 3) OPEN I-O nom-de-fichier : utilis pour mettre jour des enregistrements dun fichier dj existant (priphrique M.C.). 3) OPEN EXTEND nom-de-fichier : utilis pour rajouter de nouveaux articles un fichier dj existant. II FERMETURE DE FICHIER CLOSE Cest une des instructions les plus courtes crire : CLOSE nom-de-fichier mais elle prend beaucoup de temps lexcution. Il est possible, dans un programme, douvrir et de fermer un fichier plusieurs fois, MAIS : * on ne peut ouvrir un fichier que sil est ferm * on ne peut fermer un fichier que sil est ouvert. Au dbut de lxcution dun programme, tous les fichiers sont ferms. III PRIMITIVES ET ORGANISATION 1 FICHIERS SEQUENTIELS OPEN OUTPUT EXTEND (tout support) permet louverture dun fichier pour utiliser

WRITE (criture) OPEN OPEN INPUT (tout support) permet la lecture squentielle par lordre READ I-O (disque, disquette) permet la mise jour par lutilisation successive :

- dune lecture (READ)


46

- dune modification de lenregistrement lu - dune rcriture (REWRITE) 2 - FICHIERS RELATIFS ET SEQUENTIELS INDEXES OPEN OUTPUT : WRITE (criture cration) OPEN OUTPUT : READ (lecture consultation) OPEN I-O : 1) READ (lecture consultation) 2) WRITE (ajout dun nouvel enregistrement) READ 3) Modification (modification du dernier enregistrement lu) REWRITE 4) DELETE permet de dtruire logiquement un enregistrement. IV TRAITEMENT COURANTS SUR LES FICHIERS Notations fichier situ sur un support informatique

opration manuelle ou excution dun programme 1) CREATION -saisie manuelle (clavier cran) -saisie automatique (lecture optique, magntique)

fichier utilisable par un programme -----

47

2) CONTROLE ------ Fichier contrler

----- Programme de contrle

fichier sans ---erreurs 3) DUPLICATION

----- Fichiers des erreurs

Cette opration est essentielle pour les sauvegardes ------- -version pre du fichier

-programme utilitaire fourni par le constructeur (COPY) ------ -prog COBOL crit par lutilisateur

------ version fils du fichier

48

4 -Tri (SORT) ---- fichier tri (sur 1 critre) ou non tri fichier de travail -----(gr par le systme) -prog de tri utilitaire constructeur verbe SORT du COBOL

--- fichier tri sur certaines critres

- 2 niveaux de tri : critre majeur, mineur 3 niveaux de tri : critre majeur, intermdiaire, mineur.

5 Fusion (MERGE) ---interclasser F1 F2 Fn ou fusionner (au moins 2) ---- fichiers

---

- prog utilitaire de fusion - prog crit par lutilisateur

Fr

-----

fichier rsultant

6 Eclatement (plus rare) Schma inverse du prcdent, en gnral cest le mme utilitaire avec dautres options.

49

7 Mise jour fichier Squentiel --- fichier permanent --- fichier mouvement Schma extrmement frquent

---- programme utilisateur

---- nouveau fichier permanent

8 Mise jour fichier relatif ou squentiel index fichier ---permanent (S.I ou relatif) --- fichier mouvement (Squentiel) Schma trs frquent --- programme utilisateur

50

CHAPITRE XV TRAITEMENT DES FICHIERS SEQUENTIELS EN COBOL


******* I INTRODUCTION Pour chaque fichier, il faut dfinir le type de support lorganisation physique le facteur de groupage le type daccs (relatif, squentiel index) la longueur et la structure des enregistrements.

Ces descriptions se font dune part dans lENVIRONMENT DIVISION, de lautre dans la DATA DIVISION. II DESCRIPTION DANS LENV. DIV. A lintrieur de cette division on cre une section (INPUT-OUTPUT SECTION). Et un paragraphe FILE-CONTROL. Tous deux crits en colonne 8. Pour chaque fichier utilis dans le programme on va trouver dans ce paragraphe une description commenant par le mot SELECT. FORMAT GENERAL : SELECT nom-de-fichier IS ASSIGN TO nom-externe (1) SEQUENTIAL

ORGANIZATION

FILE STATUS

IS

nom-donne-1

51

* Sur lAS/400 un nom externe courant aura la forme DATABASE-nom-de-fichier (fichier sur disque) ou PRINTER-QSYSPRT (fichier imprimante). La clause FIL STATUS sera vue ultrieurement. III DESCRIPTION DANS LA DATA DIVISION A chaque fichier est associe, dans une nouvelle Section (FILE SECTION), une rubrique FD (File description). Cette dernire comporte un certain nombre dattributs ainsi quune ou plusieurs rubriques de description de donnes, dcrivant le ou les articles du fichier. FORMAT GENERAL FD nom-de-fichier n-d-1 VALUE OF FILE IS littral

RECORDS BLOCK CONTAINS entier-1 CHARACTERS OMITTED IS STANDARD IS Nom-Enr-1 Nom-Enr-2 ]

LABEL

RECORD

[ DATA RECORD

[ LINAGE Clause ] voir plus loin.

01
description de structure classique mais sans VALUE Lordre dcriture des clauses de la rubrique FD na pas dimportance. La clause DATA RECORD fournit, titre de documentation le ou les noms darticles associs au fichier.

52

Seule la clause LABEL est obligatoire. Cas particulier dun fichier imprimante (utilisation de la clause LINAGE) Le cobol 74 a introduit pour les fichiers ddition certaines possibilits de mise en page : Clause LINAGE : n-d-1 LINAGE IS entier-1 n-d-2 WITH FOOTING AT entier-2 n-d-3 LINES AT TOP entier-3 n-d-4 LINES AT BOTTOM entier-4 Entier-1 : dsigne le nombre de lignes maximum crites sur chaque page de ltat. Entier-2 : dsigne le numro de ligne partir de laquelle seront dites les lignes de bas de page (FOOTING). On doit respecter 0 < entier-2 < = entier-1 Entier-3 : dsigne le nombre de lignes non crites en tte de page (TOP) Entier-4 : dsigne le nombre de lignes non crites en bas de page (BOTTOM) Entier-3 LINES

FOOTING Entier-2

Entier-1

Entier-4 NB : Page peu utile dans un premier temps IV LES VERBES DE TRAITEMENT (PROCEDURE DIVISION) A Le verbe OPEN
53

FORMAT GENERAL : OPEN INPUT OUTPUT EXTEND I-O nom-de-fichier-1. nom-de-fichier-2. nom-de-fichier-3. nom-de-fichier-4

Il nest pas obligatoire douvrir tous les fichiers en mme temps. Mais chaque fichier utilis doit tre ouvert avant utilisation. EXTEND permet dajouter des enregistrements en fin de fichier. I-O permet la fois de lire (READ) des enregistrements dun fichier puis de les rcrire la mme place par un ordre REWRITE. B Le verbe CLOSE Un ordre de fermeture doit tre donn pour tous les fichiers utiliss, donc ouverts, avant la fin du programme. FORMAT GENERAL : CLOSE C Le verbe READ Cette instruction (utilisable aprs un OPEN INPUT ou I-O) dlivre un enregistrement logique au programmeur par lintermdiaire de la description faite en FILE SECTION. FORMAT GENERAL : READ nom-de-fichier RECORD INTO nom-donne AT END instruction END-READ. La clause AT END est obligatoire dans presque tous les systmes, [mais sur lIBM-PC, elle est optionnelle]. Toutefois il est conseill de toujours la mettre. La clause INTO nom-donne signifie que le programmeur ne dsire pas travailler en zone buffer, mais dans une zone de WORKING-STORAGE SECTION ou de FILE SECTION. Cest le cas lorsque lon doit comparer des enregistrements successifs. nom-de-fichier-1..

54

D Le verbe WRITE Ce verbe permet dcrire un enregistrement logique sur un fichier, partir de ce qui est fabriqu en mmoire centrale. On se mfiera ici de la syntaxe COBOL : On lit un FICHIER On crit un ENREGISTREMENT

FORMAT GENERAL WRITE BEFORE ADVANCING AFTER END-WRITE. Pour les fichiers sur disques la forme la plus courante est WRITE ENREG, ENREG tant dfini au niveau 01 de FILE SECTION. FROM n-d-1 revient effectuer un MOVE depuis n-d-1 vers la zone buffer avant lordre WRITE. Les autres options concernent ldition (donc des fichiers en ASSIGN .. PRINTER). Il faut choisir une option AFTER ou BEFORE et la garder pour tous les WRITE sur le mme fichier. entier dsigne le nombre de lignes blanches avant lcriture (AFTER) ou aprs lcriture (BEFORE). La valeur zro implique une surimpression. Entier est limit 120. PAGE commande le passage la page suivante. Si la clause LINAGE a t utilise en FD, limprimante est positionne en fonction de cette clause. nom-denreg [FROM n-d-1] n-d-2 entier PAGE LINES

55

E Le Verbe REWRITE FORMAT GENERAL REWRITE nom-enregistrement FROM n-d-a END-REWRITE. Lenregistrement prcdemment lu par un ordre READ est rcrit aprs modifications ventuelles la mme place (supports disquettes ou disques).

56

CHAPITRE XVI USAGES ETENDUS DES VERBES ACCEPT, DISPLAY LES COMPTEURS SPECIAUX
****** I LE VERBE ACCEPT Nous avons dj vu le format le plus simple (ACCEPT) nom-donne), il en existe deux autres :

A:
DATE ACCEPT nom-donne-1 FROM TIME Instruction qui permet daffecter nom-donne-1 la valeur - du compteur DAY (sous la forme YYQQQ. c.a.d. anne, quantime de lanne) - du compteur DATE (sous la forme YYMMJJ . c.a.d. anne, mois, jours) - du compteur TIME (sous la forme HHMMSSCC, heures, minutes, secondes, centimes) Il existe aussi la possibilit daller chercher une donne particulire sur le pupitre principal du systme (CONSOLE). Exemple : ACCEPT nom-donne-1 FROM CONSOLE. DAY

57

B-*
ACCEPT position sur cran SPACE-FILL WITH ZERO-FILL RIGHT-JUSTIFY nom-donne LEFT-JUSTIFY

PROMPT TRAILING-SIGN UPDATE AUTO-SKIP BEEP

LENGTH-CHECK EMPTY-CHECK NO-ECHO

ATTENTION , ce paragraphe B nest utile que pour le COBOL-MICROSOFT sur mini ordinateur ! !

Ce format est destin lentre de donnes partir dun cran lorsquon nutilise pas la gestion plein cran (SCREEN SECTION). Etudions dans lordre ces divers attributs : 1) Position sur cran Le 1er caractre ( gauche) de la zone est dfini par ses coordonnes ligne (LIN) et colonne (COL) suivant le format : ( LIN [{ + } entier-1] , COL [{ + } entier-3] ) (entier-2 , entier-4)

LIN, COL sont des compteurs spciaux COBOL, quil ne FAUT pas dclarer et qui ne sont pas affichables directement. ENTIER-2, ENTIER-4 indiquent un adressage direct du curseur. Lusage de LIN+2 ou COL-4 signifie que lon se positionne 2 lignes plus bas ou 4 colonnes plus gauche par rapport la dernire position du curseur. Si lon omet la position de LIN, ou celle de COL, on reste au mme niveau sur la coordonne manquante.

58

2) SPACE-FILL Sadresse aux zones alphanumriques et signifie que les caractres non remplis sont complts par des espaces. 3) ZERO-FILL Sadresse aux zones numriques non remplies entirement et compltes par des zros. 4) RIGHT JUSTIFY Permet de cadrer DROITE une zone de caractres (habituellement cadre gauche) 5) TRAILING-SIN Signifie que le signe + ou - apparatra la droite de la zone au lieu de la gauche. 6) PROMPT - Zone alphanumrique : des points dsignant ltendue des caractres de la zone. - Zone numrique : un tiret pour chaque chiffre, un point pour marquer le point dcimal, un blanc pour le signe. 7) UPDATE Signifie que lon affiche la valeur modifier de nom-donne. 8) LENGTH-CHECK Impose le remplissage intgral de la zone. 9) EMPTY-CHECK Impose dentrer au moins un caractre 10) AUTO-SKIP Evite le return ds que la zone dcran est remplie. 11) BEEP Evident ! prvient lutilisateur par une sonnerie quil faut entrer la donne.

59

12) NO-ECHO Marque chaque caractre entr par une astrisque (*) Exemple 05 RS PIC X(8) (Contenu initial ABCDEFGH) Si lon excute ACCEPT (1,b1) RS WITH PROMPT Situation de lcran Oprateur entre le N Oprateur entre O,N,E Oprateur tape Return N. NONE NONEbbbb

Valeur en mmoire NONEbbbb II LE VERBE DISPLAY (USAGE rserv au COBOL Microsoft sur micro-ordinateur DISPLAY [position-sur-cran] ERASE identificateur littral

[UPON nom-rserv] prcis dans le paragraphe SPECIAL NAMES (par exemple CONSOLE) - position-sur-cran a la mme signification que pour ACCEPT - ERASE permet deffacer lcran depuis la position spcifie jusqu la fin.

60

Exemples : DISPLAY (1,b 1) ERASE efface tout lcran DISPLAY (10, b 12) ZONE affiche ZONE sur la 10 ligne partir de la 12 colonne III LES COMPTEURS SPECIAUX Ce sont des identificateurs que le programmeur peut utiliser sans avoir les dcrire en DATA DIVISION. 1) LINAGE-COUNTER : Dsigne un compteur entier sans signe gnr automatiquement par la clause LINAGE. Ce compteur suit ensuite le positionnement des lignes dans la page impos par lordre WRITE. 2) DATE : Dsigne une zone PIC 9(6) contenant la date du jour sous la forme dj explique YYMMJJ. 3) DAY : Dsigne une zone PIC 9(5) contenant la date du jour sous la forme YYQQQ. 4) TIME : Dsigne une zone PIC 9(8) contenant lheure sous la forme HHMMSSCC. Ces compteurs sont normaliss depuis 1974, mais il est possible de les trouver sous dautres noms sur certains systmes.

61

CHAPITRE XVII STRUCTURE DETAILLEE DU PROGRAMME COBOL


******* Ce chapitre permet de consolider la vue densemble sur la structure complte dun programme COBOL. I IDENTIFICATION DIVISION IDENTIFICATION DIVISION. PROGRAM-ID.b nom-programme. [AUTHOR. b rubrique commentaires.] [INSTALLATION. b rubrique commentaires.] [DATE-WRITTEN. b rubrique commentaires.] [DATE-COMPILED. b rubrique commentaires.] [SECURITY. b rubrique commentaires.] II ENVIRONMENT DIVISION Elle existe dans tout programme COBOL et contient - des informations relatives lordinateur utilis (CONFIGURATION SECTION) - des informations relatives aux traitements des Entres Sorties (INPUT-OUTPUT SECTION) Do le format gnral de cette division : ENVIRONMENT DIVISION. [CONFIGURATION SECTION]. [SOURCE-COMPUTER. b rubrique dordinateur source]. [OBJECT-COMPUTER. b rubrique dordinateur rsultant]. [SPECIAL-NAMES. b rubrique de noms spciaux.] [DECIMAL POINT IS COMA]. [INPUT-OUTPUT SECTION.] FILE-CONTROL. b rubrique de FILE-CONTROL. (phrases SELECT) [I-O-CONTROL. b rubrique dI-O-CONTROL.]

62

III DATA DIVISION Cette division fondamentale en COBOL comporte deux sections principales FILE SECTION, WORKING-STORAGE SECTION et deux sections moins frquemment utilises, LINKAGE SECTION et SCREEN SECTION. Lorganisation gnrale est : Col 8 DATA FILE FD 1 Col 12 DIVISION SECTION Nom-de-fichier (Description de fichier) Nom denregistrement (Description denregistrement)

WORKING-STORAGE SECTION. 77 Nom-donne (Description de zones lmentaires : . indpendantes).

01 Nom-de-groupe Description des structures). LA LINKAGE SECTION, qui permet de dclarer des zones de mmoire utilises par plusieurs programmes successifs communicants sera vue en dtail dans le chapitre sur les sous programmes externes. LA SCREEN SECTION permet de grer les donnes affiches sur lcran sous forme de grille dcran . Elle sera tudie en dtail ultrieurement. IV PROCEDURE DIVISION Elle regroupe les vritables instructions spcifiques au traitement. Comme les autres divisions, elle peut-tre divise en SECTIONS, mais cest relativement peu utilis. Les noms paragraphes servent dadresses dinstructions du programme en mmoire centrale et apparaissent en marge A dans cette partie. Les instructions sont des phrases COBOL, inscrites partir de la marge B. Signalons, quventuellement, le programmeur peut dbuter par des sections DECLARATIVES, dtailles ultrieurement elles aussi.

63

CHAPITRE XVIII LES FICHIERS EN ORGANISATION SEQUENTIELLE INDEXEE ********


I INTRODUCTION Cette organisation consiste permettre la recherche dun enregistrement logique par consultation de tables successives. Les consultations sont ralises laide dune CLEF DENREGISTREMENT (RECORD KEY) prsente physiquement dans lenregistrement logique et de tables de clefs. Il rsulte que chaque fichier logique squentiel index est scind en 2 fichiers physiques : Un fichier donnes : Qui comporte les informations contenues dans les enregistrements logiques. Devant chaque enregistrement se trouvent 3 caractres -2 caractres pour un compteur de longueur -1 caractre DRAPEAU pour reprer les enregistrements dtruits par l'ordre DELETE. Un fichier CLEFS : Qui porte le mme nom que le fichier "donnes" suivi du suffixe KEY. Uniquement valable en Microsoft-Cobol *

64

II - MODIFICATION APPORTEES DANS LES DIVISIONS COBOL A ENVIRONMENT DIVISION En INPUT-OUTPUT SECTION, FILE-CONTROL, on nomme tous les fichiers utiliss dans le programme, ce qui permet de spcifier le mode d'organisation, le mode d'accs concernant ces fichiers. FORMAT GENERAL DU SELECT. SELECT nom-de-fichier ASSIGN TO nom-externe

ORGANIZATION INDEXED [FILE STATUS IS nom-donne-1] RECORD KEY nom-donne-2 SEQUENTIAL ACCES MODE IS RANDOM DYNAMIC Les deux clauses ORGANIZATION., RECORD.. sont obligatoires. Nom-donne2 doit tre prsent dans tout enregistrement et on doit en retrouver la description en FILESECTION. La longueur de cette clef peut aller jusqu' 60 car. (variable avec chaque systme). SEQUENTIAL, option par dfaut est rserv au traitement squentiel il permet : - la cration squentielle d'un fichier (en respectant l'ORDRE CROISSANT des CLEFS) - la lecture squentielle - le traitement squentiel en 1-0 avec modifications ou suppression d'enregistrements. RANDOM est rserv au traitement alatoire du fichier squentiel index DYNAMIC permet la fois l'accs squentiel ou alatoire du fichier

65

B DATA DIVISION La clause LABEL RECORD STANDARD est obligatoire puisque de tels fichiers sont stocks sur disques. La clause VALUE OF FILE-ID est prsente pour les mmes raisons. C PROCEDURE DIVISION 1) OPEN INPUT OUTPUT I-O

L'ouverture en INPUT doit tre faite avant le premier READ de lecture ou START de positionnement, en OUTPUT avant le premier WRITE d'criture, en I-O s'il s'agit d'un fichier en lecture-criture utilisant READ, START et REWRITE. 2) READ AT END KEY INVALID instruction COBOL END-READ nom-de-fichier [NEXT] [INTO nom-donne]

NEXT est utiliser dans le cas de lecture squentielle d'un fichier en DYNAMIC. Dans ce cas, c'est la clause AT END qui doit tre utilise. INVALID KEY est indispensable en accs RANDOM ou DYNAMIC. Il faut avoir charg dans le nom correspondant RECORD KEY la valeur qui permet de rendre valide le READ. Si la clef fournie n'est pas valide, il y a dclenchement de l'INVALID KEY. 3) START nom-de-fichier KEY EQUAL NOT LESS GREATER nom-donne de la RECORD KEY

[INVALID KEY instruction COBOL]

END-START.

66

Sert viter de lire tout un fichier si l'on ne dsire traiter qu'un sous-ensemble des informations qu'il contient. Ce qui revient slectionner une clef de dpart. Il faut donc charger, l aussi, la valeur choisie dans le nom de la RECORD KEY. 4) WRITE nom-d'enregistrement REWRITE [INVALID KEY Le verbe WRITE permet : - en accs squentiel de crer un fichier - en accs RANDOM ou DYNAMIC, il faut avoir charg dans la RECORD KEY la valeur de la clef de l'enregistrement crire. La clause INVALID KEY permet de prvenir des incidents tels que clefs non comprises, non ordonnes ou disque plein (voir rle de la clause FILE STATUS). Le verbe REWRITE permet de rcrire un enregistrement dj existant dans le fichier. En squentiel la clause INVALID KEY est inutile. 5) DELETE nom-de-fichier RECORD [INVALID KEY instruction COBOL] END-DELETE instruction COBOL] END-WRITE END-REWRITE [FROM nom-donne]

- en squentiel DELETE permet d'liminer un enregistrement pralablement lu par un READ. - en RANDOM. DYNAMIC, on limine un enregistrement dont la clef est gale au contenu de la RECORD KEY. 6) CLOSE nom-de-fichier rien de spcial !

III COMPREHENSION DU MECANISME SEQUENTIEL INDEXE A organisation interne A la cration, on charge les enregistrements sur disque, DANS L'ORDRE des clefs croissantes mais en squence. Le systme se constitue des tables d'INDEX plusieurs niveaux. - ventuellement : le volume (MASTER INDEX chez IBM) - au niveau des "cylindres" - au niveau des "pistes"
67

Ces tables d'index permettent la recherche d'un enregistrement logique par consultations successives. Cela ressemble un peu la consultation d'un bottin. Les tables d'index sont constitues des clefs de "fin de volume", de "fin de cylindre" de "fin de pistes". B Exemples d'utilisation (en rapport avec le transparent correspondant) 1 Sert lire l'enregistrement de clef 470 CYL 1

- recherche dans la table d'index/cylindre

- recherche dans la table d'index/pistes PISTE 3 - recherche par associativit sur la piste 3 du CYL 1. 2 Sert ajouter l'lment 425 CYL 1 PISTE 2 c'est complet

- recherche dans la table index/cylindres - recherche dans la piste de la phrase - recherche dans la piste de la phrase - criture du 444 en dbordement - dcalage vers la droite du 430 C Avantages et Inconvnients

Il y a peu de contraintes pour crer l'organisation squentielle indexe (clefs d'enregistrements uniques et prsentes la cration en ordre croissant). La programmation est trs aise, le fichier est facile maintenir. Les ajouts et les suppressions sont trs simples programmer Par contre, la recherche d'un lment peut-tre relativement lente dans le cas d'un gros fichier (tables d'index). Le problme de dbordements peut faire chuter les temps de recherche. Il y a aussi ncessit de remettre en tat le fichier lorsque les pistes ou cylindres de dbordement menacent d'tre saturs.

68

CHAPITRE XIX LES FICHIERS EN ORGANISATION RELATIVE LA CLAUSE FILE STATUS


I INTRODUCTION L'organisation relative consiste dsigner un enregistrement logique de fichier sur mmoire accs slectif par le NUMERO RELATIF d'enregistrement, compt partir de 1 pour le premier enregistrement du fichier. UN ENREGISTREMENT LOGIQUE EST DONC Dfini exclusivement par son numro d'ordre. On retrouve ici une technique d'utilisation assez proche de la nature de vecteur de structures. Malheureusement, si cette organisation est la plus performante des organisations de fichier sur mmoire accs relatif, elle est difficile raliser dans la pratique car il est assez RARE de pouvoir dsigner un enregistrement par son rang (sauf si une technique de HASHCODE (*) est appliquable facilement). Dans cette organisation, seuls les enregistrements de longueur fixe non bloqus sont autoriss. Le rang de l'enregistrement logique est form dans une zone de donne RELATIVE KEY dfinie en WORKING-STORAGE SECTION sous forme d'un entier non sign. (*) Technique vue par ailleurs dans le cours d'algorithmique. II MODIFICATIONS EN ENVIRONMENT DIVISION Toujours en FILE-CONTROL de l'INPUT-OUTPUT SECTION, voici le format gnral des phrases SELECT : SELECT nom-de-fichier ASSIGN TO nom-externe ORGANIZATION RELATIVE [FILE STATUS nom-donne] [RELATIVE KEY IS nom-donne-1] * (1) SEQUENTIAL RANDOM DYNAMIC

ACCESS

MODE

La clause d'organisation est obligatoire, ainsi que la RELATIVE KEY. Les mmes rgles d'utilisation vues pour les fichiers en squentiel index s'appliquent aux fichiers en relatif.

69

III MODIFICATIONS EN DATA DIVISION - en FILE SECTION, on retrouve la clause obligatoire. LABEL RECORD STANDARD nom-donne l'attribut VALUE OFFILE-ID littral est utilis sur micro-ordinateur essentiellement. * (1) Obligatoire seulement si la clause ACCESS A SELECTIONNE RANDOM ou DYNAMIC - EN WORKING-STORAGE SECTION on doit trouver la description de nom-donne-1 : 77 nom-donne-1 PIC 9(m)

IV LES VERBES DE PROCEDURE DIVISION 1) OPEN OPEN INPUT OUTPUT I-O nom-de-fichier

Les fichiers en organisation relative doivent tre ouverts en : - INPUT avant le premier READ ou le START de positionnement - OUTPUT avant le premier WRITE pour crer un nouveau fichier - I-O s'il s'agit d'un fichier en lecture-criture utilisant READ, START et REWRITE. 2) READ a) READ nom-de-fichier [NEXT] [INTO nom-donne] [AT END instruction COBOL ] END-READ

NEXT est utilis dans le cas de lecture squentielle d'un fichier dclar en DYNAMIC. b) READ nom-de-fichier [INTO nom-donne] [INVALID KEY instruction COBOL] qui est l'ordre de lecture correspondant l'accs "direct" un enregistrement. END-READ

70

3)

START Mme syntaxe et mme utilisation qu'en squentiel index, mis part le fait que l'on doit charger la relative key et non la record key. 4) 5) WRITE, REWRITE, DELETE, CLOSE Voir dtails d'utilisation dans le chapitre squentiel index

FILE STATUS* Cette option que l'on a vue apparatre dans les trois types d'organisation de fichier permet de contrler le bon achvement d'une entre-sortie grce l'indicateur prcis derrire FILE STATUS Cet indicateur dsigne une zone PIC XX, dclarer en DATE DIVISION. 1) En squentiel, il faut interprter ces 2 caractres de la faon suivante : 00 10 30 34 91 opration d'entre/sortie fin du fichier erreur permanente espace disque plein fichier endommag russie.

2) En squentiel index Le FILE STATUS peut prendre les valeurs suivantes : 00 10 21 22 23 24 30 91 entre/sortie russie. fin de fichier clef hors squence tentative d'crire un enregistrement dont la clef existe dj l'enregistrement cherch n'existe pas espace disque plein erreur permanente fichier endommag

3) En organisation relative LE FILE STATUS peut prendre les valeurs suivantes : 00 10 22 23 24 30 91 entre/sortie russie. fin de fichier l'enregistrement crire (crer) existe dj l'enregistrement recherch n'existe pas espace disque plein erreur permanente fichier endommag.

* Il faut interprter les valeurs figurant dans cette page comme utilisables pour le COBOL MICROSOFT. Le principe reste identique en AS/400, la liste des valeurs figurent dans la notice COBOL AS/400 User'sGuide.

71

CHAPITRE XX COMPLEMENTS SUR LES INSTRUCTIONS ARITHMETIQUES NOMS CONDITIONS


I OPTIONS COMMUNES AUX INSTRUCTIONS ARITHMETIQUES. A GIVING nom-donne Cette option est identique l'option INTO de la clause READ, c'est--dire que le rsultat de l'opration est enregistr dans nom-donne. B ROUNDED Aprs une opration (division par exemple) le rsultat est rarement entier et la quantit 243,427 devient 243,42 si la PICTURE est 999V99. Avec ROUNDED, COBOL ajoute 5 au premier chiffre non significatif de droite pour raliser l'arrondi. Avec ROUNDED 243,427 devient 243,43 avec la mme PICTURE. C ON SIZE ERROR instruction Cette option permet de prvenir les incidents de calcul, par exemple : - la division par zro - un dpassement de capacit de zone Ex DIVIDE A INTO B ON SIZE ERROR MOVE ZERO TO B END-DIVIDE. - ADD 1 TO CPT ON SIZE ERROR. permet d'viter les "drapages". II ADD, SUBTRACT et MOVE supportent l'option CORRESPONDING ou CORR Cette option peut-tre utilise sur des noms-de groupe comportant des zones lmentaires de NOMS IDENTIQUES. (Attention : clauses OCCURS et REDEFINES ignores) Exemples : 01 STRUC1. 02 NOM PIC X (7). 02 COMPT PIC 9(5). 02 ADR PIC X (30). 02 RESTE PIC X (38). 01 STRUC2. 02 FILLER PIX X (10). 02 NOM PIC X (7). 02 ADR PIC X (30) 02 PRENOM PIC X (7). 02 FILLER PIC X (26).
72

END-ADD.

L'instruction MOVE CORR STRUC1 TO STRUC2 permet de remplir les zones de mme nom de STRUC2 par celles de STRUC1. L'option ne marche avec ADD et SUBTRACT que si les PICTURE correspondantes sont numriques. Pour distinguer deux zones de mme nom on les qualifie par rapport au 01. MOVE "ALFRED" TO NOM OF STRUC1. III LE VERBE COMPUTE Afin de permettre quelques incursions dans le domaine scientifique, on peut utiliser le verbe COMPUTE : COMPUTE Nom-donne-1 [ROUNDED] = nom-donne-2 litt-numrique-2 expr. arith. [ON SIZE ERROR instruction].

Cette instruction n'est utiliser qu'en cas de vritables complexits Exemples : COMPUTE DELTA = (B*B) (4*A*C) Est justifi Par contre COMPUTE I = 1 + 1 COMPUTE PI = 3.14159 Sont viter, puisqu'il existe des instructions moins coteuses pour arriver au mme rsultat. En COBOL, il vaut mieux utiliser les expressions correctement parenthses car il est rarement indiqu comment les compilateurs utilisent la hirarchie : Niveau " " " " " 1 2 3 4 5 0 = () + ou unaire ** *,/ +,-

73

IV NIVEAU 88 LES NOMS-CONDITIONS Le nombre-niveau 88 sert spcifier une valeur, une liste de valeur, ou un intervalle qu'un lment peut couvrir. Si l'lment prend une telle valeur, le nombre-condition correspondant est vrai. VALUE VALUES Ex1 02 PAYROLL-PERIOD PIC 9. 88 88 88 WEEKLY VALUE 1. SEMI-MONTHLY VALUE 2. MONTHLY VALUE 3. IS litt1 ARE litt1 [litt2---] THRU litt-2

En procdure Division on trouvera IF MONTHLY GO TO DO-MONTHLY au lieu de IF PAYROLL-PERIOD = 3.. Ex2 02 NJOB PIC 9(4). 88 88 88 PROF VALUE 1 THRU 25. PREM VALUE 1000 THRU 1500. DEUX VALUE 2000 THRU 2200. IF PROF GO TO TRAVAIL-PROF.

74

CHAPITRE XXI LES AUTRES UTILISATIONS DE PERFORM TRADUCTION DE L'INSTRUCTION CAS


1 PERFORM Simple (rappel) END-PERFORM.

PERFORM nom par-1 [THRU nom par-2]

C'est l'utilisation ( distance) d'un ou de plusieurs paragraphes rdigs une seule fois et utiliss autant de fois que ncessaire. Une variante introduit une REPETITION : nom-d PERFORM nom par-1 [THRU nom-par-2] entier END-PERFORM. II Le PERFORM.. UNTIL C'est une instruction COBOL qui permet de traduire la structure itrative TANT QUE de l'algorithmique mais qui, dans l'esprit est en fait quivalente au REPEAT. du PASCAL. PERFORM nom-par-1 [THRU nom-par-2] UNTIL condition END-PERFORM. Ce que nous interprtons comme : "traiter le paragraphe 1 jusqu'au paragraphe 2 jusqu' ce que la condition soit satisfaite". Ex (morceau de programme visant calculer une racine carre) TIMES

(A)

(B) PERFORM CALCUL UNTIL ECART 0.01

END-PERFORM.

CALCUL. MOVE X TO XO. COMPUTE X = (XO + (A/XO))/2. SUBTRACT XO FROM X GIVING ECART.

75

III PERFORM.. VARYING PERFORM paragraphe-1 (1er indice) nom-donne-11 [VARYING] nom-donne-1 FROM entier-11 entier-12 BY nom-donne-12 (2me indice) nom-donne-21 [AFTER nom-donne-2 FROM entier-21 entier-22 BY nom-donne-22 (3me indice) nom-donne-31 [AFTER nom-donne-3 FROM entier-31 entier-32 BY nom-donne-32 END-PERFORM UNTIL condition-3] UNTIL condition-2] UNTIL condition-1 [THRU] paragraphe-2]

76

C'est une instruction assez lourde utiliser, mais elle permet de rpter un paragraphe ou un groupe de paragraphes n fois, sous contrle de un ou plusieurs indices. - nom-donne-I PICTURE 9 (n) - nom-donne-IJ reprsentent des identificateurs d'entiers positifs reprsentent des variables entires positives

- condition-I reprsentent des conditions COBOL permettant de s'arrter sur une valeur particulire des nom-donne-I Exemples 1) PERFORM BOUCLE VARYING I FROM 1 BY 1 UNTIL I > 4 END-PERFORM
On passe dans la BOUCLE pour les valeurs I = 1,2,3 et 4 2) PERFORM MISEAZERO VARYING I FROM 1 BY 1 UNTIL I > 4 AFTER J FROM 1 BY 1 UNTIL J > 3 END-PERFORM

MISEAZERO. MOVE ZERO TO EL (I,bJ) Cette forme gnre beaucoup d'instructions machines ( viter si possible si la machine est de moyenne puissance). IV L'INSTRUCTION CAS : GO TO DEPENDING GO TO P1 P2. PN DEPENDING ON Nom-donne Nom-donne est un identificateur de zone numrique entire dont la valeur doit tre comprise entre 1 et n. Si n = i, on se rend au paragraphe PI. Ex GO TO JANV FEV MARS. DEC DEPENDING ON MOIS. Avec MOIS dcrit en DATA DIVISION par 77 MOIS PIC 99 On a cr un embranchement douze directions ! ATTENTION ! Si la valeur qui est dans nom-donne est hors intervalle, le GO TO DEPENDING est tout simplement ignor.

77

CHAPITRE XXII LA CLAUSE USAGE (Cobol MICROSOFT et AS/400)


Attention Ce chapitre est souvent dpendant des matriels utilis ! Cette clause spcifie le format de la donne en mmoire ; elle est donc associe l'usage d'une zone et suit l'attribut PICTURE. Format Gnral : DISPLAY COMPUTATIONAL COMPUTATIONAL-0 COMPUTATIONAL-3 COMPUTATIONAL-4

USAGE IS

ou ou ou ou

COMP COMP-0 COMP-3 COMP-4

Le mode DISPLAY correspond la codification ASCII proprement dite avec un caractre par octet. Sont donc "USAGE DISPLAY" les donnes - alphabtiques - alphanumriques A X

- numriques externes de la forme F9 F9 F9 F9 S9

78

Cette clause est dans ce cas facultative et prise par dfaut en absence de tout USAGE. Elle peut tre crite tout niveau y compris pour un groupe (o chaque lment se voit appliquer cette reprsentation interne. La clause USAGE spcifie donc la manire dont une donne est stocke dans la mmoire. Cela N'AFFECTE PAS L'USAGE que l'on peut en faire. Tous les USAGE de type COMP reprsentent des donnes de type NUMERIQUE. 1) COMP : est identique au DISPLAY mais en mode numrique exclusivement.

2) COMPUTATIONAL-0 ou COMP-0 caractrise des donnes (Micro) numrique en binaire occupant 2 caractres (16 bits). Sur l'IBM-PC ces nombres binaires sont limits l'intervalle 32768,+32767 et on peut ne pas leur donner une PICTURE. On peut crire 02 ZONE COMP-0. Ou 02 ZONE PIC 99 COMP-0. 3) COMPUTATIONAL-4 ou COMP-4 ou BINARY en AS/400 caractrise des donnes numriques en binaire occupant 4 caractres en mmoire (32 bits). Ces nombres binaires voluent dans l'intervalle -2147483648, +2147483647

4) COMPUTATIONAL-3 ou COMP-3 ou COMP sur AS/400 caractrise les donnes numriques en DECIMAL CONDENSE interne avec 2 chiffres par octet. Exemple la PICTURE S9(9)V9(4) reprsentera une zone dont l'image peut tre rendue par le schma suivant 99 99 99 99 99 9S En gnral, la place occupe par une telle donne EST P = (n+2) / 2 ou / signifie division entier

S9(5) 3 octets , S9(8) 5 octets

79

5)

CHOIX d'une clause USAGE La plupart du temps on utilise la clause par dfaut.

Certains types de donnes numriques peuvent se voir attribuer un rle qui exige un attribut COMP-O (sur certaines machines). Dans les autres cas : - il peut-tre intressant POUR DES DONNEES subissant BEAUCOUP DE CALCULS de choisir COMP-O ou COMP-4 (peu de temps perdu en conversion). - pour les tableaux de donnes numriques de grande dimension, on peut choisir COMP-3 qui permet de diviser la place occupe en machine par un facteur d' peu prs par 2. (*) Sur l'AS/400, on peut en plus utiliser la clause USAGE avec les attributs suivants : (1) BINARY ou COMP-4 reprsentation binaire (2) jusqu' 4 digits de 5 9 digits 2 octets 4 octets 8 octets

de 10 18 digits

PACKED-DECIMAL quivalent COMP-3 dcimal condens

80

CHAPITRE XXIII LA PROGRAMMATION "PLEIN ECRAN" (SCREEN SECTION). (Uniquement pour Microsoft Cobol)
I INTRODUCTITON Nous savons dj dialoguer avec l'cran caractre par caractre ou ligne par ligne. On peut amliorer le dialogue en imaginant des formats complets incluants des dispositifs standards tels que la double brillance, la sonorisation, la couleur inverse etc La SCREEN SECTION comporte des descriptions de donnes (en affichage ou en saisie) lmentaires ou en groupe. Comme dans la FILE SECTION ou la W-S SECTION ces descriptions sont fournies l'aide des numros de niveaux. II FORMAT GENERAL A B

SCREEN SECTION 01 Nom-de-grille [AUTO] [SECURE] [REQUIRED] [FULL] nn [nom-de-zone] [BLANK SCREEN] [LINE [PLUS] entier-1] [COLUMN [PLUS] entier-2] [BLANK LINE] [BELL] [UNDERLINE] [REVERSE-VIDEO] [HIGH LIGHT]

81

[BLINK] [FOREGROUNG-COLOR entier-3] [BACKGROUND-COLOR entier-4] [VALUE littral-1] litt-2 FROM nom-d-1 PIC descripteur TO USING [BLANK WHEN ZERO] JUSTIFIED RIGHT JUST nom-donne-2 nom-donne-3

[AUTO] [SECURE] [REQUIRED] [FULL] Nous allons tudier en dtail toutes ces possibilits, mais il est d'abord ncessaire d'indiquer qu'on envoie des donnes sur l'cran avec l'instruction DISPLAY nom-de-grille et que l'on en reoit par l'instruction ACCEPT nom-de-grille.

82

III LES DECLARATIONS DE GROUPE Il faut obligatoirement une dclaration d'cran au niveau 01 et il est possible d'associer certains attributs (AUTO, SECURE, REQUIRED, FULL) tous les lments du groupe. IV LES OPTIONS DE LA SCREEN SECTION Une zone lmentaire ne peut excder une ligne d'cran (80 caractres). Certaines options ne sont valables que pour l'ordre DISPLAY, d'autres que pour ACCEPT. 1) BLANK SCREEN : Utilisation DISPLAY, l'cran est remis blanc et le curseur est positionn ligne 1, colonne 1. 2) LINE et COLUMN : Par dfinition le groupe de niveau 01 correspond un positionnement 1,1 du curseur. LINE n, COLUMN m positionnent sur une ligne et une colonne dtermine. L'option PLUS indique un dplacement par rapport la situation prsente du curseur. COLUMN sans LINE dplace le curseur sur la mme ligne. LINE sans COLUMN envoie le curseur au dbut de la ligne indique. 3) BLANK LINE : Les positions droite du curseur sont remises blanc jusqu'au bout de ligne. 4) BELL : Utilisation ACCEPT dclenche le bruiteur lorsqu'on attend une donne. 5) HIGHLIGHT, BLINK, REVERSE-VIDEO, UNDERLINE Dclenchement des effets visuels en utilisation DISPLAY (double intensit, clignotement ou inverse fond et champ, soulignement valable pour cran monochrome). 6) VALUE litt-1 Utilisation DISPLAY, dsigne une constante chane de caractre qui doit tre affiche l'cran. (En utilisation interdite avec la clause PICTURE). 7) PIC description :

83

Dcrit le format de la donne affiche l'cran suivant les rgles standard des PICTURE. Toute donne destine au, ou venant du programme (options TO, FROM, USING) doit avoir une PICTURE. litt-2 FROM nom-donne-1 On affiche le contenu actuel du litt-2 ou de nom-donne-1 par l'intermdiaire de la grille. TO nom-donne-2 : utilisation ACCEPT : utilisation DISPLAY

Ce qu'on tape au clavier dans ce champ est ensuite rang dans nom-donne-2. USING nom-donne-3 : indique que la zone peut tre MISE A JOUR l'cran ATTENTION : nom-donne- 1,2,3 ne peuvent appartenir une table ! 8) BLANK WHEN ZERO : utilisation DISPLAY mme signification qu'en WORKING-STORAGE SECTION. 9) JUSTIFIED RIGHT JUST Les donnes afficher ou reues doivent tre cadres droite 10) AUTO, SECURE, REQUIRED, FULL : utilisation ACCEPT, elles signifient a) le curseur saute la zone suivante lorsque la premire est remplie (PICTURE obligatoire). b) les caractres sont entrs masqus par les astrisques (ex : mots de passe) (PIC obligatoire). c) signifie qu'au moins 1 caractre doit tre entr dans la zone d) signifie que toute la zone doit tre rentre.

84

REMARQUE Attention les attributs du ACCEPT pos-spcification et de la SCREEN SECTION se correspondent de la manire suivante : AUTO BELL FULL JUSTIFIED SECURE REQUIRED AUTO-SKIP BEEP LENGHT-CHECK RIGHT-JUSTIFY NO-ECHO EMPTY-CHECK

V EXEMPLE DE PROGRAMME IDENTIFICATION DIVISION. PROGRAM-ID. DEBCOB. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. OBJECT-COMPUTER. INPUT-OUTPUT SECTION. FILE-CONTROL. * SELECT DES FICHIERS SELECT FIMPR ASSIGN TO PRINTER. SELECT FSEQ ASSIGN TO NOM-EXTERNE DATA DIVISION. FILE SECTION. * DECLARATION DES FICHIERS. FD FIMPR LABEL RECORD OMITTED. 01 LIGNE. 02 FILLER PIC X. 02 LIGNE PIC X (80). FD FSECQ LABEL RECORD STANDARD. 01 SEQ. 02 NUM PIC 99. 02 NOM PIC X (25). 02 SUITE PIC X (53). ******************************************** WORKING-STORAGE SECTION. * DECLARATIONS DES ZONES DE TRAVAIL 77 I PIC 99 VALUE ZERO. 77 J PIC 99 VALUE ZERO. 01 L1 PIC X(80) VALUE " ". SCREEN SECTION.

85

01

GRILLE 02 BLANK SCREEN. 02 LINE 2 COLUMN 3 VALUE "NUMERO : ?. 02 LINE 2 COLUMN 15 PIC 99 TO NUM BELL AUTO. 02 LINE 10 COLUMN 15 VALUE "NOM : ?". 02 LINE 10 COLUMN 25 PIC X (25) TO NOM.

PROCEDURE DIVISION. DEBUT OPEN OUTPUT FSEQ MOVE O TO NUM. MOVE SPACES TO NOM. BOUCLE. DISPLAY GRILLE. ACCEPT GRILLE. MOVE SPACE TO SUITE. IF NUM = 99 GO TO FIN. WRITE SEQ INVALID DISPLAY "ERREUR" GO TO FIN. ADD 1 TO I. GO TO BOUCLE. FBOUCLE. FIN. CLOSE FSEQ. DISPLAY. STOP RUN.

86

CHAPITRE XXIV L'INSTRUCTION INSPECT (ANCIEN EXAMINE).


L'instruction INSPECT permet de compter l'occurrence d'un ou plusieurs caractres DISPLAY dans une zne et ventuellement de le (ou les) remplacer par un autre (ou d'autres) caractres. I FORMAT GENERAL INSPECT nom-donne-1 ALL LEADING CHARACTERS nom-donne-3 littral-3

[TALLYING nom-donne-2 FOR

BEFORE INITIAL AFTER

nom-donne-4 littral-4 nom-donne-5 CHARACTERS BEFORE INITIAL AFTER littral-6 BY littral-5 nom-donne-6

REPLACING ALL 8 LEADING FIRST BY littral-7 littral-8 nom-donne-9 INITIAL AFTER littral-9 nom-donne-7 nom-donne-

BEFORE

87

Rgles 1) Nom-donne-1, zone inspecter, doit tre en USAGE DISPLAY 2) TALLYING signifie que le rsultat du comptage sera plac dans Nom-donne-2 3) ALL signifie que toutes les occurrences doivent tre comptes Attention ZONA *****/***

INSPECT ZONA TALLYING CPT FOR ALL "**" Formera 3 dans CPT 4) LEADING signifie que seules les premires occurrences contigus seront comptes. Ex INSPECT ZONB TALLYING COMPTEUR FOR LEADING "O" ZONB O O B D C 1 0 0 5 COMPTEUR = 2

5) CHARACTERS compte tous les caractres, ventuellement avant ou aprs un caractre ou un groupe de caractres prvus : Ex INSPECT ZOND TALLYING CPT FOR CHARACTERS BEFORE INITIAL "1" ZOND O O B C D 1 0 0 CPT = 5

6) REPLACING permet de remplacer les occurrences de configurations de caractres particuliers par d'autres. Ex ZONE 7) ALL, INSPECT ZONE REPLACING CHARACTERS BY "O" A B C D E F G H devient OOOOOOOO

LEADING ont la mme signification qu'avec TALLYING

88

8) FIRST signifie que seule la premire occurrence de la configuration dsigne par nom-donne-7 ou litt-7 sera remplace par nom-donne-8 ou litt-8 INSPECT ZONG REPLACING FIRST "T" BY "L" Si ZONG TOTO on obtient LOTO

9) Si on mlange TALLYING et REPLACING : INSPECT ZONH TALLYING COMPTEUR FOR CHARACTERS AFTER INITIAL "S" REPLACING ALL "P" BY "T". Avec ZONH PASSEE on obtient

Compteur = 3 et ZONH TASSEE

89

II MANIPULATIONS DE CHAINES DE CARACTERES On dispose depuis la norme ANS 74 du verbe STRING qui permet de concatner plusieurs zones de donnes dans une seule zone et du verbe UNSTRING qui permet d'clater une zone de donnes en plusieurs zones lmentaires. A Format de STRING nom-donne-11 STRING litt-11 litt-12 nom-donne-12

DELIMITED

BY

nom-donne-3 littral-3 SIZE nom-donne-22 litt-22

nom-donne-21 litt-21

DELIMITED

BY

nom-donne-4 littral-4 SIZE

INTO Nom-donne-5 WITH ON POINTER nom-donne-6

OVERFLOW ordre COBOL

90

On cherche btir une chane (Nom-donne-5) en concatnant les znes de type nom-donne-li et ventuellement nom-donne-21. C'est au programmeur de vrifier que la zne rceptrice est au moins gale la somme des longueurs des znes mettrices. Il n'y a pas de remplissage droite par des espaces. 1) DELIMITED BY permet de spcifier une limite de transfert de donnes. 2) POINTER permet de prciser la position gauche du transfert en zne rceptrice. Nom-donne-6 est alors incrment de 1 pour chaque caractre transfr. 3) L'option OVERFLOW n'agit que conjointement l'option POINTER dans le cas o le contenu de Nom-donne-6 est infrieur 1 ou suprieur au nombre de caractres de la zne rceptrice. Ex 77 ZONE PIX X(15) VALUE SPACES. STRING "ANNEE" SPACE "1974" DELIMITED BY SIZE INTO ZONE rsultat ZONE ANNEE 1974 B Format de UNSTRING UNSTRING nom-donne-1 nom-donne-12 DELIMITED BY ALL littral-12 nom-donne-13 OR ALL littral-13

WITH TALLYING ON

POINTER IN OVERFLOW

nom-donne-2 nom-donne-3 ordre-cobol

INTO nom-donne-4

DELIMITER

IN

nom-donne-41

COUNT IN nom-donne-42 Les rgles de transfert sont identiques celles du verbe STRING.
91

Npm-donne-1 est la zone mettrice clater. La rgle d'clatement est fournie par DELIMITED BY Nom-donne-2, zone numrique lmentaire, permet de compter le nombre de zones rceptrices cres (il faut initialiser cette zone). L'option OVERFLOW arrte le droulement de UNSTRING dans deux cas : - lorsque le contenu du pointeur Nom-donne-2 est ngatif ou suprieur la taille de la zone mettrice Nom-donne-1. - lorsque toute la zone mettrice n'a pas t examine et qu'il n'y a plus de zones rceptrices disponibles. Ex : 77 ZONE PIC X (12) 77 NOM PIC X (5). 77 An PIC X(4). UNSTRING ZONE DELIMITED BY SPACE INTO NOM AN. Si zone contient Alors Et ANNEE 1974 ANNEE 1974

NOM contient An contient

92

CHAPITRE XXV LE TRI INTEGRE COBOL LE VERBE SORT


COBOL permet d'inclure des programmes gnraliss de tri dans un programme COBOL. L'intrt par rapport au tri utilitaire est essentiellement de pouvoir modifier ou liminer des enregistrements avant ou aprs le tri proprement dit. Le verbe SORT permet d'indiquer que l'on dsire trier un fichier (FN1) mais il impose de dcrire un fichier entre (FN2) avant tri et un fichier de sortie (FN3) aprs tri. 1er Format Nom-de fichier-tri dcrit en SD FN1 2me Format SORT FN1 (*) INPUT PROCEDURE nom-de-section GIVING FN3. 3me Format SORT FN1 (*) USING FN2 OUTPUT PROCEDURE nom-de-section. 4me Format SORT FN1 (*) INPUT PROCEDURE nom-de-section. OUTPUT PROCEDURE nom-de-section. USING FN2 GIVING FN3. (*)

SORT

ASCENDING (*) ON DESCENDING KEY Arg1 ON

ASCENDING KEY Arg2 DESCENDING

93

Les quatre formats correspondent : 1) un tri sans modification des enregistrements en entre et sortie. 2) un tri avec modification des enregistrements en entre (INPUT PROCEDURE) 3) un tri avec modification des enregistrements en sortie (OUTPUT PROCEDURE) 4) un tri avec modification des enregistrements en entre et en sortie Rgles : 1) FN1 a une description spciale en DATA DIVISION commenant par SD (sort description) au lieu de FD. 2) FN2, FN3 font l'objet de description de fichiers (enregistrements de mme longueur). 3) Nom-de-section reprsente le nom des sections permettant des squences - soit avant le TRI - soit aprs le TRI 4) Arg1, Arg2 sont des sous-descriptions de l'enregistrement de FN1 5) Le verbe SORT peut apparatre en Procdure Division n'importe o sauf dans une INPUT ou OUTPUT Procdure.

94

Examinons les divers cas un un : A Cas le plus simple o l'on trie TOUS les articles du fichier : SORT FN1 USING FN2 GIVING FN3. Dans ce cas on n'ouvre pas les fichiers en entre et en sortie. Le tri intgr gre l'ensemble. Ex : SORT FN1 INPUT PROCEDURE ENTREE THRU FENTREE GIVING FN3 ENTREE SECTION. OPEN INPUT FN2. TQ1 READ FN2FTQ1

RELEASE ENRFN1 [FROM ENRFN2] SAUT.GOTO TQ1. FTQ1. CLOSE FN2 FENTREE SECTION. EXIT C Cas o l'on souhaite modifier ou supprimer des enregistrements en sortie SORT FN1USING FN2 OUTPUT PROCEDURE SORTIE THRU FSORTIE. SORTIE SECTION. OPEN OUTPUT FN3. TQ2 RETURN FN1 AT END GO TO FTQ2. WRITE ENR FN3. SAUT. GO TO TQ2. FTQ2.CLOSE FN3. FSORTIE SECTION. EXIT. Il ne faut pas bloquer les enregistrements du SORT. D Cas o l'on imbrique B et C :
95

On utilise les deux sections nouvellement dcrites simultanment ! On peut slectionner plusieurs arguments de tri par la phrase DESCENDING ON ASCENDING En gnral on ne dpasse pas trois niveaux : - tri majeur - tri intermdiaire - tri mineur Si l'on est amen trier plusieurs fichiers dans un mme programme il faut une description SD pour chaque fichier de tri. KEY Arg1

96

CHAPITRE XXVI LES SOUS-PROGRAMMES EXTERNES (HORS - NORMES A.N.S.)


I INTRODUCTION Ils sont utiliss souvent pour des parties de programmes particulirement complexes, ou qui crites en assembleur, offrent des amliorations de performances. Les sous-programmes externes sont des programmes crits en COBOL ou tout autre langage compil part du programme principal. Le programme principal et les sous-programmes sont ensuite relis par le programme Editeur de lien (LINK EDIT). En "Microsoft COBOL" les diffrents modules sont chargs au CALL (chargement dynamique). II APPEL D'UN SOUS-PROGRAMME Cet appel est ralis par l'instruction CALL CALL "Nom-de-SP" [USING Nom-donne-1 [N-d-2]..] La longueur du nom-de-SP est fixe par la rgle des noms dans le systme d'exploitation (c'est--dire au maximum 6 caractres, le premier alphabtique pour l'IBM-PC). Ex : CALL "SP1" USING Z1 Z2. La clause USING est utilise pour transmettre au sous-programme l'adresse des zones de donnes du programme principal qui servent dans le sous-programme appel. III LE SOUS-PROGRAMME COBOL Le sous-programme COBOL est construit comme tout programme COBOL avec les quatre divisions usuelles. Notons les quelques diffrences suivantes : 1) La PROCEDURE DIVISION est suivie des mots USING Z1 Z2 2) La LINKAGE SECTION qui tablit la correspondance avec les zones de donnes du programme principal dsignes dans la clause USING de l'ordre CALL (description de Z1, Z2).

97

3) Il existe de nouveaux mots COBOL redonnant le contrle au programme principal tels GOBACK ou EXIT PROGRAM (celui-l doit tre unique, il correspond au STOP RUN du programme principal). Attention : dans le cas o le S-P. est utilis seul, ces 2 mots changent de rle : - GOBACK quivaut un STOP RUN - EXIT PROGRAM est ignor (=EXIT habituel) 4) Il existe aussi des "points d'entre" ENTRY ; la syntaxe est proche de "PROCEDURE DIVISION USING Z1 Z2" : ENTRY "nom-symbolique-entre" USING Y1 Y2 Le "nom-symbolique-entre" joue le mme rle que pour le CALL, mais permet d'viter certaines parties du sous-programme. 5) La LINKAGE SECTION a comme particularit de ne pas rserver de place en mmoire centrale mais d'attribuer aux zones une adresse VIRTUELLE le, CALL attribue des adresses relles aux zones de donnes de la LINKAGE SECTION.

98

IV Exemple dtaill : Programme Principal IDENTIFICATION DIVISION. PROGRAM-ID. PRINC. Sous-Programme IDENTIFICATION DIVISION. PROGRAM-ID. SP1.

DATA DIVISION. FILE SECTION.

DATA DIVISION. WORKING-STORAGE SECTION.

01 Z1. 02 COD1 PIC XXX 02 IND1 PIC9 (7). 02 FILLER PIC X (60). WORKING-STORAGE SECTION. 01 Z2. 02 COD2 PIC XXX 02 IND2 PIC 9(7) 02 VAL2 PIC9 (6) OCCURS 8. PROCEDURE DIVISION.

01

LINKAGE SECTION. ZON1. 02 COD1 PIC XXX. 02 IND1 PIC 9(7). 02 FILLER PIC X(60). 01 ZON2. 02 COD2 PIC XXX. 02 IND2 PIC 9(7). 02 VAL2 PIC 9(6) OCCURS 8.

PROCEDURE DIVISION USING ZON1 ZON2.

CALL "SP1" USING Z1 Z2. GOBACK. ENTRY "ENTREE" USING ZON1. CALL "ENTREE" USING Z1.

STOP RUN

GOBACK.

99

Les flches en pointill indiquent les parties du sous-programme concernes par les 2 CALL. La syntaxe peut-tre lgrement diffrente d'une machine l'autre (voir brochure du constructeur). V Le chanage de programme Le COBOL IBM-PC permet l'appel (ou "chanage") d'un autre programme principal. La diffrence avec l'appel de sous-programme rside dans le fait que le programme qui lance le chanage est DETRUIT, donc on ne peut y revenir aprs excution du programme chane. Format Littral CHAIN Nom-donne-1 littral ou Nom-donne-1 dsignent le nom d'un programme (suivant les normes du systme d'exploitation de l'IBM-PC). Exemple CHAIN NOMPROG USING TABLEAU1 TABLEAU2. TABLEAU1, TABLEAU2 dsignent des donnes dcrites en DATA DIVISION qui seront transmises au programme chane NOMPROG. [USING n-d-1 [n-d-2]]

100

CHAPITRE XXVII AIDE A LA MISE AU POINT DES PROGRAMMES COBOL (HORS NORMES A.N.S.)

I LE VERBE COPY Ce verbe est utilis pour faire recopier directement par le compilateur une partie de programme de l'environnement division, Data ou Procdure division. Cette partie a t au pralable enregistre sous un nom de fichier COBOL sur disquette. Format : Exemple : Supposons que l'on ait cr sous le nom ANNUAIRE.COB A B COPY nom-de-fichier

02 NOM PIC X(9). 02 NUMERO PIC 9(6). 02 SERVICE PIC 9(4). On pourra crire dans un autre programme : 01 REPERTOIRE. COPY ANNUAIRE. Ce qui donnera la gnration : 01 REPERTOIRE 02 NOM PIC X(9). 02 NUMERO PIC 9(6). 02 SERVICE PIC 9(4). Certains compilateurs acceptent une instruction COPY plus sophistique avec une clause de remplacement (REPLACING n-d Byn-d-2).

101

II LE VERBE TRACE Ce verbe permet d'obtenir la liste de tous les noms de paragraphes activs lors du droulement du programme : B READY TRACE. (autres matriels : TRACE ON) (Si l'on veut arrter la trace) B

RESET TRACE (autres matriels : TRACE OFF) III LE VERBE EXHIBIT Ce verbe permet d'diter la valeur contenue dans une zone donne B EXHIBIT [NAMED] n-d-1 [n-d-2]

Les valeurs sont imprimes en caractres DISPLAY - avec impression du nom de la donne si on utilise l'option NAMED. Certains compilateurs acceptent une deuxime option : CHANGED. Dans ce cas la zone n'est affiche que si sa valeur est change.

102

CHAPITRE XXVIII LES DECLARATIVES


I INTRODUCTION COBOL a prvu l'ventualit de traitements particuliers de sauvegarde en cas d'erreur d'entres/sorties (donnes illisibles sur un fichier par exemple). Ceux-ci sont raliss en squences indpendantes rassembles dans une partie bien spciale de la PROCEDURE DIVISION : Les DECLARATIVES. Cette partie (toujours place en tte de la PROCEDURE DIVISION) peut tre importante au cas o l'on dsire dcider soi mme de ce qu'il faut faire en cas d'incident. II FORMAT GENERAL D'ECRITURE DES DECLARATIVES A PROCEDURE DIVISION. DECLARATIVES. Nom-de-Section SECTION. USE. Nom-paragraphe. Instruction COBOL

END DECLARATIVES. Chaque section assure une tche particulire vis--vis des entres/sorties et le sujet trait par la section est indiqu par la phrase USE. Exemple : PROCEDURE DIVISION. DECLARATIVES. ERR-LECTURE SECTION.USE AFTER ERROR PROCEDURE ON INPUT TRAITER-LECT.

END DECLARATIVES. survient une erreur de lecture de fichier, le superviseur du systme d'exploitation de l'ordinateur branchera aussitt le traitement sur la section ERR-LECTURE pour assurer les procdures exceptionnelles prvues par le programmeur.
103

III FORMAT DE D'ENTREE/SORTIES A B

SECTIONS

DECLARATIVES

POUR

INCIDENTS

PROCEDURE DIVISION. DECLARATIVES. Nom-de-section SECTION.USE AFTER STANDARD ERROR nom-de-fichier-1 INPUT OUTPUT I-O nom-fichier-2.

PROCEDURE ON

- Nom-fichier-1, Nom-fichier-2. Indiquent que cette section dclarative ne s'applique qu'aux seules erreurs dtectes sur ces fichiers. - INPUT : la section s'applique tous les fichiers en lecture du programme - OUTPUT : la section s'applique tous les fichiers en criture - I-O la section s'applique tous les fichiers en lecture/criture Comme l'indique l'instruction USE, le branchement la section dclarative n'a lieu qu'aprs que les routines standard de traitement d'erreurs du systme d'exploitation de l'ordinateur aient t effectus. On sort d'une section dclarative automatiquement aprs la dernire instruction de la section. COBOL n'autorise pas, dans une section dclarative, faire rfrence des paragraphes extrieurs cette section. Rciproquement, les sections dclaratives tant considres comme des squences indpendantes, on ne pourra y faire rfrence depuis la PROCEDURE DIVISION normale d'un programme que par des instructions PERFORM.

104

CHAPITRE XXIX UTILISATION D'UN FICHIER SEQUENTIEL INDEXE ET D'INDEX SECONDAIRES.


I INTRODUCTION Le but d'une telle utilisation est de pouvoir accder un enregistrement par plusieurs informations diffrentes de cet enregistrement. D'ordinaire en squentiel index, on doit connatre la valeur de la RECORD KEY pour retrouver un enregistrement. Il est trs possible d'obtenir ce fonctionnement aux moyens de clefs secondaires (ALTERNATE). II MODIFICATIONS DANS LE PROGRAMME DE COBOL La phrase SELECT doit prciser au systme la liste des clefs supplmentaires, en informant de l'autorisation de prsence de DOUBLONS par l'attribut DUPLICATES. Format de cette clause : ALTERNATE RECORD KEY IS data-name-1 with DUPLICATES split-key-name-A = d-n-2 d-n-3 WITH DUPLICATES Il reste que pour utiliser les ordres DELETE, REWRITE ou WRITE il faut utiliser la RECORD KEY habituelle. Les clefs secondaires peuvent tre utilises uniquement pour RETROUVER un enregistrement. Si l'on utilise la clause WITH DUPLICATES on accepte les doublons dans le fichier. Une clef secondaire peut tre constitue avec plusieurs champs, mme non conscutifs, de l'enregistrement ("splitt"). En procdure division il faut prciser avec quelle clef on travaille : charger data-name-1 READ fichier KEY IS data-name-1 INVALID KEY--------------

105

Les clefs secondaires apparaissent donc comme une possibilit supplmentaire d'accder un enregistrement et prfigure la notion de base de donnes. Exemple : SELECT FICHIER ASSIGN TO DISK ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS CLEF-PRINC ALTERNATE RECORD KEY IS CLEF2 ALTERNATE RECORD KEY IS CLEF3 WITH DUPLICATES ALTERNATE RECORD KEY IS ECLATE = CLEF-PRINC PROJET BONUS. Associ une description FD FICHIER LABEL RECORD STANDARD VALUE OF FILE-ID IS "FICHIER.EXE". 01 ENREG. 02 CLEF-PRINC PIC 9(5). 02 CLEF2 PIC X(20). 02 CLEF3 PIC X(20). 02 PROJET PIC X(12). 02 BONUS PIC S9(4)V99. Pour cette description, les enregistrements peuvent tre retrouvs par la RECORD KEY (CLEF-PRINC), par deux clefs secondaires (CLEF2, CLEF3), et une clef secondaire "splite" (ECLATE).

106

CHAPITRE XXX : ACCEPT et DISPLAY "POSITIONNES"


INTRODUCTION Ces deux VERBES, habituellement rservs un strict usage d'entres/sorties de petites dimensions, se voient agrments d'extensions permettant d'envisager une utilisation plus frquente. On retrouve en gros, tous les attributs, vido ou de positionnement, qui existent dans le COBOL Microsoft l'usage des compatibles P.C. I ACCEPT "tendu". ACCEPT id 1 line-col-phase FROM-CRT MODE IS With-phase - line-col-phase s'entend par : Block

LINE AT Number

id-2 int-1

COL Number AT id4 int-3

id-3 int-2

107

- with-phase permet d'utiliser tous les attributs dcrits dans un autre chapitre (XXIII, ). Comme dans SDA il faut toujours laisser une position aprs et avant un champ utilis par ACCEPT (responsabilit de programmeur) On doit d'abord par l'instruction DISPLAY SPACES UPON CRT WITH BLANK SCREEN, effacer l'cran. L'option "AT" indique l'adresse absolue dans l'cran o commence l'instruction ACCEPT. S'il n'y a rien l'opration commence Ligne 1, colonne 2. Si line = 0 et col = 0, l'ACCEPT dmarre la position suivant le prcdent ACCEPT. Si la ligne est absente (ou nulle) et la colonne prsente, l'ACCEPT se prsente la ligne suivant le dernier DISPLAY la colonne indique (idem pour ligne prsente et colonne absente). On peut aussi crire ACCEPT X AT 1214 (ligne = 12, colonne = 14) page - MODE BLOCK indique que la donne est traiter comme une donne lmentaire. - WITH phase permet l'utilisateur de spcifier certaines options accompagnant l'opration ACCEPT. II DISPLAY "tendu" - On retrouve strictement la mme syntaxe que pour le "ACCEPT tendu" avec un peu moins de possibilits dans la with phase (BEEP, BLINK, HIGHLIGHT, RESERVE-VIDEO, UNDERLINE, BLANK SCREEN, BLANK LINE).

108

ACCEPT

id-1 line-col-phase FROM-CRT MODE IS WITH-phase BLOCK

line-col-phase est : LINE AT Number id-2 int-1

COL Number AT id-3 Int-2

id-2 int-1

id-3 PIC 9(4) ou PIC 9(6) int-2 champ numrique 4 ou 6 octets On partage dans les 2 cas en 2 parties gales pour ligne et colonne ACCEPT X AT 1218 Ligne = 12, colonne = 18

109

ANNEXE 1
Le PERFORM "classique" du COBOL introduit des dbranchements peu en rapport avec l'ide actuelle de "programmation structure". Le standard ANS85 a introduit le PERFORM "en ligne" et les terminateurs d'instructions. Ces terminateurs permettent d'amliorer la lisibilit du programme et surtout sa structuration. Les principaux terminateurs d'instructions reconnus par le standard ANS sous END-ADD, END-SUBTRACT, END-MULTIPLY, END-DIVIDE, END-IF, ENDPERFORM, END-READ, END-WRITE. Utilisation du END-IF IF ELSE MOVE D TO C ADD 1 TO I END-IF. C'est tout de mme plus clair qu'avec le seul point terminal ! Utilisation du END-PERFORM C'est mon avis, la modification la plus importante, car elle traduit directement le souci de structuration logique des squences d'un programme : A B DEBUT. PERFORM A>B MOVE C TO D

UNTIL A > B READ FICHIER AT END MOVE "V" TO EOF END-READ ADD 1 TO A WRITE LIGNE FROM ENR END-WRITE END-PERFORM.

On peut, sans difficults imbriquer d'autres instructions IF, PERFORM en respectant l'usage indiqu ci-dessus.

110

ANNEXE II
La notion de "SECTION" a t vue dans les deux divisions ENVIRONMENT ET DATA. Son rle en PROCEDURE DIVISION permet d'accentuer la possibilit de structurer davantage la programmation COBOL. L'exemple fourni dans les pages suivantes montre : 1) qu'on peut dcomposer (comme en algorithmique) en modules (principal et secondaires) en rajoutant derrire un nom de paragraphe le mot cl SECTION (reprer ici PRINCIPALE, TRAITERDATE, ANNEBISSEX, AFFICHER). On se rapproche de la notion de PROCEDURE, avec une forte restriction : - les variables restent GLOBALES. Les noms de paragraphe utiliss dans une SECTION peuvent tre rutiliss dans une autre. Il est alors interdit de sortir de la section en utilisant des noms de paragraphes appartenant une autre SECTION. Il est fortement conseill de terminer chaque SECTION pour un paragraphe FIN suivi de son instruction EXIT. La porte d'une SECTION s'applique tous les paragraphes contenus dans la SECTION jusqu' - une prochaine SECTION - la fin du programme

111

PROGRAMME IDENTIFICATION DIVISION. PROGRAM-ID. DATAAAAJJJ. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. 01 AAA JJJ. 05 AAAA PIC 9(4) 05 JJJ PIC 999. 01 LISTEMOIS. 05 FILLER PIC X(18) VALUE "JANVIER FEVRIER". 05 FILLER PIC X(18) VALUE "MARS AVRIL". 05 FILLER PIC X(18) VALUE "MAI JUIN". 05 FILLER PIC X(18) VALUE "JUILLET AOUT". 05 FILLER PIC X(18) VALUE "SEPTEMBRE OCTOBRE". 05 FILLER PIC X(18) VALUE "NOVEMBRE DECEMBRE". 01 BIDON REDEFINES LISTEMOIS. 05 NOMMOIS PIX X(9) OCCURS 12. 01 LISTEJOURS. 05 FILLER PIC X(24) VALUE "3128313031303131303130313. 01 BIDON2 REDEFINES LISTEJOURS. 05 NBJOURS PIC 99 OCCURS 12. 77 MOIS PIC 99. 77 BISSEXTILE PIC X. 77 VRAI PIC X VALUE "1". 77 FAUX PIC X VALUE "0". 77 R PIC 999. 77 BIDONS PIC 9999. 77 EDJJ PIC ZZ9. PROCEDURE DIVISION. PRINCIPALE SECTION. DEBUT. ACCEPT AAAJJJ.

112

PERFORM TRAITERDATE. PERFORM AFFICHER. FIN. STOP RUN. TRAITERDATE SECTION. DEBUT. PERFORM ANNEEBISSEX. IF BISSEXTILE = VRAI MOVE 29 TO NBJOURS (2) END-IF. MOVE 1 TO MOIS. TQ. IF NBJOURS (MOIS)NOT < JJJ GO TO FTQ-END-IF. SUBTRACT NBJOURS (MOIS) FROM JJJ. ADD 1 TO MOIS. GO TO TQ FTQ. FIN. EXIT. ANNEEBISSEX SECTION. DEBUT. MOVE FAUX TO BISSEXTILE. DIVIDE 4 INTO AAAA GIVING BIDON3 REMAINDER R. IF R = O DIVIDE 100 INTO AAAA GIVING BIDON3 REMAINDER R IFR = 0 DIVIDE 400 INTO AAAA GIVING BIDON3 REMAINDER R IFR = 0 MOVE VRAI TO BISSEXTILE END-IF ELSE MOVE VRAI TO BESSEXTILE END-IF END-IF. FIN. EXIT. AFFICHER SECTION. MOVE JJJ TO EDJJ. DISPLAY EDJJ " " NOMMOIS(MOIS) " " AAAA. FIN. EXIT.

113