Langage Cobol
Langage Cobol
Langage Cobol
Cobol Tables des Matières 0-1 Cobol Tables des Matières 0-2
5 GESTION DES FICHIERS EN COBOL
7 COMMUNICATION INTER-PROGRAMME
10 TRI - FUSION
6 LES FORMATS EDITES
A0 LISTE DES MOTS RESERVES
1.Principe de l'édition
2. Les symboles d'insertion
2.1. Le point décimal A1 MISE AU POINT
2.2. Les symboles d'insertion simple : 1. Generalites
2.3. Les symboles d'insertion fixe
2.4. Les symboles d'insertion flottante : 2. inverseurs
3. Les symboles de suppression et de remplacement 3. Sections declaratives de mise au point
3.1. Remplacement par des espaces
4. Debug-item
3.2. Remplacement par des astérisques
5. Outils spéciques
4. Remarques générales
5. Rubrique numérique éditée
A2 DIFFERENCES ANS74-ANS85
6. Rubrique alphanumérique éditée
7. Modification du sens de certains symboles d'édition
7.1. Changement de symbole monétaire A3 CODES ASCII et EBCDIC
7.2. Inversion des rôles de la virgule et du point
8. Gestion de page
8.1. Définition de la page logique
8.2. Utilisation
Cobol Tables des Matières 0-3 Cobol Tables des Matières 0-4
GENERALITES DU LANGAGE COBOL
A V E R T I S S E M E N T
Le présent document ne doit pas être considéré comme un manuel de référence du COBOL mais comme
un support du cours COBOL.
1. Historique
En 1959, des représentants des secteurs public et privé se réunissent au Pentagone pour étudier les
Certaines parties dans le codage des instructions ont été volontairement omises:
possibilités d'élaborer un langage de programmation adapté à la résolution des problèmes de gestion de
• par souci de clarté de l'exposé
l’Armée; ce langage fut appelé COBOL (Common Business Oriented Language : Langage commun
• pour éviter les outils incitant à la rédaction de programmes mal structurés. orienté vers la gestion). Sa première version fut opérationnelle en décembre 1959.
• parce qu’elles sont obsolètes
• parce qu'elles sont pas (ou peu) utilisées dans la pratique Issue de ce groupe de travail, la CODASYL (Conférence On Data System Language) produisit une
seconde version en 1961.
2. Intérêt du COBOL
Les programmes peuvent être facilement transposés d'une machine à une autre.
La majorité des ordinateurs disposent d'un compilateur COBOL, quels que soient leur puissance et le
système d’exploitation qu’ils utilisent.
Ceci facilite les changements de configuration; toutefois l'indépendance n'est réelle que si l'on respecte la
norme, et donc si l'on s'abstient d'utiliser les extensions propres au constructeur.
Ces problèmes se caractérisent par des volumes importants de données à traiter; le COBOL intègre la
majorité des fonctions de manipulation des fichiers traditionnels
Les phrases de COBOL sont proches du langage courant anglais ce qui facilite la lecture du programme
mais entraîne en contrepartie certaines "longueurs".
0,2 M3 Organisation séquentielle indéxée: gestion des fichiers d'organisation séquentielle indexée On distingue : - les mots-utilisateurs
- les mots-réservés
0,2 M4 : Organisation relative: gestion des fichiers d'organisation relative - les noms-système
0,2 M5 Tri et fusion: inclusion de tri ou de fusion de fichiers dans un programme 4.2.1. Les mots-utilisateurs
0,1 M6 Edition: aide à la production d'états imprimés Créés par le programmeur, ce sont des noms servant à référencer des structures de données ou de
traitements. On distingue :
0,2 M7 Segmentation : procédures de recouvrement de sections de la division des traitements
♦ les noms de données : ils servent à désigner une zone de mémoire contenant une information :
0,2 M8 Bibliothèque : inclusion de textes dans un programme source
♦ les noms de fichiers : permettent de référencer une structure de fichier
0,2 M9 Mise au point : aide à la mise au point et contrôle de l'exécution d'un programme
♦ le nom de programme : identifie le programme
0,2 M10 Communication inter-programmes : - sous-programmes
- partage des données entre programmes
♦ les noms de paragraphes et de sections : délimitent des sous-ensembles du programme
0,2 M11 Communications : émission et réception de messages
♦ les noms d'article : identifient une structure d'enregistrement logique dans un fichier.
0,1 M12 Fonctions intrinsèques : calcul, caractères, date
♦ les noms d'index : désignent des index associés à une table
♦ les numéros de niveaux : indiquent la hiérarchie des rubriques à l'intérieur d'une structure complexe.
Tous ces mots propres au programmeur ont une portée limitée au programme qui les utilisent (et les
programmes contenus en cas de globalisation).
A l'exception des noms de paragraphes et de sections et des numéros de niveaux, les mots-utilisateurs Ces mots ont par ailleurs une orthographe fixée qu'il faut impérativement respecter.
doivent comporter au moins une lettre.
Exemples On distingue :
Noms de données : A1 TOTAL-FACTURE COEFF3 ♦ les mots-clés : Ils identifient les clauses et les instructions ; la présence du mot clé identifiant
une instruction est indispensable chaque fois que cette instruction est utilisée.
Nom de paragraphes ou de sections : S1 CALCUL 71 7-1
Exemple : ADD identifie le verbe arithmétique de l'addition
Remarques : ♦ les mots facultatifs :Ils ne servent qu'à se rapprocher de la syntaxe de la langue anglaise ;
leur absence ne modifie pas le sens de la clause ou de l'instruction.
- Les mots cités en exemples de noms de données pourraient aussi être des noms de fichiers ou d'articles
ou d'index. Exemple : DATA RECORD IS ARTICLE1
peut s'écrire RECORD ARTICLE1, ARTICLE1 étant un mot utilisateur
- L'écriture TOTAL-FACTURE représente un seul mot à cause du tiret ; TOTAL FACTURE est
considéré comme une suite de deux mots. ♦ les conjonctions : pour relier des opérandes dans les clauses ou instructions : virgule ou
point-virgule (facultatifs) ; pour former des expressions conditionnelles composées : AND et
- Le nom de section 1 est différent du nom 01 OR
Ils servent à communiquer avec le système d'exploitation pour désigner une machine, un langage ou un
• Les littéraux non numériques sont des chaînes d'au plus 160 caractères quelconques encadrées de dispositif (PRINT, SWITCH-1, CONSOLE, TERMINAL, SYSIN, SYSOUT, ...)
guillemets (ou apostrophes suivant dialecte).
LABEL RECORD IS STANDARD indique que pour identifier ce fichier, on utilise la procédure
des étiquettes standards.
5. Structure d'un programme
Exemple : PAR0. ADD A TO B Elle contient la description des informations ou données que le programme reçoit, traite et produit ; ces
MOVE A TO I. données se répartissent en trois sections :
PAR1. MOVE B TO C.
S2 SECTION. ♦ La FILE SECTION contient toutes les informations relatives aux structures de fichiers (données
externes).
nd : nom de donnée
nt : nom de traitement (paragraphe ou section)
6. Conventions ch : chaîne de caractère
ent : entier
lit : littéral (numérique ou chaîne de caractères)
Pour définir le format des instructions et des clauses de COBOL nous appliquerons les conventions
fich : nom de fichier
suivantes :
enreg : nom d'enregistrement logique
6.1. Tous les mots écrits en majuscules sont des mots-réservés ; les mots écrits en minuscules sont des
mots-utilisateurs.
6.2. Les mots-réservés soulignés sont des mots-clés ; les mots-réservés non soulignés sont facultatifs.
6.3. Les accolades { } rassemblent les options de format, écrites les unes en dessous des autres, parmi
lesquelles il faut en choisir une.
Exemple : PICTURE
IS chaîne
PIC
Une information ou donnée est la valeur d'un attribut qui caractérise un objet ou une entité.
1. Les verbes COBOL
Exemple : Si on considère l'objet "une automobile", on peut caractériser cet objet par sa marque, son type,
sa puissance (entre autres) ; marque, type et puissance fiscale sont des attributs de "automobile", auxquels
on peut donner des valeurs comme RENAULT, CLIO, 6CV.
1.1. Catégorie fonctionnelles de verbes
Un attribut peut être un objet simple (p.ex. la puissance fiscale) ou non ; dans ce cas il peut être à son tour
Verbes arithmétiques : ADD,SUBTRACT, MULTIPLY, DIVIDE, COMPUTE caractérisé par des attributs plus simples.
Verbes de condition : IF, EVALUATE, les verbes d'entrée-sortie utilisés avec l'une des clauses AT Sur cet exemple, nous avons fait apparaître une structure hiérarchique entre les données. L'objet
END ou INVALID KEY, les verbes arithmétiques avec une phrase SIZE ERROR, SEARCH avec qui se trouve au sommet de la hiérarchie s'appelle une entité de base.
WHEN
STRUCTURER des données consiste donc à regrouper ces données autour d'une entité de base en les
classant suivant une hiérarchie.
1.2. Types d'instructions et de phrases
Nous appelons ARTICLE (ou enregistrement logique) une telle structure de données.
On appelle instruction conditionnelle une instruction identifiée par un verbe de condition ; les autres
instructions sont dites impératives. Nous appelons RUBRIQUE la zone mémoire permettant de stocker la valeur d'un attribut.
Une phrase impérative ne contient que des instructions impératives, sinon elle est de type conditionnel. En nous référant au schéma précédent, nous constatons que nous aurons deux sortes de rubriques :
• des rubriques élémentaires qui ne contiennent qu'une seule valeur non décomposée (ex. Marque,
Gamme, etc..)
Remarques :
a) La rubrique structurée la plus importante est celle qui est constituée de l'ensemble des rubriques
relatives à un article.
1 A 41 J 4A
2.5.2.2. Rubriques de type numérique
2 B 42 K 4B
On distingue deux représentations.
3 C 43 L 4C
5 E 45 N 4E
Chaque chiffre occupe un octet et est représenté par son code ASCII ou EBCDIC
6 F 46 O 4F
7 G P 50
Exemple : Soit la rubrique PUISSANCE d'image 99 ; la valeur 06 est représentée (en hexadécimal, 47
ASCII) 8 H 48 Q 51
30 36 9 I 49 R 52
2 octets
Si le nombre est signé, il y a deux manières de préciser le signe : Exemple : Soit la rubrique MONTANT d'image S9(5) (l'absence de spécification entraîne "signe
superposé"); la valeur + 953 est représentée :
a) Le signe occupe une position propre
Sa valeur est donnée par le code correspondant au caractère + (soit 2B) ou - (soit 2D) ; elle est placée dans
une position séparée soit en tête de zone, soit en fin de zone ; ce choix est fixé par le programmeur. 30 30 39 35 43
Exemple :
Soit la rubrique MONTANT d'image S9(5), (le symbole S indique une rubrique signée) avec signe séparé 5 octets
en tête ; la valeur + 953 est représentée :
On remarque que la valeur du dernier octet est identique au code ASCII de la lettre C.
2B 30 30 39 35 33 Remarques : Utiliser de préférence la forme (a) car le système s'y ramène dans les opérations
arithmétiques.
6 octets : 5 chiffres + le signe
En prenant la même rubrique, mais avec une déclaration de signe séparé en fin, nous aurions obtenu 2.5.2.2.2 La représentation décimale condensée
(PACKED-DECIMAL ou COMPUTATIONAL-3)
30 30 39 35 33 2B
Pour gagner de la place sur les supports et accélérer les traitements, il peut être utile de placer deux codes
numériques par octet ; en effet, le quartet de gauche dit hors-texte, est identique pour tous les chiffres et
vaut ‘3’ en ASCII et ‘F’ en EBCDIC.
b) Le signe n'occupe pas de position séparée
Dans ce cas, la codification du signe est "superposée", à celle du chiffre de plus faible ou de plus fort Exemple : Soit la rubrique MONTANT d'image 9(5) avec représentation décimale condensée ; la
poids (par analogie avec les cartes perforées, on parle de "sur-perforation"). valeur 953 est représentée
3 octets
Remarques :
A noter que sur cet exemple le nombre de positions est pair et donne un nombre entier d'octets. - Le symbole V est unique au niveau d'une description d'une image ; s'il est omis, il est supposé être à
droite et l'image correspond alors à celle d'un nombre entier.
Remarques : - Si la rubrique doit être visualisée (sur écran ou sur papier), il est nécessaire de faire figurer le point au
niveau de l'affichage ; pour cela on utilise des rubriques spéciales de type numérique édité étudiées
- Une rubrique de type numérique, non signée, sera toujours considérée comme contenant un nombre ultérieurement.
positif, quelle que soit la représentation utilisée.
- Sur la plupart des ordinateurs on dispose d'instructions machine permettant d'effectuer des opérations
arithmétiques sur des nombres représentés en format binaire ou en format décimal condensé ; les nombres
en format décimal étendu doivent être d'abord être convertis dans l'un des deux formats précédents.
3. Règles d'alignement
Exemple :
Les en-têtes de division, section, paragraphes et de description de fichier commencent en zone A. Les
instructions et clauses s'écrivent en zone B. Une instruction peut être rédigée sur plusieurs lignes. Il est
4. Unicité de référence possible d'inclure des lignes totalement vierges à tout endroit du programme.
La zone indicateur (col. 7) assure trois fonctions selon le caractère qui y est écrit :
Un même mot-utilisateur pet être utilisé pour désigner des données différentes, sous réserve qu’ellea - continuation d'un littéral non numérique portant jusqu’à la col.72 de la ligne précédente
appartiennent à des groupes différents. Pour les référencer sans ambigüité, on qualifiera leur nom par
celui du groupe, ou du fichier les contenant. La même disposition s’applique aux paragraphes de sections * ligne commentaire : Le contenu de cette ligne ne sera pas pris en compte par le compilateur ;
différentes et aux textes-source de bibliothèques différentes. cette ligne ne sert qu'à améliorer la lisibilité et la compréhension du programme.
Exemple D ou d instrument de mise au point : Cette fonction sera étudiée plus tard.
01 IDENTITE.
02 NOM PIC X(20).
02 PRENOM PIC X(15). 0 1 2 3 4 5 6 7 8
Colonne
12345678901234567890123456789012345678901234567890123456789012345678901234567890
01 INDIV.
02 NOM PIC X(20). Marge A B
02 PRENOM PIC X(15). * CECI EST UNE LIGNE DE COMMENTAIRES
. 77 Exemple pic x(75) value "ce littéral non-numérique va jusqu’en colonne72
. - " et se prolonge par la suite"
MOVE NOM OF IDENTITE TO NOM OF INDIV.
DATA DIVISION.
rubrique-de-description-de-fichier
Elle contient la description du système utilisé et des informations relatives à la gestion des entrées- rubrique-de-description-d'article ...
sorties.
rubrique-de-description-de-niveau-77
En ANS85, cette division est facultative. rubrique-de-description-d'article ...
Trois sections :
♦ LINKAGE SECTION : description des paramètres lorsque le programme est un sous-programme Elle sert à définir le format externe ou image d'une rubrique élémentaire (nombre de chiffres, position de la
(détaillée au : Communications inter-programmes). marque décimale, etc...)
Signalons toutefois qu'à quelques exceptions près, la description d'une rubrique se fait de façon
identique dans les trois sections. Dans les paragraphes qui suivent, nous nous placerons en priorité au PICTURE
niveau de la WORKING-STORAGE SECTION. IS Format
PIC
Ces sections peuvent être suivies de la COMMUNICATION SECTION et de la REPORT SECTION si
l'on utilise respectivement les modules de communication et d'édition , ainsi que de sections Le format est constitué d'une suite de symboles décrits ci- dessous (liste partielle) :
spécifiques aux dialectes (SCREEN, LOCAL-STORAGE, ...).
• 9 : représente un chiffre
♦ Les 3 premiers symboles permettent de décrire des données de type numérique : le symbole X permet de
♦ le numéro de niveau est compris entre 1 à 49 ou vaut 77, 66 ou 88. décrire des données de type alphanumérique (chaînes de caractères) ; la présence du symbole . dans un
format indique une donnée de type numérique édité.
♦ nd : nom de donnée, identifie la rubrique.
♦ La description du format peut comporter jusqu'à 30 symboles ;
♦ le mot clé FILLER remplace le nom d'une rubrique qui n'est jamais référencée exeplicitement par les
instructions du programme ; il peut être utilisé dans plusieurs descriptions de rubriques du même ♦ L'emploi de facteurs de répétition est conseillé : X(5) au lieu de XXXXX
programme.
♦ Cette clause est obligatoire pour toutes les rubriques élémentaires. Elle est interdite pour les index.
La description d'une rubrique structurée se réduit au couple (n° de niveau, nom) ; les rubriques élémentaires
doivent être détaillées par des clauses (sauf les index). Exemple :
5) PIC 99.9 nombre décimal en format numérique édité ; le séparateur décimal est
matérialisé par un point.
Remarquons que la rubrique de l'exemple 5 est de classe alphanumérique (du fait de la présence du
point) alors que les rubriques des exemples 2 à 4 sont de type numérique.
Il existe d'autres symboles pour décrire un format numérique édité (Cf Module Edition)
début et longueur est une expression numérique quelconque ♦ COMPUTATIONAL-3 ou COMP-3 ou PACKED-DECIMAL: représentations décimales condensées
Si longueur n'est pas précisée, elle porte jusqu'au dernier caractère de nd. signées.
Si nd est de type autre qu'alphanumérique, on le considère comme redéfini dans une donnée de ce type de la ♦ COMPUTATIONAL-1 (COMPUTATIONAL-2) = virgule flottante simple (double) précision
même taille que nd.
♦ COMPUTATIONAL ou COMP ou BINARY : format binaire sur 32 bits (moins de 10 chiffres dans la
Exemple PICTURE)
77 DONNEE PIC X(10) VALUE "abcdefghij". Cette clause peut s'appliquer à une rubrique élémentaire ou structurée ; dans ce cas, elle est valable pour
toutes les rubriques élémentaires qui composent la rubrique structurée.
Règles du langage :
♦ nd2 ne peut contenir la clause REDEFINES mais nd2 peut être subordonné à une rubrique qui contient
cette clause.
♦ cette clause est interdite pour les rubriques de niveau 01 de la FILE SECTION.
La redéfinition de la rubrique nd2 commence à nd1 et se termine lorsqu'un numéro de niveau inférieur ou Il sera défini soit dans le paragraphe SPECIAL-NAMES, soit en DATA DIVISION. Dans ce dernier
égal à celui de nd1 est rencontré. cas, il est repéré par un numéro de niveau 88.
Exemple : 01 MOUVEMENT.
02 D1. 02 INDIC PIC 9(6).
04 NOM PIC X(20). 02 TYP PIC 9.
04 PRENOM PIC X(20). 88 LECTURE VALUE 1.
02 D2 REDEFINES D1. 88 MODIF VALUE 2.
03 ADRESSE PIC X(20). 88 SUPPRES VALUE 4.
03 C-POSTAL PIC X(5).
03 LOCALITE PIC X(15). IF LECTURE................
ELSE IF MODIF...........
En cas de redéfinitions multiples, c'est toujours la rubrique d'origine qui est citée en nd2.
L'intérêt des noms-conditions est donc d'améliorer la lisibilité du pg ; ils permettent aussi de simplifier
03 DATE-1. l'énoncé de conditions, car un seul nom-condition peut être assigné à plusieurs valeurs en particulier
04 JOUR-1 PIC 99. grâce à la locution THRU :
04 MOIS-1 PIC 99.
04 AN-1 PIC 99.
03 DATE-2 REDEFINES DATE-1 PIC 9(6).
03 DATE-3 REDEFINES DATE-1. Format général :
04 FILLER PIC X.
04 JOUR-3 PIC 9(3). VALUE IS THROUGH
04 AN-3 PIC 99. 88 nom-condition littéral-1 littéral-2 …
VALUES ARE THRU
Sauf si les rubriques nd1 et nd2 sont de niveau 01, les longueurs de la rubrique de redéfinition et de la
rubrique d'origine doivent être égales.
Exemples : VALUES ARE 1 2 16.
VALUES ARE 4 THRU 12.
VALUES ARE 5 THRU 9 13 17.
3.6. La clause VALUE
Elle permet de préciser la valeur initiale d'une rubrique ; une rubrique déclarée sans valeur initiale contient
une valeur quelconque non définie. Un nom-condition doit suivre la description de la rubrique à laquelle il est associé ; cette dernière peut
être quelconque à l'exception de :
VALUE IS littéral
• un autre nom-condition
Le littéral doit être du même type que la rubrique. • une rubrique de niveau 66 (clause RENAMES)
• un index
Cette clause est interdite : • un groupe contenant des données avec JUSTIFIED, SYNCHRONIZED, et USAGE (autre que
DISPLAY).
• dans la FILE SECTION
Si la référence à une variable conditionnelle nécessite l'indexation ou l'indiçage, la référence à l'un
• à l'intérieur d'une rubrique de redéfinition. quelconque de ses noms-conditions la nécessite de la même façon.
Exemple Les règles d'alignement appliquées sont celles décrites au chapitre 2 § 3.
02 D1 PIC X(5) VALUE "DEBUT".
03 N1 PIC 99V9 VALUE 5.2.
Utilisation des constantes figuratives
Une seconde utilisation de la clause VALUE permet la définition de noms-conditions.
Ce sont des constantes identifiées par des mots clés ; elles ont des valeurs particulières.
Un nom-condition est une référence symbolique assignée à une ou plusieurs valeurs spécifiques d'une
variable donnée, ou à un inverseur. ZERO
ZERO représente soit "0", soit un ou plusieurs caractères "0" selon le contexte
SPACE représente un ou plusieurs caractères espace Elle permet de préciser l'alignement d'une rubrique élémentaire sur les bornes d'adressage spécifiques de la
SPACES mémoire de l'ordinateur à savoir :
• La première (ZERO) peut s'appliquer à des rubriques de type numérique ou non numérique ; les autres
sont de type non numérique. 3.9. La clause JUSTIFIED
• Elles s'écrivent sans guillemet. Elle permet, associée à une zone de réception alphabétique ou alphanumérique, de force l'alignement à
droite, plutôt qu'à gauche (alignement standard).
• Contrairement aux autres constantes, leur longueur dépend de la longueur des rubriques qu'elles servent
à initialiser. JUSTIFIED RIGHT
JUST
Exemples : D1 PIC X(5) VALUE "0". 0bbbb
D1 PIC X(5) VALUE ZERO. 00000
D1 PIC X(5) VALUE ALL "-" -----
3.10. La clause SIGN
Elle permet de préciser la représentation interne du signe pour une rubrique numérique de format
décimal étendu. (cf.§ 2.5.2.2-2).
3.7. La clause BLANK
Elle permet de remplacer la valeur nulle d'une rubrique de type numérique ou numérique édité par des
espaces. [SIGN IS] LEADING [SEPARATE CHARACTER]
Le format interne de la rubrique doit être DISPLAY. TRAILING
BLANK WHEN ZERO
ZEROS ♦ Elle peut être spécifiée pour un groupe.
ZEROES
♦ le format externe (PICTURE) doit comporter le symbole S
La rubrique sera considérée comme étant du type numérique édité.
♦ la clause indique que le signe occupe dans la représentation interne une position séparée à gauche
(LEADING) ou à droite (TRAILING).
Exemple : D1 PIC 9(5) BLANK ZERO.
♦ l'absence de cette clause pour une rubrique numérique signée, de format interne décimal étendu, entraîne
Si D1 est affecté d'une valeur nulle, la rubrique sera remplie par 5 espaces. une représentation du signe superposée avec celle du chiffre de droite.
1) Le même symbole / sert à spécifier la division réelle et la division entière ; le choix est déterminé par
le type des objets manipulés : / indique une division entière si et seulement si tous les opérandes
(y compris celui qui sera affecté de la valeur finale) sont de type entier.
3.12. Exemple de synthèse
2) Pour évaluer la valeur d'une expression arithmétique, le processeur conserve les valeurs
intermédiaires avec une précision maximale ; seul le résultat final sera, tronqué ou arrondi en
77 N USAGE COMP. fonction du format externe de la rubrique affectée.
77 TOTAL-TTC PIC 9(5).99 BLANK ZERO.
01 DONNEE-1. 3) Les opérandes n'ont pas besoin d’être du même format interne ; les conversions de format sont faites
05 CODE-ART-1PIC X(5) VALUE SPACE. automatiquement.
05 PRIX-UNIT-1 PIC 9(4)V99 COMP-6.
05 QUANTITE-1 PIC S9(3) COMP-3 VALUE +0.
05 QUANTITE-2REDEFINES QUANTITE-1 PIC S9V99 COMP-3.
05 COEF-1 PIC S99V99 SIGN TRAILING SEPARATE.
Le résultat d'un calcul peut comporter davantage de chiffres que de positions prévues au niveau de la
4. La division PROCEDURE rubrique affectée.
Rappelons que l'affectation d'une valeur numérique se fait conformément à la règle d'alignement numérique
Elle contient la description des traitements à effectuer sur les informations spécifiées dans la division des énoncée au chap. 2 paragraphe 3 ; s'il y a débordement à gauche la valeur sera tronquée ; s'il y a
données. débordement à droite, la valeur sera tronquée ou arrondie selon que le programmeur aura précisé ou non la
locution ROUNDED. Cette locution est à spécifier pour chaque instruction dont le résultat doit être arrondi.
Une expression arithmétique est une combinaison syntaxiquement correcte de symboles pris dans l'ensemble ♦ si le premier chiffre tronqué vaut de 0 à 4, les chiffres restants ne sont pas modifiés.
suivant :
♦ si ce chiffre vaut de 5 à 9, on rajoute une unité au dernier chiffre restant.
♦ les noms de données identifiant des rubriques élémentaires de type numérique
♦ les constantes de type numérique Exemple : Soit A PIC 99V99
♦ les opérateurs arithmétiques
Le résultat 5.1772 donne sans arrondi 5.17
Remarque : Dans l'évaluation d'une expression arithmétique, l'arrondi ne porte que sur le résultat final. 1) Comparaison numérique :
Elle compare les valeurs algébriques de deux données de type numérique ; la longueur de ces
4.3. Expressions conditionnelles données n'est pas significative. Une donnée non signée est considérée comme positive.
Une expression conditionnelle est une expression dont le résultat est VRAI ou FAUX. 2) Comparaison non numérique :
Elle opère sur deux données de type non numérique ; par extension, l'une des deux peut être
4.3.1. Expressions conditionnelles simples numérique à condition qu'elle soit entière et déclarée en mode DISPLAY. L'algorithme compare les
deux données caractère par caractère, de gauche à droite, jusqu'à trouver une différence ou la fin
des rubriques. Le résultat de la comparaison est déterminé comme suit :
4.3.1.1. Relation
- en cas de différence, c'est la donnée contenant le caractère de plus fort poids (cf. table du code
Une relation permet d'exprimer la comparaison de deux objets ; ces objets sont des données constantes ou ASCII) qui est considérée comme étant la plus grande
variables ; l'un des deux doit être obligatoirement une donnée variable.
- sinon, les deux données ont des valeurs égales.
Une relation s'écrit :
Si les deux données sont de longueurs différentes, la plus courte est considérée comme étant
complétée à droite d'espaces jusqu'à concurrence de la plus longue.
nd1 Opérateur de nd2
constante 1 relation constante 2
exp-arith 1 exp-arith 2 Exemples
IS [NOT] GREATER THAN strictement supérieur inférieur ou égal 2) Soit A PIC X(5).
IS [NOT] > C PIC X(3).
IS [NOT] LESS THAN strictement inférieur supérieur ou égal Valeur de A Valeur de C Résultat
IS [NOT] < TOTbb TOT Egalité
TOTOb TOT A>C
IS [NOT] EQUAL TO égal différent TOTOb XYb A<C
IS [NOT] =
IS GREATER THAN OR EQUAL TO Un test de classe permet d'exprimer le fait que la valeur d'une donnée est de classe numérique ou
IS >= alphanumérique.
♦ Un test de classe numérique ne peut s'appliquer qu'à une rubrique élémentaire déclarée en USAGE
IS LESS THAN OR EQUAL TO DISPLAY.
IS <= ♦ Un test de classe alphabétique ne peut pas s'appliquer à une rubrique de type numérique.
Exemples
A < 10
NOM = NOM-REF
Elle détermine si la valeur algébrique d'une expression arithmétique est inférieure, supérieure ou égale à
zéro.
NEGATIVE
Expression arithmétique IS [NOT] POSITIVE
ZERO
nom-condition
Elle est vraie si la valeur courante de la variable conditionnelle associée appartient (ou est égale) à celle
attribuée au nom-condition.
Une condition simple NEGATIVE est une condition simple précédée de l'opérateur logique NOT. Elle a
pour effet d'attribuer la valeur booléenne opposée à celle de la condition simple.
Une condition COMPOSEE résulte de la conjonction de conditions par les opérateurs AND ou OR :
AND
condition condition
OR
Les options DATE et TIME permettent de lire respectivement la date et l'heure enregistrées au niveau du
b) PROCEDURE DIVISION.
système de l'ordinateur.
nom de paragraphe. phrase ... ...
♦ Pour l'option DATE, nd doit être une rubrique élémentaire de 6 chiffres, non signée,
PIC 9(6) DISPLAY ; la valeur obtenue est du format
Ceci signifie que :
AAMMJJ
Année Mois Jour
le découpage de la division en paragraphes ou en sections et paragraphes est obligatoire.
Permet d'envoyer sur un fichier de sortie un faible volume d'informations construit par juxtaposition des
valeurs des objets cités :
4.5. ACCEPT
nd1 nd2
Permet d'initialiser une rubrique à l'aide d'une valeur particulière (date ou heure) ou d'une valeur lue dans le DISPLAY .... [ WITH NO ADVANCING ]
fichier d’entrée de l'utilisateur. lit1 lit2
DATE
Format : ACCEPT nd FROM DAY L'impression n'incluant aucune conversion de format, les valeurs numériques doivent être codées en ASCII.
TIME
DAY-OF-WEEK
Ex. : DISPLAY "NOM : " NM " PRENOM : " PRNM.
nd est une rubrique en mode DISPLAY d'au plus 71 caractères ; seules les positions correspondant à
des caractères effectifs sont initialisées ; les autres restent inchangées ; il est donc vivement conseillé Même remarque que pour ACCEPT
d'initialiser correctement la rubrique nd avant l'exécution de l'ordre ACCEPT.
4.7. Verbes arithmétiques
De nombreuses variantes existent, suivant les implantations, permettant une gestion avancée de
messages à l'écran.
4.7.1. Généralités
Exemple : 01 IDENTITE.
02 NOM PIC X(10) VALUE SPACE. ♦ Dans toutes les instructions de ce paragraphe, les opérandes identifiés par nd désignent des rubriques
02 PRENOM PIC X(10) VALUE SPACE. numériques ; cependant, les zones de réception des calculs spécifiées après GIVING, n'intervenant pas
. dans les calculs, peuvent être de type numérique édité.
♦ La phrase ON SIZE ERROR permet de spécifier un traitement à accomplir en cas de dépassement de [ON SIZE ERROR ph-impér.]
capacité lors des calculs ou de division par 0. Les rubriques de réception associées à cette phrase ne [NOT ON SIZE ERROR ph-impér.]
seront pas modifiées en cas d'erreur. La phrase NOT ON SIZE ERROR en est le pendant. [END-SUBTRACT]
♦ La locution CORRESPONDING (ou CORR) peut être utilisée dans le cas où les opérandes nd1 et nd2
désignent des rubriques de GROUPES. Une rubrique de nd1 et une rubrique de nd2 correspondent si :
Format 2 : nd1 nd2
elles sont désignées par le même nom (autre que FILLER) et ont les mêmes qualificateurs SUBTRACT lit1 ... FROM lit-m
jusqu'à nd1 et nd2 non inclus GIVING nd-n [ROUNDED]
ce sont des données élémentaires
nd1 et nd2 ne doivent pas contenir de niveau 66, 77, 88 [ON SIZE ERROR ph-impér.]
une donnée subordonnée à nd1 et nd2 et contenant une clause REDEFINES, RENAMES, [NOT ON SIZE ERROR ph-impér.]
OCCURS ou INDEX est ignorée de même que les données qui lui sont subordonnées. [END-SUBTRACT]
Sous ces conditions, l'opération portera individuellement sur chaque couple de données correspondantes. Format 3 : CORRESPONDING
SUBTRACT CORR nd-1 FROM nd-2 [ROUNDED]
4.7.2. Addition
[ON SIZE ERROR ph-impér.]
nd1 nd2 [NOT ON SIZE ERROR ph-impér.]
Format 1 : ADD lit1 lit2 TO nd-m [ROUNDED] [nd-n [ROUNDED]]… [END-SUBTRACT]
Format 1 : nd1
nd1 nd2 MULTIPLY lit1 BY {nd-2 [ROUNDED]} ...
Format 2 : ADD lit1 … TO lit2 GIVING nd-m [ROUNDED] …
[ON SIZE ERROR ph-impér.]
[ON SIZE ERROR ph-impér.] [NOT ON SIZE ERROR ph-impér.]
[NOT ON SIZE ERROR ph-impér.] [END-MULTIPLY]
[END-ADD]
4.7.5. Division
Exemple : ADD N M 3 TO P P=N + M + 3 + P
ADD N M 3 GIVING P P=N + M + 3 Format 1 : nd1
DIVIDE lit1 INTO {nd-2 [ROUNDED] } ...
Format 2 : nd1 nd2 L'instruction MOVE permet de recopier dans une (ou plusieurs)rubrique(s) dites réceptrices, le contenu
DIVIDE lit1 INTO lit2 GIVING {nd-3 [ROUNDED]} … d'une (ou plusieurs) rubrique(s) dites émettrices.
Remarques : ♦ Le type du transfert est déterminé par le type de l'émetteur et du récepteur ; le tableau ci-dessous résume
1. L'option BY implique GIVING les transferts possibles
2. L'option REMAINDER permet de recueillir le reste de la division dans nd-4 ; elle interdit l'usage de
plusieurs zones de réception.
Zone de Réception
Zone d’Emission Num. entier Num.fract. Alphabét. Alphanum. Alph. Edité Num. Edité
4.7.6. Calcul Num. entier N N I X X N
Num. fractionnaire N N I I I N
La valeur d'une expression arithmétique complexe peut être obtenue par l'instruction : Alphabétique I I X X X I
Alphanumérique X* X* X* X X X*
COMPUTE {nd-1 [ROUNDED]} ... = expression-arithmétique Alphanum. Edité I I X X X I
[ON SIZE ERROR ph-impér.] Num. Edité I I I I X X
[NOT ON SIZE ERROR ph-impér.]
[END-COMPUTE].
X : transfert non numérique
Ex. : COMPUTE TOTAL ROUNDED = PUHT * QTE + TRSP * (1 - TX) X* : transfertautorisé seulement si tous les caractères émis sont autorisés dans la zone de réception
N : transfert numérique
I : transfert interdit
Transfert du signe : En COBOL 85, l'instruction EVALUATE permet de généraliser la notion de structure alternative, et
- Emetteur signé/récepteur non signé : le récepteur contient la valeur absolue de l'émetteur représente une implémentation de la liste de cas.
- Emetteur non signé/récepteur signé : la valeur de l'émetteur est considérée comme positive
- Emetteur numérique entier/récepteur alphanumérique : le signe n'est pas transféré. nd-1 nd-2
lit-1 lit-2
expression-1 ALSO expression-2 ...
4.9. IF EVALUATE TRUE TRUE
FALSE FALSE
Elle permet d'exprimer une alternative entre deux traitements.
ANY
Format : IF expression conditionnelle THEN phrase-1 condition-1
NEXT SENTENCE TRUE
FALSE
ELSE phrase-2 WHEN nd-3 THROUGH nd-4
[NOT] lit-3 THRU lit-4
OTHERWISE NEXT SENTENCE expression-3 expression-4
[END-IF]
ANY
condition-2
Exemple IF A NOT NUMERIC OR A NOT > 0 TRUE
DISPLAY "ERREUR***" FALSE
ELSE ADD A TO SOMME. ALSO nd-5 THROUGH nd-6
[NOT] lit-5 THRU lit-6
♦ Si l'expression conditionnelle donne un résultat vrai, on effectue le traitement décrit dans "phrase-1" expression-5 expression-6
sinon on effectue celui qui est décrit dans "phrase-2".
phrase-impérative-1 …
Remarques :
[ WHEN OTHER phrase-impérative-2]
♦ ne pas oublier le point à la fin de "phrase-2" ou END-IF. Le mot clé ELSE indique la fin de "phrase-1".
[END-EVALUATE]
♦ phrase-1 et/ou phrase-2 se composent d'instructions impératives et/ou d'une instruction IF.
Les opérandes ou les mots TRUE ou FALSE précédant le premier WHEN sont appelés les sujets de la
♦ IF et ELSE s'emploient par paires ; tout mot ELSE est à associer avec la première condition qui le sélection, alors que les opérandes suivant WHEN sont appelés les objets de la sélection. Le nombre de
précède et qui n'est pas déjà reliée à un mot ELSE. sujets doit être égal au nombre d'objets, la correspondance s'opérant par rang (position relative).
Exemple : L'instruction s'exécute en évaluant les conditions, expressions ou valeurs logiques des sujets et des
IF .... objets. Chaque objet de la sélection suivant le premier WHEN est comparé au sujet de même rang. Si la
IF .... comparaison est satisfaite pour chacun des couples sujet-objet (ANY satisfaisant toute condition), alors
ELSE .... l'instruction impérative qui suit ce WHEN est exécutée et l'on quitte EVALUATE.
ELSE IF ....
ELSE .... . Le processus est répété en cas d'inégalité pour trouver le premier WHEN satifaisant l'ensemble des
conditions. Si aucune phrase suivant WHEN n'a été sélectionnée, et si WHEN OTHER a été spécifié, la
phrase-impérative-2 est exécutée, et l'instruction EVALUATE est terminée.
Il est possible de préciser CONTINUE en tant que phrase-impérative-1 : aucune action n'est effectuée et l'on
passe à l'instruction suivant EVALUATE.
Exemple 1 EVALUATE A
WHEN 1 PERFORM TRAITEMENT-1
WHEN 2 PERFORM TRAITEMENT-2
WHEN 5 PERFORM CONTINUE
WHEN OTHER PERFORM TRAITEMENT-3
END-EVALUATE.
Les instructions de TRAITEMENT-1 sont exécutées pour A=1, B=5 et C différent de 7, celles de ♦ L'instruction PERFORM peut être écrite avant ou après le traitement qu'elle fait exécuter.
TRAITEMENT-2 pour A=2, B compris entre 4 et 7, et C=3 ainsi que pour A=5 quelles que soient les
valeurs de B et C, et enfn celles de TRAITEMENT- 3 sont exécutées dans tous les autres cas. ♦ Dans les formats 3 et 4 (cf ci-après), par défaut ou si l’on précise TEST BEFORE la condition est
évaluée avant d’exécuter le bloc ; avec TEST AFTER, après exécution du bloc.
Exemple 3 EVALUATE A = 1 ALSO B = 1 A B
WHEN TRUE ALSO TRUE PERFORM TRAITEMENT-1 1 1 Exemple
WHEN TRUE ALSO FALSE PERFORM TRAITEMENT-2 1 0 S0 SECTION.
WHEN FALSE ALSO TRUE PERFORM TRAITEMENT-2 0 1 P0.
WHEN OTHER PERFORM TRAITEMENT-3 0 0 P1.
END-EVALUATE.
S1 SECTION.
Table de vérité XOR. P2.
P3.
Elle traduit l'action de "faire" un traitement 0, 1 ou plusieurs fois Les lignes (1) et (2) sont équivalentes ; il en est de même des lignes (4) et (5).
♦ Terminologie :
♦ Le format 3 permet de traduire un traitement itératif à répéter jusqu'à ce qu'une condition soit
- nt désigne un paragraphe ou une section satisfaite.
- nd doit référencer un entier non signé
Le cycle des opérations standard est le suivant : Format 4 : PERFORM nt1 THRU nt2 WITH TEST BEFORE
THROUGH AFTER
1) Evaluation de l'expression conditionnelle (sauf si TEST AFTER)
2) Si le résultat de l'expression conditionnelle est vrai nd-3
Arrêt des itérations sinon exécuter S1 reprendre au point 1) VARYING nd-2 FROM index-2
index-1 ent-1
Remarque:
BY nd-4 UNTIL condition-1
Si au départ J contient une valeur supérieure à 50, il n'y a pas d'exécution de S1. ent-2
nd-6
♦ Instructions PERFORM imbriquées : AFTER nd-5 FROM index-4
index-3 ent-3
Le bloc de traitement exécuté à partir d'un ordre PERFORM peut contenir des ordres PERFORM à …
condition que ceux-ci réfèrent des blocs de traitement totalement inclus ou disjoints du bloc d'origine.
BY nd-7 UNTIL condition-2
ent-4
Exemple : PERFORM P0 THRU P4
P1.
P2.
Jusqu’à 6 phrases AFTER
P3. PERFORM P1 THRU P2 2 TIMES (1)
Il inclut la gestion des indices ou des index jusqu'à 3 (7) niveaux d'imbrication.
P4. PERFORM P5 UNTIL NOM = SPACE
Exemple : Soit la procédure CUMUL-NOTE permettant de cumuler une note (appartenant à une table de
P5. dimension 2) à une variable de cumul partiel (SOMME). E et N sont deux indices indiquant
respectivement le rang de l'élève et le rang de la note.
MOVE 0 TO SOMME
Le bloc P1-P2 est inclus dans le bloc P0-24
PERFORM CUMUL-NOTES VARYING E FROM 1 BY 1
Le bloc P5 est disjoint du bloc P0-P4. UNTIL E > 25
Il est interdit de remplacer par exemple la ligne (1) par PERFORM P4 THRU P5 AFTER N FROM 1 BY 1
UNTIL N > 10.
CUMUL-NOTES.
ADD NOTE-ELEVE (E,N) TO SOMME.
4.12. EXIT
Format 1 : EXIT .
Cette instruction doit être la seule instruction de la seule phrase du paragraphe où elle est écrite.
ALL …
LEADING nd-4 BY nd-2
4.13. STOP FIRST lit-3 lit-1
b) Autres options : on remplace chaque sous-chaîne de valeur nd4 ou lit3 par la valeur précisée par nd2
Permet d'effectuer dans un programme une rupture de séquence inconditionnelle. L'usage de cette instruction ou lit1 ; la sous-chaîne de remplacement doit avoir la même longueur que la sous-chaîne d'origine.
doit être réservé exclusivement à la traduction de certaines structures algorithmiques bien précises. Il est possible de préciser plusieurs options de ce type permettant de procéder au remplacement des
occurrences de plusieurs sous-chaînes distinctes.
Format 1 : GO TO nt
Format 2 : GO TO nt1 [ nt2] ..., ntn DEPENDING ON nd Exemples INSPECT ZONE REPLACING CHARACTERS BY "*"
Tous les caractères de ZONE sont remplacés par des *
Le deuxième format (aiguillage) permet de traduire un choix entre n traitements en fonction de la valeur de INSPECT ZONE REPLACING ALL "ABC" BY "XXX"
nd; nd réfère une rubrique élémentaire à valeur entière comprise entre 1 et n ; si nd vaut k, il y a ALL "CDE" BY "YYY"
branchement au kième traitement de la liste ; si k # [1,n], l'instruction est sans effet. Valeur d'origine de ZONE : B C D E Z A B C D E A B C C D E
Valeur finale de ZONE : B Y Y Y Z X X X D E X X X Y Y Y
Les opérations sont traitées suivant l'ordre d'écriture ; ainsi la 2e occurrence de CDE n'est pas prise
en compte, la lettre C ayant déjà été traitée par le remplacement de la 1ère occurrence de ABC.
Les mots clés ALL, LEADING et FIRST permettent de sélectionner ou non certaines occurrences
de la sous-chaîne à remplacer :
♦ ALL : toutes les sous-chaînes ayant la valeur nd4 ou lit3 sont traitées
♦ LEADING : toutes les occurrences contiguës de la sous-chaîne de valeur nd4 ou lit3 sont traitées à
condition que la première se trouve au début de la zone à traiter.
♦ FIRST : seule la première sous-chaîne de valeur nd4 ou lit3 est traitée. 4.16.1. Concaténation
Délimitation de la zone à étudier : L'instruction STRING permet la juxtaposition des contenus partiels ou complets de 2 ou plusieurs rubriques
en une seule.
L'option AFTER/BEFORE, valable pour les deux algorithmes de remplacement, permet de faire
débuter (respect. d'arrêter) le traitement à la rencontre de la première occurrence de la valeur spécifiée par STRING émetteur-1 ... DELIMITED BY délimiteur-1
nd3 ou lit2 (obligatoirement de longueur 1 caractère pour l'algorithme (a)). SIZE …
♦ La clause DELIMITED est obligatoire ; les délimiteurs (1 ou plusieurs caractères) suivent les règles
Avec TALLYING, nd-2 doit référencer une rubrique numérique, précédemment initialisée. Cette rubrique est
de syntaxe des émetteurs ; un délimiteur n'est PAS TRANSMIS dans la zone de réception. Si SIZE
incrémentée de un pour chaque occurence de sous-chaîne (ou chaque caractère) suivant des modalités
est spécifié, le contenu complet de l'émetteur (ou des émetteurs) précédant DELIMITED est
analogues à celles de REPLACING.
transféré dans le récepteur.
Format 3
♦ Le pointeur est une rubrique entière de longueur suffisante pour contenir la taille + 1 du récepteur; il
contient à chaque instant le rang du prochain caractère à recevoir ; s'il est spécifié, il doit être
Résulte de la juxtaposition du format 2 (TALLYING) suivi du format 1 (REPLACING).
initialisé à une valeur supérieure ou égale à 1(défaut = 1).
Exemple : INSPECT RUB TALLYING COMPTEUR FOR ALL "L" REPLACING
Aucun des caractères du récepteur, non concernés par le transfert (en début ou en fin de zone) n'est
LEADING "A" BY "E" AFTER INITIAL "L".
modifié par l'instruction.
♦ La locution OVERFLOW sera validée si au cours des transferts, le nombre de caractères émis excède
Format 4
la longueur du récepteur (à défaut, le pg se poursuit en séquence).
Il permet de remplacer, dans nd1, chaque caractère de nd2 par le caractère de même rang de nd3
(équivaut à une série de INSPECT REPLACING pour chaque caractère).
Remarque : On peut considérer que les transferts se font caractère par caractère, en commençant, pour
INSPECT nd-1 CONVERTING chaque émetteur pris en séquence, par le caractère le plus à gauche et jusqu'à atteindre :
- soit la fin de l'émetteur,
- soit le(s) caractère(s) du délimiteur associé (jamais transmis).
nd-2 TO nd-3
lit-1 lit-2
Exemples : STRING JJ "/" MM "/" AA DELIMITED BY SIZE INTO DATE-COM.
STRING NOM DELIMITED BY " " SPACE DELIMITED SIZE PRENOM
BEFORE INITIAL nd-4 DELIMITED SPACE INTO IDENTITE.
AFTER lit-3 …
Exemple :
77 ZON PIC X(10) VALUE "ABCAEFACA".
INSPECT ZON CONVERTING "ABC" TO "XYZ" BEFORE "F".
ZON contiendra "XYZXEFACA"
L'instruction UNSTRING provoque la séparation de données contigües d'une rubrique émettrice et leur
transfert dans des rubriques réceptrices multiples. ♦ Après chaque extraction d'une sous-chaîne de l'émetteur, l'analyse reprend au caractère suivant
le délimiteur.
UNSTRING émetteur [DELIMITED BY [ALL] délimiteur-1 ♦ L'analyse se poursuit jusqu'à la fin de l'émetteur ou épuisement de récepteurs.
[OR [ALL] délimiteur-2] ...]
INTO {récepteur-1 [DELIMITER IN délimiteur-3] [COUNT IN compteur-1]} ♦ A la fin de l'opération, le pointeur est égal à sa valeur initiale plus le nombre de caractères
[WITH POINTER pointeur] [TALLYING IN compteur-3] examinés dans l'émetteur.
[ON OVERFLOW phrase-impérative 1]
[NOT ON OVERFLOW phrase-impérative 2]
[END-UNSTRING]
La locution ON OVERFLOW sera validée :
♦ L'émetteur et les délimiteurs doivent être des rubriques alphanumériques ; les délimiteurs peuvent àtre ♦ si le pointeur est initialisé à une valeur inférieure à 1 ou supérieure à la taille de l'émetteur
des littéraux non numériques.
♦ si toutes les zones de réception ont été utilisées et il reste des caractères à examiner dans
♦ Les récepteurs peuvent être alphabétiques, alphanumériques ou numériques (d'usage DISPLAY). l'émetteur.
Règles d'application ♦ Si un délimiteur ou un récepteur est indicé ou indexé, l'indice ou l'index est évalué
immédiatement avant le transfert de donnée dans la rubrique correspondante.
♦ délimiteur-3 et -4 sont les rubriques de réception des délimiteurs, et accueillent ces derniers
selon les règles de transfert non-numérique. Si la condition de délimitation est la fin de Exemples : UNSTRING DATE-COM DELIMITED BY "/" INTO JJ MM AA
l'émetteur (i.e. délimiteur non rencontré) ces rubriques sont à blanc.
UNSTRING IDENTITE DELIMITED BY SPACE INTO NOM
♦ Chaque compteur contient le nombre de caractères transmis dans le récepteur associé, délimiteur COUNT IN CN PRENOM COUNT IN CP POINTER CT
exclu.
♦ Le compteur-3 enregistre le nombre de rubriques de réception mises en jeu par l'opération En ANS85, cette instruction permet d’initialiser, certains types de données.
(initialisation à charge du programmeur).
INITIALIZE { nd-1} …
♦ Lorsque ALL est spécifié, plusieurs apparitions contigües du délimiteur associé sont traitées
comme une seule occurrence ; sinon, deux apparitions contigües entraînent une mise à blanc ou
à zéro du récepteur associé, selon sa définition. ALPHABETIC
ALPHANUMERIC
REPLACING NUMERIC DATA BY nd-2 …
♦ Lorsqu'un délimiteur contient plusieurs caractères, ils doivent être présents en totalité, et dans
ALPHANUMERIC-EDITED lit-1
l'ordre, dans l'émetteur pour être reconnus comme délimiteur. NUMERIC-EDITED
♦ Si plusieurs délimiteurs sont spécifiés dans la locution DELIMITED BY, reliés par OR,
l'émetteur est analysé pour chacun d'eux dans l'ordre donné, jusqu'à correspondance.
♦ nd-1 est le récepteur, à initialiser ; nd-2 ou lit-1 sont les émetteurs servant à l’initialisation.
♦ Si REPLACING est spécifié, l'instruction opère comme un ensemble de MOVE entre l'émetteur et le(s)
récepteur(s), au niveau élémentaire s'il s'agit de groupes. L'opération n'est effectuée que pour les
données correspondant au type cité. Un type ne peut apparaître qu'une seule fois dans un INITIALIZE.
Exemple 01 COMPTE.
02 NUM PIC 9(5).
02 LIBEL PIC X(20).
02 SOLDE PIC S9(6)V99 PACKED-DECIMAL.
…
INITIALIZE COMPTE.
Cobol Le Noyau 3 - 35
Une expression d'indices ou d'index est de la forme :
LE TRAITEMENT DES TABLES
entier-1
nd-1 ( nd-2 [{±}entier-2] …)
index-1 [{±}entier-3]
1 Principes Exemples :
A (3)
B (I, 5)
B (I, J) ou I, J est du type entier
Une table (ou tableau) est une collection ordonnée d'objets du même type ; tout objet de la table peut être
B (IND + 1, 5) IND est du type index
sélectionné indépendamment des autres en citant ses "coordonnées".
Remarques :
Exemple : Table des intitulés des jours de la semaine LUNDI MARDI MERCREDI JEUDI VENDREDI
SAMEDI DIMANCHE. L'intitulé du 3e jour est MERCREDI.
1) Les virgules séparant les expressions d'indices ou d'index sont facultatives et peuvent être remplacées
par des espaces.
Une table est de dimension n, n > 0 ; l'exemple précédent montre une table de 7 chaînes de caractères et
2) Un objet d'une table étant nécessairement à occurrences multiples, il est indispensable de préciser
de dimension 1.
l’occurrence de l'objet sur laquelle porte le traitement ; cette sélection doit être répétée pour chaque
instruction faisant référence à cet objet.
♦ Le langage COBOL comporte des clauses permettant de décrire des tables de dimension ≤3 (7) ; les
objets d'une table peuvent être de type élémentaire ou structuré.
Exemple : Tarif des consommations ; c'est une table de dimension 1, composée d'objets du type 2 Définition d'une table - OCCURS
"consommation" défini par :
. nom-consommation (chaîne de 15 caractères)
. prix-consommation (réel) Format 1 : OCCURS ent-2 TIMES
♦ Le langage COBOL inclut les manipulation de tables, c'est-à-dire qu'il permet de sélectionner des ASCENDING KEY IS nd2 [nd3] ...
objets appartenant à des tables. Deux techniques peuvent être utilisées : DESCENDING
• L'indiçage : consiste à préciser dans l'ordre les valeurs des différents sélecteurs sous forme [INDEXED BY index1 [index2] ... ] ...
d'indices; les indices étant du type entier, leurs valeurs peuvent être calculées à l'aide des
instructions arithmétiques classiques.
Format 2 : OCCURS ent-1 TO ent-2 TIMES DEPENDING ON nd1
• L'indexation consiste à préciser dans l'ordre les valeurs des différents sélecteurs sous forme de
pointeurs appelés index ; la valeur d'un index correspond en fait à une forme d'adressage de la ASCENDING KEY IS nd2 [nd3] ...
mémoire centrale ; elle ne peut donc être calculée par les instructions arithmétiques classiques et DESCENDING
nécessite l'emploi d'instructions spécifiques. Par ailleurs, un index est rattaché à un sélecteur
d'une table et ne peut être utilisé à d'autres fins. [INDEXED BY index1 [index2] ... ] ...
On peut cependant définir une variable index en DATA DIVISION, par la clause :
♦ ent-1 et ent-2 sont des entiers désignant respectivement le nombre minimum et le nombre maximum
[USAGE IS] INDEX d'objets dans la table (ent-1<ent-2)
Toute autre clause est interdite. ♦ nd1 doit décrire un entier positif ; elle contient le nombre exact d'occurrences de l'objet dans la table
courante (nd1 Ú 1) et sera placée dans la partie fixe de l'article ou hors de celui-ci.
Ex. : 77 IND1 USAGE INDEX.
♦ nd2, nd3, ... doivent être des rubriques subordonnées à celle contenant OCCURS ; cependant, nd2
Ceci peut être utile pour sauvegarder des valeurs index. peut désigner cette rubrique (si elle est seule) ; aucune des rubriques citées ne peut contenir
OCCURS
La sélection d'un objet d'une table s'exprime par : nom de l'objet (liste d'expressions d'indices ou d'index).
Le nombre d'expressions d'indice ou d'index correspond à la dimension de la table.
♦ nd1 ne peut pas être subordonnée à la rubrique sujet de OCCURS Il est par contre interdit de redéfinir une rubrique dont la structure comporte une table.
♦ La locution DEPENDING, autorisant la gestion de tables de longueur variable (i.e. ayant un nombre
variable d'éléments) permet d'optimiser l'occupation des supports externes, et de limiter les Exemples :
recherches en table quand celle-ci n'est pas totalement remplie dans tous les articles.
1) 01 A.
Exemple : 02 TABLE1.
01 ABONNE. 03 ELEMENT PIC X OCCURS 10.
05 NOM PIC X(20). 02 B REDEFINES TABLE1 PIC X(10).
05 NB-OUV PIC 99. est interdit
05 OUVRAGE OCCURS 1 TO 20 DEPENDING ON NB-OUV.
10 CODOUV PIC 9(5).
10 DATEMP PIC 9(6). 2) 01 A.
02 B PIC X(10).
02 TABLE2 REDEFINES B.
03 ELEMENT PIC X OCCURS 10.
La locution ASCENDING (ou DESCENDING) KEY permet de préciser les rubriques de l'entrée servant de est autorisé
critères de classement dans le cas d'une table ordonnée. Elle est indispensable pour une recherche
dichotomique (SEARCH ALL). L'ordre de classement est déterminé selon les règles de comparaison
classique ; les critères sont à citer dans l'ordre d'importance décroissante (i.e. majeur en tête) 3) 01 A.
02 ELEMENT OCCURS 10.
03 A1 PIC XX.
03 A2 REDEFINES A1.
Exemple :
04 E1 PIC 9.
04 E2 PIC 9.
Table des élèves d'une classe, chaque élève ayant 10 résultats sous forme (note, coefficient) est autorisé
01 TABLE-ELEVES.
02 ELEVE OCCURS 25.
03 NOM-ELEVE PIC X(20).
03 RESULTAT-ELEVE OCCURS 10.
04 NOTE-ELEVE PIC 99V9. 3. SET
04 COEFF-ELEVE PIC 9.
Ainsi :
ELEVE (3) réfère l'ensemble des informations concernant le 3ème élève. Format 2 : SET index-4 [index-5]... UP BY nd-4
NOM-ELEVE (3) désigne le nom du 3ème élève. DOWN BY ent-2
RESULTAT-ELEVE (3, 6) désigne le 6ème résultat du 3ème élève
COEFF-ELEVE (3, 6) désigne le coefficient du 6ème résultat du 3ème élève.
♦ L'instruction SET...UP BY sert à incrémenter un ou plusieurs index d'un déplacement correspondant ♦ Si VARYING n'est pas spécifié, l'index utilisé par défaut est le premier cité dans la locution
à n occurences, n étant exprimé par nd-4 ou ent-2. INDEXED BY de la définition de l'élément (idem s'il s'agit d'une rubrique après VARYING) ; les
autres ne sont pas touchés.
Exemple: SET IND UP BY 2
L'instruction SET...DOWN BY sert à décrémenter des index N.B. : L'élément cité dans SEARCH peut être subordonné à une rubrique contenant OCCURS (cas de table
à 2 ou 3 dimensions).
Exemple : SET IND DOWN BY 3
Exemple : SET IND1 TO 1
SEARCH ELEMENT WHEN RUB (IND1) = VALEUR PERFORM TRAIT
Remarques : WHEN RUB (IND1) = SPACE GO TO ERREUR
1) Le format 2 de l'instruction SET ne peut être utilisé pour incrémenter ou décrémenter des indices ; une
telle opération s'exprimerait par les instruction ADD ou SUBTRACT.
2) Dans les tests de relation, il est possible de faire référence à des index ; leurs valeurs sont 4.2. Recherche dichotomique
"remplacées" par des valeurs entières correspondant aux rangs des occurences sur lesquelles ils pointent ;
on est ainsi ramené à des comparaisons numériques. SEARCH ALL élément [AT END phrase-impérative]
♦ Lorsqu'un critère est utilisé, tous ceux le précédant dans la locution KEY doivent être également
[END-SEARCH] référencés.
♦ Le contenu de l'index sera indéterminé en cas de recherche infructueuse (critères non trouvés ou non
♦ L'élément de table cité après SEARCH ne doit être ni indicé ni indexé. discriminatoires).
.
.
05 RESID OCCURS 1000 ASCENDING DEPT COMU INDEXED BY IND IND1.
10 DEPT PIC 99.
10 COMU PIC 999.
10 RUE PIC X(30).
.
.
.
SEARCH ALL RESID WHEN DEPT (IND) = 67 AND COMU (IND) = 200
PERFORM STRBG-OUEST.
[ORGANIZATION IS SEQUENTIAL]
♦ séquentielle indexée (INDEXED)
[ACCESS MODE IS LINE SEQUENTIAL]
♦ relative (RELATIVE) RECORD
L'accès à un fichier organisé séquentiellement est nécessairement séquentiel. Les enregistrements sont PADDING CHARACTER IS nd-1
atteints dans l'ordre physique où ils sont rencontrés. lit-1
Pour les autres organisations de fichiers, l'accès pourra être : RECORD DELIMITER IS STANDARD-1
chaîne
♦ séquentiel, soit dans l'ordre logique des enregistrements (SEQUENTIAL)
[FILE STATUS IS nd-2].
♦ sélectif (ou aléatoire) selon une clé (RANDOM)
♦ mixte, c'est à dire séquentiel et aléatoire, à l'intérieur d'un même programme (DYNAMIC), sans
avoir à ré-ouvrir le fichier. Format 2 (pour fichiers d'organisation relative)
L'organisation d'un fichier est fixée lors de sa création ; le mode d'accès est précisé dans chaque SELECT [OPTIONAL] fich-2 ASSIGN TO fspec1 [fspec2] ...
programme manipulant le fichier en question.
RESERVE entier-1 AREA
AREAS
ORGANIZATION IS RELATIVE
2. Input-output section
SEQUENTIAL [ RELATIVE KEY IS nd-2]
ACCESS MODE IS RANDOM
DYNAMIC RELATIVE KEY IS nd-2
Cette section fait partie de l' ENVIRONMENT DIVISION et se compose :
♦ du paragraphe FILE-CONTROL comprenant une phrase SELECT par fichier utilisé ; cette
phrase permet de préciser en particulier les paramètres organisation et accès pour ce fichier et de [FILE STATUS IS nd-3].
faire le lien avec le SGF par l'intermédiaire d'un mnémonique.
♦ du paragraphe I-O-CONTROL (facultatif) permettant de préciser les zones d'entrée-sortie Format 3 (pour fichiers d'organisation séquentielle indexée)
(buffers) communes à plusieurs fichiers.
Cobol Gestion des Fichiers 5-1 Cobol Gestion des Fichiers 5-2
ORGANIZATION IS INDEXED
2.1.3. Exemple de FILE-CONTROL
SEQUENTIAL
ACCESS MODE IS RANDOM ENVIRONMENT DIVISION.
DYNAMIC *
*
RECORD KEY IS nd-4 CONFIGURATION SECTION.
SOURCE-COMPUTER.xxx.
[ALTERNATE RECORD KEY IS nd-5 [WITH DUPLICATES]]... OBJECT-COMPUTER.xxx.
*
[FILE STATUS IS nd-3]. *
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT ARTICLES-S ASSIGN TO ARTICLES-S-EX
ORGANIZATION IS SEQUENTIAL ACCESS MODE IS SEQUENTIAL.
♦ Par défaut, organisation et accès sont considérés comme séquentiels. SELECT ARTICLES-R ASSIGN TO ARTICLE-R-EX
ORGANIZATION IS RELATIVE
♦ A chaque phrase SELECT doit correspondre un paragraphe FD. ACCESS MODE IS RANDOM RELATIVE KEY IS RK.
SELECT MOUVEMENTS ASSIGN TO MVTS-EX
♦ Les spécifications de fichiers permettent l’assignation d’un nom externe au nom de fichier interne, et ORGANIZATION IS SEQUENTIAL MODE IS SEQUENTIAL.
sont spécifiques de l’implantation.
Ce programme manipule
♦ OPTIONAL indique que le fichier peut être absent ; dans ce cas, la condition de fin-de-fichier est
validée dès la première lecture. • un fichier ARTICLES-S, d'organisation séquentielle, sur disque, de numéro logique 1
♦ RESERVE spécifie, à titre documentaire, le nb de buffers d’E/S alloués au fichier. • un fichier ARTICLE-R, d'organisation relative, de numéro logique 2
♦ PADDING indique le caractère à utiliser pour compléter les blocs incomplets. • un fichier MOUVEMENTS, d'organisation séquentielle, de numéro logique 3
♦ Les autres clauses sont définies par la suite. [SAME [RECORD] AREA FOR fichier1 ,fichier 2 ...]...
Cobol Gestion des Fichiers 5-3 Cobol Gestion des Fichiers 5-4
3. Data Division 4. Procedure Division
Il faudra y inclure une FILE SECTION permettant de définir la structure de chaque fichier et celle des 4.1. Ouverture et fermeture d'un fichier
enregistrements correspondants.
Tout fichier manipulé dans un programme doit être ouvert auparavant et fermé en fin de traitement.
DATA DIVISION.
FILE SECTION. CLOSE fichier1 WITH NO REWIND ...
LOCK
♦ Un pointeur d'enregistrement courant est positionné pour désigner le premier enregistrement à traiter
DATA RECORD IS nd-1, [nd-2]... pour les fichiers en lecture (INPUT) ou en mise à jour (I-0). Ce premier enregistrement est
RECORDS ARE
déterminé en fonction de l'organisation du fichier (premier enregistrement physique pour les fichiers
séquentiels, enregistrement de clé donnée, valide, pour les autres organisations).
LABEL RECORD IS STANDARD
RECORDS ARE OMITTED ♦ L'ouverture en mode OUTPUT positionne le pointeur d'enregistrement courant sur l'espace
correspondant au premier enregistrement du fichier.
♦ Seule la clause LABEL peut être obligatoire et précise la présence (STANDARD) ou l'absence • éviter que le fichier ne reste à l'issue du programme dans un état indéfini qui pourrait
(OMITTED) d'étiquettes pour le fichier, selon l'organisation et le support retenus. Elle n'est empêcher de la rouvrir (fichier perdu)
significative que pour les fichiers sur bande.
• éviter la perte des derniers enregistrements écrits qui se trouveraient encore dans le buffer
d'entrée-sortie (buffer incomplet).
Cobol Gestion des Fichiers 5-5 Cobol Gestion des Fichiers 5-6
4.2. Opérations possibles sur les fichiers Après une lecture réussie, le pointeur d'enregistrement désigne le prochain enregistrement valide pour les
fichiers en accès séquentiel. Dans les autres cas, le pointeur est positionné sur l'enregistrement identifié
par la clé. La longueur des enregistrements du fichier réel doit être identique, à celle de la zone d'entrée
Mode d’Accès Instruction INPUT OUTPUT I-O EXTEND associée au fichier (cas d'un fichier avec des enregistrements de longeur fixe) ; elle doit être dans tous les
Séquentiel READ X X cas inférieure ou égale à celle de la zone d'entrée (cas d'un fichier avec des enregistrements de longueur
WRITE X X variable).
REWRITE X
Random READ X X
WRITE X X 4.2.2. WRITE
REWRITE X
START L'instruction provoque l'écriture d'un enregistrement dans un fichier ouvert en OUTPUT, I-O ou
DELETE X EXTEND. Elle sera utilisée sous la forme
Dynamic READ X X
WRITE X X Format 1(en accès séquentiel) WRITE enreg [FROM nd-1]
REWRITE X [END-WRITE]
START X X
DELETE X
Format 2 (en accès sélectif) WRITE enreg [FROM nd-1]
[INVALID KEY phrase impérative-1]
Format 1(accès séquentiel) READ fich [NEXT] RECORD [INTO nd-1] L'instruction WRITE délivre un enregistrement au système de gestion de fichier. Cet enregistrement n'est
[AT END phrase impérative1] alors plus disponible dans la zone de sortie associée au fichier (paragraphe FD de la DATA DIVISION),
à moins que l'exécution de l'instruction WRITE n'échoue (violation de limite de fichier ou clé invalide par
[NOT AT END phrase impérative2] exemple).
[END-READ]
Même remarque que pour la lecture : la longueur des enregistrements du fichier réel doit être compatible
avec la description du fichier dans programme COBOL.
Pour les fichiers d'organisation indexée, une écriture en accès séquentiel suppose que les enregistrements
Format 2 (accès sélectif) READ fich RECORD [INTO nd-1] [KEY IS nd] sont triés dans l'ordre croissant des clés.
[INVALID KEY phrase impérative-1]
4.2.3. Options READ... INTO... et WRITE ... FROM ...
[INVALID KEY phrase impérative-2]
[END-READ] Elles permettent de combiner en une seule instruction les instructions de lecture ou d'écriture classqiue et
les transferts entre le buffer d'entrée-sortie et une zone de travail (définie par exemple en WORKING-
STORAGE) et inversement.
L'option KEY permet d'indiquer la clé à utiliser pour la recherche, dans le cas d'emploi de clès alternées ;
elle sera aussi valable, en accès dynamique pour les lectures séquentielles consécutives, jusqu'à Ainsi :
établissement d'une nouvelle référence. (fichiers indexés seulement). READ fichier INTO donnée ...
équivaut à READ fichier ...
L'option NEXT est utilisée pour une lecture séquentielle en accès dynamique. MOVE enreg. TO donnée
L'instruction READ rend disponible l'enregistrement du fichier désigné par le pointeur. il est accessible • enreg. étant une description d'article au niveau FD du fichier correspondant
dans la zone d'entrée décrite en DATA DIVISION sous la rubrique FD.
• donnée est une zone quelconque de la DATA DIVISION.
Le fichier doit être ouvert en mode INPUT ou I-O. En cas de fin de fichier ou de clé invalide, la phrase
introduite par les clauses AT END ou INVALID KEY est exécutée. Dans le cas contraire, (lecture De même :
réussie) le programme se poursuit normalement en séquence.
WRITE enreg. FROM donnée ...
équivaut à MOVE donnée TO enreg.
Cobol Gestion des Fichiers 5-7 Cobol Gestion des Fichiers 5-8
WRITE enreg .... comparaison. En cas d'échec, la condition INVALID KEY est validée et la phrase impérative
correspondante est exécutée (le pointeur est alors dans une position indéfinie). nd-1 est le nom de clé
4.2.4. REWRITE donné en INPUT-OUTPUT SECTION (clause RELATIVE KEY ou RECORD KEY).
L'instruction permet la réécriture d'un enregistrement modifié dans un fichier ouvert en I-O. Exemple :
Format1 (accès séquentiel) REWRITE enreg [FROM nd-1] START FICH KEY IS > RKEY INVALID KEY.
Format 2 (accès sélectif) REWRITE enreg [FROM nd-1] [INVALID KEY ph-imp1] ou encore
L'enregistrement modifié est le dernier lu en accès séquentiel, celui pointé par la clé pour les autres cas.
Cet ordre n'est pas utilisable pour les fichiers sur bande.
4.2.5. DELETE
L'enregistrement supprimé est le dernier lu en accès séquentiel, celui pointé par la clé pour les autres cas.
4.2.6. START
IS EQUAL TO
IS =
START fichier KEY IS GREATER THAN nd-1
IS >
IS NOT LESS THAN
IS NOT <
Cette instruction ne concerne que les fichiers relatifs ou indexés, en accès séquentiel ou dynamique,
ouverts en mode INPUT ou I-O. Si KEY IS n'est pas spécifié, l'option par défaut est KEY IS EQUAL
TO nd-1.
Le système de gestion de fichiers compare les clés des enregistrements avec la valeur fournie par nd1 et
positionne le pointeur d'enregistrement courant sur le premier enregistrement valide dont la clé satisfait la
5.1. FILE STATUS Le traitement général d'une erreur d'E/S est donc le suivant :
S'il est utilisé, le FILE STATUS doit être 1. Le SGF renseigne le code-état associé au fichier (s'il a été défini dans le programme)
• défini dans l'INPUT-OUTPUT SECTION (phrase SELECT correspondant au fichier ; clause
FILE STATUS) 2. Si l'instruction d'E/S a provoqué une erreur standard (i.e. validant une locution AT END ou
INVALID KEY) :
• décrit dans la DATA DIVISION (PICTURE XX)
2.a) Si la locution est fournie, la phrase impérative correspondant est exécutée ; puis le
programme se poursuit en séquence .
• analysé selon la grille jointe
2.b) sinon, si une section déclarative existe pour ce fichier, elle est exécutée, puis le
5.2. Gestion des erreurs d'entrées / sortie programme se poursuit en séquence.
2.c) Si aucun des traitements en a) ou en b) n'est prévu, le programme sera soit interrompu,
Le traitement des erreurs d'E/S s'effectuera à l'aide d'un ou plusieurs outils suivants :
(soit poursuivi en séquence, suivant le système utilisé).
• analyse du code-état associé au fichier
• utilisation des locutions standards AT END et INVALID KEY 3. Si l'erreur d'E/S est NON-STANDARD :
• utilisation de sections de déclaratives le traitement est le même qu'en 2, à partir de 2.b)
Les déclaratives sont constituées d'un ensemble de sections, formant un bloc autonome.
Elles sont regroupées en début de PROCEDURE DIVISION. A chaque section est associée une phrase
USE, spécifiant le rôle (cas d'emploi) de la déclarative. L'ensemble des déclaratives est délimité par un
en-tête et un pied:
PROCEDURE DIVISION.
DECLARATIVES.
………
………
END DECLARATIVES.
Constituant une entité séparée de la PROCEDURE DIVISION, il ne peut y avoir (sauf cas particulier)
de référence à des blocs standards de celle-ci depuis une section de DECLARATIVES (et
réciproquement).
Une section de déclaratives traitant les erreurs d'E/S sera identifiée par une phrase USE au format suivant
:
I-O
INPUT
USE AFTER STANDARD ERROR PROCEDURE ON OUTPUT
EXCEPTION EXTEND
8.2.2. LECTURE
♦ READ Format 1
♦ Elle délivre l'enregistrement de clé immédiatement supérieure à celui qui vient d'être traité, le fichier
étant ouvert en mode INPUT ou I-O.
8.2.3. SUPPRESSION
♦ L'accès dynamique permettra ainsi, par exemple, de lire séquentiellement un fichier à partir d'un
8.3.1. ECRITURE enregistrement correspondant à une certaine clé. Pour réaliser ce positionnement on utilise
l'instruction START décrite au paragraphe 4.2.6.
♦ Format 2
♦ Le fichier étant ouvert en mode I-O ou OUTPUT, l'enregistrement est inséré logiquement dans le 8.4.2. POSITIONNEMENT (START)
fichier en tenant compte de l'ordre croissant des clés. Si un enregistrement valide de même clé existe
déjà, la clause INVALID KEY est validée. ♦ Le système compare la valeur figurant dans nd-1 avec les valeurs correspondantes dans les
enregistrements du fichier et sélectionne le premier enregistrement satisfaisant à cette comparaison.
Pour être accessible celui-ci devra faire l'objet d'une lecture.
8.3.2. LECTURE
♦ nd-1 peut être la rubrique introduite par la clause RECORD KEY ou toute rubrique incluse dans cette
♦ Format 2 dernière, partant de sa 1ère position gauche.
♦ L'enregistrement dont la clé correspond à la valeur courante de la rubrique clé d'enregistrement est ♦ Si la clause KEY est omise, la comparaison porte sur la clé d'enregistrement complète et l'égalité
délivré dans la zone d'entrée associée au fichier. Si cet enregistrement n'existe pas, la clause des valeurs est recherchée.
INVALID KEY est valide. Le fichier est ouvert en mode I-O ou INPUT.
♦ Le fichier est ouvert en INPUT ou I-O et l'accès est séquentiel ou dynamique.
8.3.3. SUPPRESSION Exemple : MOVE CLE-LUE TO CLE-HISTO.
START HISTO KEY NOT < CLE-HISTO INVALID KEY.
Elle provoque la suppression logique dans le fichier de l'enregistrement identifié par la clé. La clause ….
INVALID KEY est validée si l'enregistrement n'existe pas. Le fichier est ouvert en mode I-O. READ HISTO NEXT.
de la phrase SELECT, où nd-5 désigne la clé secondaire. La description de la donnée CLE1 se fait dans la DATA DIVISION, il s'agit d'un entier non signé. Par
exemple :
♦ La locution DUPLICATES sera spécifiée si la valeur de l'indicatif supplémentaire peut ne pas être
unique dans le fichier (synonymes). * RELATIVE KEY DE FIART :
77 CLE1 PIC 99 value 1.
♦ On peut spécifier plusieurs clauses ALTERNATES (i.e. plusieurs clés secondaires), chaque clé étant
décrite dans l'article du fichier. Remarque :
Cette rubrique n'a pas le droit d'appartenir à une description d'article du fichier concerné.
Toutefois, rien ne s'oppose à ce que la donnée correspondante à la valeur de la clé soit incorporée dans
8.5.2. Utilisation d'une clé secondaire l'enregistrement par copie dans une rubrique portant un nom différent. On prendra garde cependant à
conserver la concordance des valeurs lors des mises à jour d'enregistrements. La clé relative d'un
Une clé alternée ne peut être spécifiée que dans les instructions de lecture sélective (READ) et de enregistrement ne peut bien sur être modifiée lors d'une mise à jour.
positionnement (START).
9.2. Les différents accès à un fichier relatif
8.5.2.1. Lecture sélective
Les fichiers d'organisation relative autorisent comme les fichiers indexés les trois accès :
READ fichier RECORD [INTO nd-1] [KEY IS clé] [INVALID KEY ph.imp] • séquentiel (SEQUENTIAL)
• sélectif (RANDOM)
Clé désignant la clé de référence pour la lecture (par défaut, c'est la clé primaire). Si le mode d'accès est • dynamique (DYNAMIC)
dynamique, la clé spécifiée servira aussi de référence pour les lectures séquentielles ultérieures jusqu'à
établissement d'une nouvelle clé de référence. L'utilisation des différentes instructions d'entrée et de sortie est rigoureusement semblable à celle décrite
dans le module indexé, auquel le lecteur se référera. Il suffit d'y remplacer la notion de clé
d'enregistrement par celle de clé relative. Il en est de même pour l'instruction START qui portera sur la
8.5.2.2. Positionnement clé relative.
La rubrique nd-1 dans la locution KEY de l'instruction START peut désigner une clé secondaire (ou une La gestion de cette clé pour les lectures et les écritures non séquentielles relève du programmeur qui
partie gauche de celle-ci). Elle devient alors clé de référence pour toutes les lectures séquentielles choisira une méthode de calcul de la clé adaptée au contexte de travail (voir les modes d'adressage relatif
ultérieures. des fichiers).
On notera qu'après une lecture séquentielle réussie, le système de gestion des fichiers met à jour la
rubrique, si la locution (facultative en séquentiel) RELATIVE KEY est spécifiée, en y chargeant la
valeur correspondant à l'enregistrement qui vient d'être lu. Il en est de même pour l'écriture
d'enregistrements en accès séquentiel. On peut ainsi constituer une table des clés relatives des différents
articles écrits au fur et à mesure de la création du fichier.
9. Le Module Relatif
LES FORMATS EDITES Ce sont la virgule (,), l'espace (B), le zéro (0) et le slash (/).
Chaque symbole provoque la génération du caractère correspondant à condition de ne pas figurer dans
1.Principe de l'édition une partie de suppression de zéros non significatifs (cf. § 3 de ce chapitre).
2. Les symboles d'insertion • Les symboles CR et DB, exclusifs des symboles + et -, se placent en dernière position du format ;
ils provoquent la génération des chaînes respectives "CR" et "DB" si la valeur est négative ; sinon
ils sont remplacés par deux espaces.
Exemple :
2.1. Le point décimal
E6 PIC 99DB
Le point . remplace le symbole V ; il assure l'alignement sur la marque décimale mais en plus génère
un caractère ".". MOVE +31 TO E6 donne 31bb
MOVE -31 TO E6 donne 31DB
Exemple : E1 PIC 99.99 décrit une rubrique de 5 caractères
• La chaîne des symboles "flottants" ne peut être précédée que de symboles d'insertion simple ou 3.1. Remplacement par des espaces
fixe et éventuellement du point décimal ; elle ne peut être entrecoupée que par des symboles
d'insertion simple ou par le point décimal ; dans ce dernier cas, la partie fractionnaire de la valeur Il s'agit du symbole Z ; il représente un chiffre.
doit être décrite en totalité par le màme symbole "flottant".
Exemple 1 :
• Une occurrence d'un de ces symboles représente un chiffre ; les zéros qui figureraient à gauche
sont remplacés par des espaces sauf celui qui précède le premier chiffre non nul : celui-ci sera E10 PIC Z(5) décrit une rubrique de 5 caractères
remplacé par $ ou + ou - (règles identiques à celle de l'insertion fixe). MOVE 500 TO E10 donne bb500
Exemple 1 : Exemple 2 :
E7 PIC $$$99 décrit une rubrique de 5 caractères
E11 PIC Z(5).ZZ décrit une rubrique de 8 caractères
MOVE 500 TO E7 donne b$500 MOVE 500 TO E11 donne bb500.00
MOVE 1000 TO E7 donne $1000 MOVE 0.05 TO E11 donne bbbbb.05
MOVE 1 TO E7 donne bb$01 MOVE 0 TO E11 donne 8 espaces
Dans le dernier cas, l'édition des chiffres est "forcée" à la rencontre du premier symbole 9, d'où le Exemple 3 :
zéro.
E12 PIC ZZ,ZZZ décrit une rubrique de 6 caractères
Exemple 2 :
MOVE 1000 TO E12 donne b1,000
E8 PIC $(4).$$ décrit une rubrique de 7 caractères MOVE 20 TO E12 donne bbbb20
MOVE 50.1 TO E8 donne b$50.10 MOVE 0 TO E12 donne 6 espaces
MOVE 0.01 TO E8 donne bbb$.01
Dans le dernier cas, l'édition est forcée par le point décimal et par le fait que la partie fractionnaire est 3.2. Remplacement par des astérisques
non nulle ; le chiffre 0 édité a un sens et ne peut être supprimé.
MOVE 0 TO E8 donne 7 espaces Il s'agit du symbole * ; son utilisation est identique à celle du symbole Z.
• les symboles Z et * et d'insertion s'excluent. Elles se font dans le paragraphe SPECIAL-NAMES de l'ENVIRONMENT DIVISION.
• on ne peut faire qu'une seule spécification du signe (par + ou - en insertion fixe à gauche
ou à droite, par CR ou DB, par + ou - en insertion flottante). 7.1. Changement de symbole monétaire
♦ insertion fixe et insertion flottante du symbole monétaire s'excluent. CURRENCY SIGN IS lit
♦ Le panachage à l’intérieur d’un même format des symboles d’édition et du symbole 9 est possible, lit est un littéral non numérique d'un caractère, différent des chiffres, des caractères spéciaux, de
à condition de respecter les deux règles suivantes : l'espace et des lettres A, B, C, D, P, R, S, V, X, Z.
1) Les symboles d’édition doivent figurer en début de format, les symboles 9 en fin de format. CURRENCY IS "F" oblige le programmeur à remplacer toutes les occurrences du caractère $ dans
2) La partie fractionnaire de la valeur éditée doit être décrite en totalité à l’aide du même symbole. les formats numériques édités par la lettre F.
Une rubrique numérique éditée peut être décrite à l'aide de tous les symboles étudiés. DECIMAL-POINT IS COMMA
Il faut toutefois se souvenir que la valeur qu'elle contient est assimiliée à une chaîne de caractères ; ce Dans les formats édités et les littéraux numériques, le point devient un symbole d'insertion simple et
fait a une incidence sur l'utilisation des instructions arithmétiques, de l'instruction MOVE et de la c'est la virgule qui assure l'alignement sur la marque décimale.
clause VALUE
Exemple 1 : Exemple : E18 PIC Z.ZZZ.ZZ9,99
E15 PIC *(4)9.99 VALUE "**21.50". MOVE 1500000 TO E15 donne 1.500.000,00
L'utilisation conjointe de la clause BLANK est possible à condition que le format ne contienne pas de
symbole *.
Une rubrique alphanumérique éditée ne peut être décrite que par les symboles A, X, 9 et les symboles
d'insertion simple B, 0, /
♦ dès que l'on atteint la zone FOOTING (i.e. dès que la valeur de LINAGE-COUNTER est
8.1. Définition de la page logique supérieure ou égale à entier-2)
♦ ou si l'instruction fait déborder de la page (i.e. dès que LINAGE-COUNTER est supérieur à entier-
Il est possible de définir une PAGE LOGIQUE en termes de nombres de lignes. Une page logique 1).
comprend 3 zones :
Exemple :
• une marge supérieure de page (TOP) FD IMPRIM LABEL RECORD STANDARD
LINAGE 50 TOP 6 BOTTOM 10.
• un corps de page (LINAGE) 01 LIGNE.
• une marge inférieur de page (BOTTOM) -
-
-
♦ On appelle pied de page (FOOTING) un certain nombre de lignes défini en fin de corps. La -
définition de page se fera dans la phrase FD associée au fichier d'édition par les clauses: WRITE LIGNE AT EOP PERFORM FIN-PAGE.
-
-
LINAGE IS entier-1 LINES WITH FOOTING AT entier-2 FIN-PAGE. PERFORM SOUS-TOTAL ...
nd-1 nd-2 WRITE LIGNE FROM EN-TETE AFTER PAGE.
8.2. Utilisation
Les locutions TOP et BOTTOM définissent les espacements (éventuellement variables) entre 2 pages
consécutives.Les valeurs associées à LINAGE et FOOTING permettent de détecter respectivement le
débordement de page et la fin de page et sont utilisées en relation avec la locution END-OF-PAGE
d'une instruction WRITE :
EMETTEUR RECEPTEUR
CONTENU IMAGE IMAGE CONTENU
♦ Un programme principal (ou programme appelant) écrit en COBOL peut appeler un (ou
plusieurs) sous-programme(s) (ou programme(s) appelé(s) rédigés en COBOL ou dans un autre [ON OVERFLOW ph-impér1]
langage, et compilés séparément. Après édition de liens, l'ensemble constituera une seule unité
d'exécution. [ON EXCEPTION ph-impér-1]
[NOT ON EXCEPTION ph-impér-1]
♦ Le contrôle est passé au sous-programme et, après son exécution, le traitement du programme
principal reprend à l'instruction qui suit l'appel du sous-programme. [END-CALL]
♦ Dans la norme ANS74, Les données traitées ou paramètres sont communes aux deux programmes;
programme principal et sous-programme se transmettent, suivant un protocole fixé, les adresses
des paramètres (passage par adresses ou références) ; il n'y a donc PAS de duplication des ♦ lit-1 est le nom de programme appelé
valeurs.
♦ nd-1 est une donnée alphanumérique susceptible de contenir le nom du programme appelé.
La norme ANS85, permet au contraire le choix, lors de l'appel du sous-programme, entre le
passage par par valeurs (CONTENT) et par adresses (REFERENCE). ♦ nd-2 ... sont les paramètres dits d'appels, décrits dans la DATA DIVISION du programme
principal et de niveau 01 ou 77, (ou autre). Les index et les structures de fichier (FD) ne doivent
♦ Dans le sous-programme, les paramètres doivent être décrits en LINKAGE SECTION ; dans le pas être utilisés en paramètres.
programme principal, les trois sections de la DATA DIVISION conviennent. Toutefois, en
ANS74, que ce soit dans le programme principal ou dans le sous-programme, les descriptions des ♦ Option par défaut de passage des paramètres : BY REFERENCE
paramètres doivent être obligatoirement de niveau 01 ou 77. ANS85 lève cette restriction en
autorisant en paramètres des données élémentaires ou de groupe, de niveau quelconque. ♦ Un mode de passage (CONTENT ou REFERENCE) est transitif sur tous les paramètres le suivant.
Un sous-programme est un programme (COBOL) classique dont il diffère éventuellement sur trois ♦ Le sous-programme est initialisé lors du premier appel et conserve son état lors des appels
points : ultérieurs, sauf s'il est doté de l'attribut INITIAL, ou si CANCEL a été exécuté dans le programme
principal.
♦ Il comprend une LINKAGE SECTION pour la description des paramètres dits formels.
♦ Les clauses OVERFLOW et EXCEPTION sont validées si le programme appelé ne peut être chargé
♦ La déclaration de la division des traitements est complétée d'une clause USING fixant l'ordre des (ou ne réside pas) en mémoire, ou si la place disponible pour l'y charger est insuffisante.
paramètres.
Remarque : S'il n'y a aucun paramètre, LINKAGE SECTION et clause USING sont omises.
♦ L'instruction EXIT PROGRAM (ou GOBACK) doit être utilisée pour redonner le contrôle au
programme principal.
Remarque : L'exécution d'une instruction STOP RUN à l'intérieur d'un sous- programme provoque
l'arrêt immédiat et définitif du travail en cours (y compris le programme principal).
4.1. CANCEL MOY est un sous-programme permettant de calculer la moyenne de deux nombres.
♦ Si le programme n'est pas un programme appelé, l'instruction est sans effet. Soit un programme principal comportant en DATA DIVISION les
descriptions suivantes :
♦ Dans les dialectes GOBACK a un fonctionnement similaire.
77 N1 PIC 9(4)V99 COMP.
01 COUPLE1.
04 NB1 COMP-1.
04 NB2 PIC 9(4).
5. Objets externes partagés 01 COUPLE2.
02 A1 COMP-1.
♦ Tout objet défini dans un programme COBOL lui est interne, et les ressources qu'il nécessite sont 02 A2 PIC 9(4).
associées au seul programme.
On peut écrire en division des traitements :
♦ Un objet sera dit externe si ses ressources sont attachées non à un objet (programme) particulier, '
mais à l'unité d'exécution résultante. Pour cela, il faut le doter de l'attribut EXTERNE. '
CALL "MOY" USING COUPLE2 N1
♦ Une clause EXTERNAL peut être associé à une spécification de fichier dans un programme, ou à '
un groupe de niveau 01 en WORKING-STORAGE SECTION. Tous les éléments subordonnés '
(zones de données) sont automatiquement externalisés. CALL "MOY" USING COUPLE1 N1
Dans ce cas, si un programme appelé contient des structures de mêmes caractéristiques (noms,
formats), l'article chargé dans le programme principal lui sera accessible.
♦ La clause VALUE est interdite pour des objets externalisés (sauf nom-condition).
L'ensemble de ces programmes est compilé en même temps et ne donne création qu'à un seul
programme-objet.
A ne pas confondre avec la notion classique de sous-programmes (programmes appelant et appelé
étant des unités de compilations différentes, liées en une seule unité d'exécution).
IDENTIFICATION DIVISION.
PROGRAM-ID. A.
.............
IDENTIFICATION DIVISION.
PROGRAM-ID. B.
END-PROGRAM B.
IDENTIFICATION DIVISION.
PROGRAM-ID. C.
.............
IDENTIFICATION DIVISION.
PROGRAM-ID. D.
.............
END-PROGRAM D.
END-PROGRAM C.
END-PROGRAM A.
C contient directement D.
♦ Les programmes contenus peuvent faire référence à des ressources des programmes contenants.
Pour cela, il faut déclarer, dans le programme contenant, la clause GLOBAL pour des groupes de
niveau 01 en FILE SECTION ou WORKING-STORAGE SECTION, ou des phrases FD.
Tout programme contenu, directement ou indirectement dans un tel programme-contenant pourra
référencer la donnée sans la décrire à nouveau.
♦ Tous les éléments subordonnés à une structure globale sont globalisés.
♦ Normalement un programme contenu ne peut être appelé que par celui le contenant directement.
La clause COMMON, dans son PROGRAM-ID permettra qu'il le soit également par des programmes de
la même unité, autres que celui le contenant.
Ce module offre la possibilité, pendant la phase de compilation, d'insérer dans un programme COBOL
n'importe quel texte source enregistré dans une bibliothèque du système.
= = pseudo-text-1= = = = pseudo-text-2= =
nd-1 nd-2
REPLACING lit-1 BY lit-2 ....
mot-1 mot-2
♦ les remplacements portent sur toutes les occurrences des éléments cités
♦ le texte est remplacé jusqu'à rencontre de la prochaine instruction REPLACE (avec une nouvelle
spécification ou OFF) ou, par défaut, de la fin du programme.
• Une fonction est un élément temporaire dont la valeur est déterminée au moment de son exécution. Fonction Arguments Type Valeurs
Elle est spécifiée par un nom réservé. ACOS N1 N Arcosinus de N1
ASIN N1 N Arcsinus de N1
• La valeur retournée par une fonction détermine le type de celle-ci: alphanumérique, numérique, ou ATAN N1 N Arctangente de N1
entière. COS N1 N Cosinus de N1
SIN N1 N Sinus de N1
• Les fonctions relatives aux dates reposent sur le calendrier grégorien. Par convention, l'origine des TAN N1 N Tangente de N1
temps est fixée au Lundi, 1er janvier 1601, correspondant à l'entier 1. FACTORIAL I1 I Factorielle de I1
LOG N1 N Logarithme népérien de N1
• Une fonction peut nécessiter zéro, un ou plusieurs arguments positionnels, dont les types peuvent LOG10 N1 N Logarithme décimal de N1
être: MAX N1 … N Valeur maximale des arguments
1. Numérique: toute expression arithmétique MIN N1 … N Valeur minimale des arguments
2. Alphabétique: rubrique élémentaire ou littéral alphabétique MEAN N1 … N Moyenne arithmétique des arguments
3. Alphanumérique: toute rubrique ou tout littéral non-numérique MEDIAN N1 … N Valeur médiane des arguments (après) tri
4. Entier: une expression arithmétique dont l'évaluation aboutit à un entier (signé ou pas). MIDRANGE N1 … N Moyenne des arguments minimal et maximal
INTEGER N1 N Plus grand entier inférieur ou égal à N1
• Si une fonction accepte qu'un argument soit répété un nombre variable de fois, on peut spécifier
INTEGER-PART N1 N Partie entière de N1
une table avec ALL en indice; dans ce cas, les entrées de la table correspondant à l'échelle des
MOD I1, I2 I I1 modulo I2
valeurs de l'indice correspondant seront sélectionnées.
RANDOM I1 N Nombre pseudo-aléatoire (entre 0 et 1)
01 EXEMPLE. RANGE N1 … N Différence entre les arguments maximal et minimal
05 TOTAL PIC 999. REM N1,N2 N Reste de N1/N2 (quotient arrondi à l'entier)
05 VECTEUR. SQRT N1 N Racine carrée de N1
10 IND OCCURS 5 PIC 99. STANDARD-DEVIATION N1 N Ecart-type des arguments
SUM N1 … N Somme des arguments
VARIANCE N1 N Variance des arguments
COMPUTE TOTAL = FUNCTION SUM (IND(1), IND(2), IND(3), IND(4), IND(5))
Est équivalent à :
COMPUTE TOTAL = FUNCTION SUM (IND(ALL))
2.2 Fonctions financières
(1)
La fonction CURRENT-DATE renvoie une valeur de 21 caractères:
année 9999
mois 99
jour 99
heure 99
minute 99
seconde 99
cent.sec. 99
fuseau X (+ ou - par rapport à Greenwich, 0 si le système ne le gère pas)
heure fuseau 99
minutes fuseau 99
Exemple
Elle permet d'ordonner, grâce au fichier de tri, les articles provenant d'un ou plusieurs fichiers d'entrée
1. Généralités puis de les placer dans un fichier de sortie. Une PROCEDURE D'ENTREE permet éventuellement de
traiter les articles AVANT de les délivrer au tri (p. ex. les modifier, en rajouter ou supprimer) ; une
PROCEDURE DE SORTIE permet éventuellement de traiter les articles APRES la phase de tri, avant de
Le module de tri-fusion permet de trier ou de combiner un ou plusieurs fichiers à l'intérieur d'un les écrire dans le fichier de sortie.
programme COBOL. De plus, il est possible d'appliquer des traitements particuliers aux
enregistrements concernés juste avant ou après la phase de tri (ou fusion) par des procédures N-B : On ne peut faire aucune opération sur le fichier de tri les seules instructions autorisées pour
spécifiques. Les principes généraux du tri-fusion intégré sont similaires à ceux des utilitaires respectifs. traiter ce fichier sont RELEASE et RETURN.
SORT fichier-tri
Les fichiers d'entrée (locution USING de l'instruction) et de sortie (locution GIVING) sont définis de ON ASCENDING KEY critère-3 [critère-4] ... ...
DESCENDING
façon classique dans le programme ; les fichiers de travail du tri seront définis par une phase SELECT
limitée à la clause ASSIGN
[ WITH DUPLICATES IN ORDER ]
SELECT fichier -tri ASSIGN TO fspec INPUT PROCEDURE IS section-1 [THRU section-2]
L'article du fichier de tri sera décrit classiquement ; il contiendra en particulier tous les critères utilisés • THRU peut s'écrire THROUGH
dans l'instruction de tri. Il peut y avoir plusieurs descriptions d'articles pour le fichier de tri, mais les
critères ne seront décrits que dans une seule (la première). Une rubrique servant de critère ne peut
comporter de clause OCCURS, ni être subordonnée à une rubrique contenant OCCURS. • USING (resp. GIVING) et procédure d'entrée (resp. sortie) sont mutuellement exclusifs.
• L'instruction RELEASE sert à transférer un article dans le fichier de travail, depuis la procédure
d'entrée ; l'instruction RETURN rend disponible à la procédure de sortie un article du fichier de
travail.
5. Exemples
5.1. Tri sans procédure
4.2. Instructions RELEASE et RETURN
PROCEDURE DIVISION.
RELEASE enreg [FROM zone] DEBUT. OPEN INPUT (ou OUTPUT) FIENT.
TRAIT. traitement du fichier FIENT...
L'instruction RELEASE transfère un article à la phase initiale du tri. enreg est le nom d'article figurant CLOSE FIENT.
dans la description SD ; zone désigne une rubrique à partir de laquelle sera renseigné l'article (cf WRITE
FROM). TRI. SORT FITRI ASCENDING CRIT2 DESCENDING CRIT4
USING FIENT GIVING FISOR.
Après exécution d'une instruction RELEASE, l'article n'est plus disponible dans le buffer du fichier-tri.
SUITE. OPEN INPUT FISOR
traitement du fichier FISOR ...
CLOSE FISOR.
RETURN fichier-tri RECORD [INTO zone] AT END phrase impérative
...
[NOT AT END phrase impérative ]
[ END-RETURN ]
5.2. Tri avec procédure d'entrée
L'instruction RETURN permet d'obtenir un article issu de la phase finale du tri. La condition AT END
est validée lorsque le dernier article du fichier de travail a été délivré à la procédure de sortie. PROCEDURE DIVISION.
-
-
4.3. Instruction MERGE TRI. SORT FITRI ON ASCENDING CRIT3
INPUT PROCEDURE ENTRI GIVING FISOR.
Elle permet de combiner deux ou plusieurs fichiers ordonnés sur des critères identiques puis rend les -
articles disponibles pour une procédure de sortie ou un fichier de sortie. -
ENTRI SECTION.
MERGE fichier-fusion E1. OPEN INPUT FIENT.
E2. READ FIENT AT END GO E9.
ON ASCENDING KEY critère-1 [critère-2]... -
DESCENDING - traitement
-
E5. RELEASE ENTRI FROM ARTICLE. GO E2.
ON ASCENDING KEY critère-3 [critère-4] ... ... E9. CLOSE FIENT.
DESCENDING
♦ Lorsqu'un nom-fichier est spécifié, la section déclarative est exécutée après exécution valide d'une
1. GENERALITES instruction OPEN, CLOSE, READ, START ou DELETE.
♦ Lorsqu'un nom-procédure est spécifié, la section déclarative est exécutée immédiatement avant
Le module de mise au point (Debugging) de COBOL offre au programmeur des moyens de contrôler chaque exécution de la procédure citée; s'il s'agit de ALL PROCEDURES, cette règle s'applique
l'exécution de son algorithme. Ils consistent en : pour chaque procédure du pg.
♦ des lignes de mise au point (D en colonne 7)
♦ des sections déclaratives (USE FOR DEBUGGING) ♦ Lorsqu'un nom-donnée est spécifié seul, la section déclarative est exécutée:
♦ un registre spécial (DEBUG-ITEM) géré par le système et accessible au pg a) avant toute instruction WRITE ou REWRITE qui cite explicitement le nom-donnée (cas de
l'article), ou après la locution FROM;
Ces outils seront mis en (ou hors) fonction grâce à des inverseurs (commutateurs, "switchs") logiques, b) après chaque initialisation, modification, évaluation de nom-donnée quand cette rubrique
soit lors de la compilation, soit lors de l'exécution. apparaît après VARYING, AFTER, UNTIL dans une instruction PERFORM;
c) après toute autre instruction qui cite explicitement nom-donnée ET entraîne la modification
Ce module est classé obsolète en ANS85. de son contenu.
01 DEBUG-ITEM.
{[ALL REFERENCES OF] nd } ...
02 DEBUG-LINE PIC X(6).
{nom-fichier} ...
02 FILLER PIC X VALUE SPACE.
USE FOR DEBUGGING ON {nom-procédure} ... ... 02 DEBUG-NAME PIC X(30).
ALL PROCEDURES 02 FILLER PIC X VALUE SPACE.
02 DEBUG-SUB-1 PIC S9999 SIGN LEADING SEPARATE.
02 FILLER PIC X VALUE SPACE.
♦ Toute variable apparaissant après ON peut 02 DEBUG-SUB-2 PIC S9999 SIGN LEADING SEPARATE..
- n'apparaître que dans une seule phrase USE 02 FILLER PIC X VALUE SPACE.
- n'y figurer qu'une seule fois. 02 DEBUG-SUB-3 PIC S9999 SIGN LEADING SEPARATE.
02 FILLER PIC X VALUE SPACE.
♦ Si ALL PROCEDURES est cité dans une phrase USE, aucun nom de procédure ne peut figurer 02 DEBUG-CONTENTS PIC X(n).
dans aucune phrase USE.
Tous les noms cités sont des mots réservés.
Cobol Mise au point A1 - 1 Cobol Mise au point A1 - 2
• DEBUG-CONTENTS a une taille suffisante pour contenir la donnée definie par les règles ci-après.
• Le contenu de DEBUG-ITEM est mis à blanc avant chaque exécution d'une section déclarative; sa
mise à jour s'exécute suivant les règles de MOVE (sans aucune conversion pour DEBUG-
CONTENTS) .
• DEBUG-LINE contient un numéro de ligne-source (listing).
• DEBUG-NAME contient les 30 premiers caractères du nom qui a provoqué l'exécution de la section
déclarative.
• Si la donnée qui provoque l'exécution de la déclarative est indicée ou indexée , le rang de chaque
niveau est placé respectivement dans DEBUG-SUB-1,DEBUG-SUB-2,DEBUG-SUB-3.
Règles d'application
E - Exécution résultant d'un nom-procédure cité dans une locution INPUT ou OUTPUT d'une
instruction SORT ou MERGE
DEBUG-LINE contient le no de ligne de l'instruction SORT ou MERGE,
DEBUG-NAME contient le nom-procédure d'entrée (ou de sortie),
DEBUG-CONTENTS contient suivant le cas "SORT INPUT", "SORT OUTPUT"
ou "MERGE OUTPUT".
Programmes contenus
Lettres minuscules
Modificateurs de référence
EVALUATE
INITIALIZE
Dimensions de tableaux à 7
Perforation Hors-texte
1 2 3 4 5 6 7 8 9 0
+ A B C D E F G H I {
- J K L M N O P Q R }