Fichiers Indexes

  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Fichiers Indexes as PDF for free.

More details

  • Words: 18,984
  • Pages: 62
ESAT-DI

[LRE]

page XV-1

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV LES FICHIERS EN ORGANISATION SÉQUENTIELLE INDEXÉE...................................................................................1 XV.A PRINCIPE................................................................................................................................................................................1 XV.B ETUDE PRATIQUE.....................................................................................................................................................................3 XV.B.1 La phrase select......................................................................................................................................................................3 XV.B.1.1 XV.B.1.2 XV.B.1.3 XV.B.1.4 XV.B.1.5 XV.B.1.6 XV.B.1.7 XV.B.1.8

format [visualisation en mode page]..............................................................................................................................................3 Le « ASSIGN STATIQUE ».............................................................................................................................................................4 Le « ASSIGN DYNAMIQUE »........................................................................................................................................................4 Le « ASSIGN EXTERNE »...............................................................................................................................................................4 Les ASSIGN pour les périphériques.................................................................................................................................................4 Règles générales de la phrase SELECT............................................................................................................................................5 Règles SELECT spécifiques au séquentiel-indexé...........................................................................................................................5 LE FILE STATUS.............................................................................................................................................................................6

XV.B.2 La phrase FD..........................................................................................................................................................................9

XV.B.2.1 Format...............................................................................................................................................................................................9 XV.B.2.2 Règles-remarques............................................................................................................................................................................10

XV.B.3 Ouverture du fichier : OPEN...............................................................................................................................................10 XV.B.3.1 format..............................................................................................................................................................................................10 XV.B.3.2 règles ..............................................................................................................................................................................................10

XV.B.4 Entrée-sortie (I-O) en mode d’accès séquentiel (SEQUENTIAL)......................................................................................13 XV.B.4.1 XV.B.4.2 XV.B.4.3 XV.B.4.4

lecture..............................................................................................................................................................................................13 écriture.............................................................................................................................................................................................16 effacement.......................................................................................................................................................................................18 positionnement dans le fichier (start)..............................................................................................................................................19

XV.B.5 Entrée-Sortie (I-O) en mode d’accès direct (RANDOM)...................................................................................................21 XV.B.5.1 lecture..............................................................................................................................................................................................21 XV.B.5.2 écriture.............................................................................................................................................................................................23 XV.B.5.3 effacement.......................................................................................................................................................................................25

XV.B.6 Entrée-sortie (I-O) en mode d’accès dynamique (DYNAMIC)..........................................................................................26 XV.B.6.1 XV.B.6.2 XV.B.6.3 XV.B.6.4

lecture..............................................................................................................................................................................................26 écriture.............................................................................................................................................................................................31 effacement.......................................................................................................................................................................................33 positionnement dans le fichier (START)........................................................................................................................................34

XV.C EXERCICES - EXEMPLES...........................................................................................................................................................36 XV.C.1 jeu d’essai utilisé dans les exemples....................................................................................................................................36 XV.C.2 consultation en mode séquentiel à partir d’une clé secondaire.........................................................................................37 XV.C.3 création d’un séquentiel-indéxé (avec SPLIT KEY) ...........................................................................................................39 XV.C.4 création d’un séquentiel-indexé (directement par un tri USING-GIVING).......................................................................41 XV.C.5 exemples de START (mode séquentiel)................................................................................................................................42 XV.C.6 restructuration d’un séquentiel-indexé................................................................................................................................46 XV.C.7 exemple de START avec split-key........................................................................................................................................48 XV.C.8 mise à jour............................................................................................................................................................................51 XV.C.9 consultation en mode DYNAMIC ........................................................................................................................................55 XV.D VIDAGE PHYSIQUE..................................................................................................................................................................59 XV.D.1 le format IDXFORMAT »4 »...............................................................................................................................................59 XV.D.2 Les problèmes de compression............................................................................................................................................59

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 1

ESAT-DI

[LRE]

Cours CBL-85

page XV-1

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

I

II

III

IV

V

VI

VII

VIII

IX

X

XI

XII Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 1

ESAT-DI

[LRE]

Cours CBL-85

page XV-2

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XIII

XIV

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 2

ESAT-DI

[LRE]

page XV-1

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV

Les fichiers en organisation séquentielle indexée

XV.A Principe



Les fichiers en organisation séquentielle indexée (séq-ind) possèdent une structure physique qui permet d’accéder directement à l’article voulu grâce à des clés qui ont été définies lors de la création initiale. •

Il existe deux types de clés :

la clé primaire (ou RECORD KEY ou PRIME KEY) est un champ alphanumérique de l’article ayant une valeur unique qui constitue donc un identifiant. Les clés secondaires (ou ALTERNATE KEY) qui sont des champs de l’article pour lesquels les doublons sont autorisés . Un fichier logique séq-ind est en fait constitué de deux fichiers physiques : en effet ,les clés d’un fichier séq-ind ne sont pas rangées avec les données mais font l’objet d’un fichier spécifique : le fichier des index. représentation d’un fichier séquentiel-indexé

FICHIER

DES IN DEX

LES CLES PRIMAIRES

FICHIER DES

DONNEES

LES CLES SECONDAIRES N°1

PS / CBL85

LES CLES SECONDAIRES N°2

CLE PRIMAIRE

1

N° élève

x x(7)

Nom

x(20)

Prén.

x(15)

CLE SECONDAIRE N°1

Cours de COBOL-85

L’organisation séquentielle-indexée

grade

date de divers naissance

arme

x(3) x(250) AAMMJJ xxx CLE SECONDAIRE N°2

Chapître XV -

page 1

ESAT-DI

[LRE]

Cours CBL-85

page XV-2

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus



L’organisation séquentielle-indexée consiste à ranger les enregistrements en ordre croissant sur la zone «clé-primaire» : lors d’une création initiale à partir d’un fichier en organisation séquentielle , celui-ci doit donc impérativement être trié sur cette rubrique. Ce rangement concerne essentiellement les clés primaires du fichier des index qui permettent de retrouver tous les enregistrements du fichier des données dans l’ordre croissant même si physiquement ils sont en désordre dans celui-ci.

NB1 : dans le fichier des données , les articles ne restent pas rangés en croissant sur le champ clé-primaire notamment lorsqu’on a réalisé des suppressions puis des créations qui ont occupé les espaces disponibles. NB2 : sur certains systèmes (ex les fichiers BULL des DPS8000,9000,..) les articles du fichier des données sont chaînés et chacun pointe sur l’article ayant la clé primaire suivante dans l’ordre croissant.



Le fichier des index est constitué de tables qui contiennent les adresses dans le fichier des données des articles recherchés.

Ces tables peuvent être organisées physiquement de plusieurs façons différentes ; une des plus performante et des plus utilisée est celle qui consiste à stocker les clés dans une structure en arbre binaire. : on parle alors de fichiers séquentiel-indexés de type BTRIEVE ou B-TREE . (NB : dans le paragraphe D , nous étudierons les fichiers dits IDXFORMAT4 qui utilisent ce procédé)



La clé primaire d’un enregistrement n’est jamais modifiée : on peut supprimer l’article concerné puis en créer un nouveau avec la valeur de clé primaire correcte.



Les clés secondaires sont des champs modifiables : il faut donc avoir conscience que lorsqu’on fait une mise à jour sur une telle zone , le système est obligé de mettre à jour également le fichier des index. => si on fait beaucoup de modifications sur des rubriques « cléssecondaires » , les durées de traitement peuvent augmenter sensiblement. ( => ne pas créer des clés secondaires si elles ne sont pas vraiment utiles)



Une fois créés, ces fichiers séquentiel-indexés peuvent être traités comme des fichiers en organisation séquentielle c’est-à-dire en lisant les articles les uns après les autres séquentiellement ou en écrivant les enregistrements dans l’ordre des clés primaires : il s’agit du mode d’accès séquentiel (ACCESS MODE SEQUENTIAL dans la phrase select). Ce mode ne présente aucun intérêt particulier ; il peut cependant être utilisé si on veut traiter tous les articles du fichier ou lorsqu’on veut restructurer les informations.

[restructuration : Après n mises à jour (modifications,créations,suppressions) le fichier des données peut contenir des « trous » et les index peuvent ne pas être organisés pour offrir le meilleur rendement : il est donc souhaitable , de temps en temps (en fonction du volume des mises à jour ) de vider tout le fichier séquentiel-indexé sur un fichier séquentiel trié sur la clé primaire et de refaire la création initiale.] (CF l’exemple au paragraphe C6)

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 2

ESAT-DI

[LRE]

page XV-3

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus



L’intérêt principal de ce type de fichier est de permettre l’accès (lecture ou écriture) direct et rapide à l’enregistrement souhaité en remplissant avec la valeur recherchée la clé concernée (primaire ou secondaire) : il s’agit de l’accès direct (ACCES MODE RANDOM dans la phrase select). A chaque opération d’entrée-sortie le système consulte le fichier des index et obtient directement l’adresse utile dans le fichier des données.



L’accès dynamique (ACCES MODE DYNAMIC dans la phrase select ) qui permet de combiner les deux modes précédents est le plus utilisé. Il permet ,par exemple, d’accéder directement à un enregistrement à partir d’une clé puis de lire séquentiellement tous ceux qui ont la même valeur de clé. NB : Chaque mode d’accès (décrit ci-dessus) a ses instructions d’entrée-sortie (read,write,...) spécifiques [ cf les paragraphes B4 ,B5 ,B6]

XV.B Etude pratique

XV.B.1

La phrase select

XV.B.1.1

[visualisation en mode page]

format

SELECT

[ OPTIONAL ] file-name-1 NOT OPTIONAL ] [ { [ EXTERNAL DYNAMIC [ RESERVE EXTERNAL DYNAMIC

ASSIGN TO

external-file-reference data-name-1 littéral-1

DISK

DISK FROM

data-name-1

entier-1 no

alternate

[ ORGANIZATION IS ] [ ACCESS MODE IS

[LOCK MODE IS

}

]

]

AREA AREAS

INDEXED

SEQUENTIAL RANDOM DYNAMIC ]

{MANUAL} WITH

LOCK ON [MULTIPLE] RECORD(S) ]

{AUTOMATIC} ROLLBACK EXCLUSIVE

RECORD KEY IS

[

ALTERNATE RECORD KEY IS data-name-8 split-k-n-2 = data-n-9 [data-n-10].... [with duplicates] [password is data-name-11] [suppress [when] zeroes ou zeros ou spaces ou all littéral] [ FILE STATUS IS

Cours de COBOL-85

{data-name-5} {split-key-name-1 = data-name-6 [data-n-7]...}. [password is data-name-11]

data-name-2

L’organisation séquentielle-indexée

]

]

. Chapître XV -

page 3

ESAT-DI

[LRE]

Cours CBL-85

page XV-4

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.1.2

Le « ASSIGN STATIQUE »



On parle de fichier assigné en statique car le nom du fichier externe est donné « en dur » sous la forme d’un littéral.



Le mot DISK (facultatif) nous permet de donner le nom externe du fichier (littéral-1) soit dans la phrase select soit dans la phrase FD. Si on ne spécifie pas « littéral-1 » avec DISK ni dans la select et ni dans la phrase FD , le nom choisi pour définir le nom externe est celui du nom interne (file-name-1).

XV.B.1.3

Le « ASSIGN DYNAMIQUE »



C’est le mode le plus performant car le nom externe du fichier peut être fourni directement (ou même être changé) lors de l’exécution du programme.



On parle de fichier assigné en dynamique lorsqu’on fournit un nom-donnée en nom externe avec l’option « DYNAMIC ». ex : select monfichier assign to dynamic [disk] wzone. NB: le mot DYNAMIC est facultatif si on utilise la directive de compilation ASSIGN »DYNAMIC ». [CF l’exemple C5 ou le nom du fichier imprimante résultat varie en dynamique ; cet exemple qui fonctionne sans la clause DYNAMIC semble démontrer que celle-ci est implicite ]

XV.B.1.4

Le « ASSIGN EXTERNE »



Il y a deux méthodes pour assigner un fichier en « externe » : soit utiliser une variable d’environnement du système , soit utiliser un fichier système spécifique au cobol micro-focus : le External File Mapper qui contient les associations entre noms internes et externes.(ce deuxième cas qui permet de lancer des batch à l’aide de jcl ne sera pas étudié dans ce cours).



Pour le cas avec variable d’environnement , c’est le littéral-1 de la phrase select qui définit son nom (si le littéral contient des « - » le nom de la variable est la chaîne de caractères qui suit le dernier tiret). ex : select monfichier assign to EXTERNAL comment-çà-va (avant l’exécution du programme , il faut avoir mis une valeur à VA avec la commande SET ; ex : SET VA=c:\cobol\calculs.dat)



Pour avoir le mode externe par défaut on utilise la directive de compilation ASSIGN »EXTERNAL ».

XV.B.1.5 •

Les ASSIGN pour les périphériques

On peut écrire un programme qui envoie directement les données à l’imprimante ou vers un port de communication. Les noms de périphériques suivants peuvent être spécifiés dans la phrase select : CON clavier ou écran PRN première imprimante parallèle LPT1 première imprimante parallèle LPT2 deuxième .. LPT3 troisième ... COM1 premier port asynchrone série COM2 deuxième .. on peut également donner un nom de lecteur « A: » , »B: » , ... ex : select monfichier assign to « con »

permet d’accéder à l’écran en lecture ou en écriture

ex : select tonfichier assign to wzone. move « lpt1 » to wzone

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 4

ESAT-DI

[LRE]

Cours CBL-85

page XV-5

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.1.6

Règles générales de la phrase SELECT



si le mode d’accès n’est pas spécifié , c’est le mode d’accès séquentiel qui est pris par défaut.



File-name est toujours le nom interne du fichier qui sera utilisé par la suite dans tout le programme.



n-donnée-1 peut être déclaré dans la data division comme une zone groupe ou une zone en alphanumérique (assez grande pour contenir le nom du fichier). Si elle n’est pas déclarée dans le programme , le système cobol la déclare implicitement (sous la forme d’une zone en pic x(65) ). Avec l’option FROM , elle doit être explicitement déclarée en data division.



l’option « not optional » n’est valide (ou active) que si le fichier est ouvert en I-O. Optional signifie que le fichier n’est pas nécéssairement présent au moment de l’exécution. (cette option ne s’applique qu’aux fichiers ouverts en I-O ou extend ou input)



External-file-reference , littéral-1 , nom-données-1 indiquent toujours le nom externe du fichier.



littéral-1 ne peut pas être utilisé si on a mis l’option EXTERNAL ou DYNAMIC.



Si on a choisi l’option DYNAMIC , le mot écrit pour définir le nom externe du fichier sera interprété comme une référence externe (cf b14).



XV.B.1.7

Règles SELECT spécifiques au séquentiel-indexé



Le split-key-name est le nom qui représente la concaténation d’une ou plusieurs rubriques de l’article ; il ne peut être utilisé que dans un verbe START ou READ.[cf exemple parag C3]



nom-donnée-5 , 6 , 9 ,10 , . . . . doivent être décrit dans l’enregistrement du fichier considéré ( en FD).



les noms de clé (n-d-5 et n-d-8) ainsi que tous les nom-données qui constituent une split-key ne doivent pas être des champs à longueur variable.



Les clés secondaires (n-d-8) ne doivent pas être incluses dans la primaire ( n-d-5 ..)ou dans les autres secondaires.



Quand le mode d’accès séquentiel est choisi , on accède aux articles en ordre croissant sur la clé primaire. (ou en croissant sur une clé secondaire choisie comme clé de référence par un START)



Quand le mode RANDOM est spécifié , la valeur de la clé primaire indique l’article auquel on veut accéder directement.



La clause RECORD KEY spécifie le nom de la clé primaire.



Si le fichier a plusieurs descriptions d’articles , le nom de la clé primaire ne doit apparaître que dans l’une d’entre elles.



La clause ALTERNATE RECORD KEY permet de définir les clés secondaires.(with duplicates autorise les doubles sur cette clé).



La clause SUPPRESS permet de définir une SPARSE KEY (notion spécifique à cobol-micro-focus). Une sparse key est une clé pour laquelle aucune valeur n’est stockée dans le fichier des index. Exemple : on peut définir une sparse key avec la valeur « espace » : quand la clé considérée ne contient que des espaces , aucune entrée n’est créée sur le fichier des index. Cette option ne concerne que les clés secondaires ; elle permet éventuellement de diminuer la taille du fichier des index. IL suffit de mettre la clause SUPPRESS pour créer une sparse key.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 5

ESAT-DI

[LRE]

page XV-6

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.1.8

LE FILE STATUS

Un file status est un ensemble de 2 caractères (défini en working-storage section) qui donne des informations sur le déroulement des instructions réalisées sur les fichiers. Quand l’opération (entrée-sortie) s’est bien déroulée , il contient « 00 » (en pic xx) sinon , il faut étudier son contenu pour connaître la nature de l’erreur. La déclaration d’un file status est facultative mais si une erreur survient et qu’on n’a pas prévu cette clause le programme « aborte » et le système fournit un message d’erreur. (NB : si on a déclaré une phrase USE dans les déclaratives pour gèrer les erreurs d’entrée-sortie , la clause file status est obligatoire.) On peut déclarer un file status par fichier. Composition du file status : il comprend 2 caractères : le premier = status-key-1 en X donne la nature générale de l’erreur. le second = status-key-2 (en binaire => décrit en pic 99 comp-x) contient un code numérique indiquant précisément la nature de l’anomalie. valeur de status-key-1 : valeu r 0 1 2 3 4 9

condition déroulement correct passage par AT END passage par INVALID KEY Permanent Error erreur logique (ex fermeture d’un fichier fermé) erreur de l’exécutif

NB : si la valeur n’est pas 9 , le file status peut être traité comme une zone en alphanumérique sur 2 caractères (pic XX) sinon , il faut étudier la valeur binaire indiquée sur les 8 bits du dernier caractère. exemple de description : select monfichier assign to « c:\produit.txt » organization indexed access dynamic record key numero file status wst. . . working-storage section. 1 wst. 3 wstk1 pic x. 3 wstk2 pic x. 3 wstbin redefines wstk2 pic 99 comp-x. fichiers concernés par les différents status : i : fichier séquentiel-indexé s : fichier séquentiel r : fichier relatif

KEY 1 0 succès 1 at end 2 inv key 3 perm error 4 logic error 9 error system

Cours de COBOL-85

0 sri sri sri sri voir la

STATU S 1

KEY 2 2 i

3

i

ri

ri sri

valeur

sri binaire

4 sri r ri s sri

L’organisation séquentielle-indexée

5 sri

6

s sri

7 s

8

9

sri sri

sri sri

sri sri

Chapître XV -

page 6

ESAT-DI

[LRE]

Cours CBL-85

page XV-7

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

significations des différents status : FILE STATUS 00 02 04 05 07

nature de l’anomalie succès complet pour un READ : la valeur de la clé courante est la même pour l’article suivant pour WRITE ou REWRITE :l’enregistrement que l’on vient d’écrire a une clé en double pour une clé secondaire avec doubles autorisés la longueur de l’article n’est pas conforme à la réalité le fichier déclaré en OPTIONAL n’est pas présent lors de l’open. pour OPEN ou CLOSE avec la clause REEL /UNIT : le fichier est un non réel-unit medium

FILE STATUS 10 14

nature de l’anomalie l’article logique suivant n’existe pas la taille de la zone clé est insuffisante

FILE STATUS 21

nature de l’anomalie erreur de séquence pour l’accès séquentiel : la clé primaire traitée n’est pas en ordre croissant ou sa valeur a été changée entre le read et le rewrite suivant. clé en double (non autorisée ou sur la clé primaire) article non trouvé ou un read ou start a été réalisé sur un fichier optional non présent. boundary violation : (dépassement de limites) problème de write sur un fichier externe ou problème de write sur un relatif à cause d’une description de clé trop petite.

22 23 24

FILE STATUS 30 34 35 37 38 39

nature de l’anomalie boudary violation : dépassement de limites sur un fichier séquentiel ou erreur de parité ou de transmission. boundary violation : problème d’écriture sur un fichier séquentiel externe un OPEN avec i-o,input ou extend a été tenté sur un non-optional fichier qui n’était pas présent. pb avec OPEN : me mode d’ouverture est inadapté. pb avec OPEN : tentative d’ouverture d’ un fichier verrouillé .(cf LOCK de select ou read ...) incohérence entre la description du fichier dans le programme et le fichier réel.

FILE STATUS 41 42 43 44 46 47 48 49

nature de l’anomalie ouverture d’un fichier déjà ouvert. CLOSE sur un fichier déjà fermé concerne l’accès séquentiel : le verbe avant delete ou rewrite n’était pas un read. dépassement de limites (boundary violation) un READ a été exécuté sur un fichier ouvert en input ou I-O mais il n’y avait pas d’article suivant valide. un READ ou un START a été tenté sur un fichier non ouvert en input ou I-O. un WRITE a été tenté sur un fichier non ouvert en output ou I-O ou extend. un DELETE ou un REWRITE a été tenté sur un fichier non ouvert en I-O..

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 7

ESAT-DI

[LRE]

page XV-8

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

cas du status-key-1 = 9 : => erreur système => étude de la valeur binaire du status-key-2 ST-K2 001 002 003 004 005 006 007 008 009 010 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028

nature de l’anomaliei espace buffer insuffisant fichier non ouvert erreur mode série nom de fichier illégal spécification de périphérique illégale tentative de write sur fichier en input espace disk insuffisant tentative de lecture sur fichier en output pb de path-name (fichier introuvable) fichier non (supplied) ouverture d’un fichier déjà ouvert fichier non trouvé trop de fichiers ouverts simultanément trop de fichiers indexés ouverts trop de fichiers (devices) ouverts erreur article (longueur) read-error (eof trouvé avant la fin) rewrite erreur (cf le mode ouverture) ressource (ou device) « busy » le nom de fichier est un répertoire illégal ou impossible open (cf mode) illégal ou mode impossible pour close I-O sur disque en erreur operating system data error block i-o error périph. non disponible pas de place disponible sur le (device)

STK2 068 069 070 071 072 073 074 075 077 078 081 100 101 102 104 105 129 135 138 139 141 142 143 146 147 148 149

029 030 031 032 033 034 035 36 037 038 039 040 041 042 043 045 047 065 066

tentative de delete d’un fichier ouvert fichier système en lecture seule pas de propriétaire de fichier trop de seq-indexés ou (no such process) erreur physique de I-O mode incorrect ou file descriptor tent. d’accès avec mauvaises permissions le fichier existe déjà accès au fichier interdit disque non compatible fichier non compatible initialisation du langage incorrecte fichier indexe déterioré tentative de write sur « broken pipe » il manque des informations pour seq-ind open 1 NLS file utilisant pg incompatible dépassement (overflow) sur fic. des index fichier verrouillé tent. d’ajout d’une clé primaire en double

150 151 152 158 159 161 173 180 182 183 188 193 194 195 196 210 213 218 219

067

fichier indexé non ouvert

Cours de COBOL-85

nature de l’anomaliei article verrouillé argument illégal pour module ISAM trop de fic indexés ouverts mauvais format pour un fic. indexé fin du fichier indexé pas d’article trouvé ds le fic indexé pas d’article courant ds le fic indexé nom du fichier indexé trop long pb (failure) avec module interne ISAM descrip. illégale de clé pour un fic indexé la clé existe déjà (seq-ind) opération incorrecte (invalid) opération incorrecte sur fic indexé fic séquentiel avec 1 nb de EL non entier nom de fichier « Null » vide erreur allocation mémoire tent d’accès à 1 EL n° zero (relatif) le fichier doit exister fic fermé with LOCK (ne peut être ouv.) longueur d’EL ou de clé illégale ouverture d’un fic déjà ouvert fermeture d’un fichier non ouvert rewrite/delete (mode séq) s. read ok avant pas d’article courant def pour read séq. mauvais open ou acces mode p read/start mauvais .open ou access mode pour write mauv. open ou access mode p. rewrite/del. program abandoned at user request read random sur fichier séquentiel rewrite sur fic non ouvert en I-O tent rewrite sur fic. line-sequentiel fic line-séquentiel mal construit file-header non trouvé (pb format) programme appelé non trouvé erreur de marque de fin de fichier écran (entrée ou sortie) mal ouvert (mode) tent d’open d’1 fic line-seq pour I-O nom de fichier trop grand erreur ds la variable length count taille du fichier trop grande delete/rew. non précédé de read n° d’EL trop grand (relatif) fichier fermé with LOCK trop de verrous fic . multiple/reel unit malformé operating system shared file limit exceeded

L’organisation séquentielle-indexée

Chapître XV -

page 8

ESAT-DI

[LRE]

page XV-9

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.2

La phrase FD

XV.B.2.1

FD

Format

[ IS EXTERNAL ] [ IS GLOBAL ]

file-name-1

[ BLOCK

CONTAINS [ integer-1] TO integer-2 RECORDS ou CHARCATERS

[ RECORD

]

CONTAINS integer-3 CHARCATERS IS VARYING IN SIZE [FROM integer-4 ] [TO integer-5] CONTAINS

[

CHARACTERS [DEPENDING ON nom-donnée-1] integer-6 TO ] integer-7 CHARACTERS

] [ LABEL RECORD(S) IS (ARE)

STANDARD OMITTED

data-name-2

implémentor-name-1

[VALUE OF

is

FILE-ID IS

] data-name-3 ou littéral-1 data-name-6 ou littéral-3 -

[RECORDING MODE IS F ou V ou U ou S ou FIXED ou VARIABLE [DATA 1 1

Cours de COBOL-85

RECORD(S) IS (ARE) data-name-7 [data-name-8] .....

]

] ]

data-name-7. (description de l’enregistrement) data-name-8.

L’organisation séquentielle-indexée

Chapître XV -

page 9

ESAT-DI

[LRE]

page XV-10

CHAPÎTRE indexée

Cours CBL-85

Les fichiers en organisation séquentielle-

15

11/10/2009 11/10/2009

ANS85/m-focus

XV.B.2.2

Règles-remarques

NB : dans la phrase FD d’un fichier séquentiel-indexé , il n’y a pas de clause spécifique ( => cf le cours sur les fichiers séquentiels) NB : toutes les clauses barrées sont des éléments datant de versions antérieures du cobol (ex CBL74) qui sont désormais obsolètes. •

L’utilisation des clauses EXTERNAL et GLOBAL est traitée dans le cours sur les sous-programmes (chapître 11).



BLOCK CONTAINS .. est uniquement un commentaire en cobol85; dans des versions précédentes cette clause permettait de fixer le facteur de blocage du fichier (c’est-à-dire de nombre d’articles par bloc physique).



RECORD CONTAINS permet de spécifier le nombre de caractères de l’article (de longueur fixe ou variable)



Pour la clause RECORDING MODE : V est synonyme de VARIABLE et F synonyme de FIXE NB en mode V (longueur variable des articles , la longueur de chaque article est incluse en début de chaque record)



LABEL RECORD ....clause obsolète en cobol85



VALUE OF : ...encore une clause obsolète pour le cobol ansi-85.

XV.B.3

Ouverture du fichier : OPEN

XV.B.3.1

format

OPEN

XV.B.3.2

{

INPUT OUTPUT I-O EXTEND

{ {

}

file-name-1 [ WITH LOCK ] } . . . . { file-name-2 [ WITH LOCK ] file-name-3 [ WITH LOCK ] } . . . . { file-name-4 [ WITH LOCK ]

}.... }....

règles

♦ la clause EXTEND (qui signifie ouvir en extension pour ajouter des articles à la suite ) peut être utilisée pour des fichiers en accès séquentiel. ♦ Si «with lock» est spécifié , tout le fichier est verrouillé. ♦ l’ouverture avec succès d’un fichier rend disponible la zone d’entrée (niveau 1 en FD) dans le programme.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 10

ESAT-DI

[LRE]

page XV-11

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

♦ tableau des combinaisons autorisées pour le choix du mode d’ouverture et d’accès : MODE D’ ACCES Séquential

Random

Dynamic

instruction READ WRITE REWRITE START DELETE READ WRITE REWRITE DELETE READ WRITE REWRITE START DELETE

MODE D‘ input X

OUVERTUR E output

I-O

Extend X

X X X X

X X X

X X X X X X X X X X X X X

♦ Un fichier peut être ouvert avec input,output,extend ou I-O plusieurs fois dans le même programme si à chaque fois il a été fermé par close. ♦ L’exécution d’un OPEN ne délivre aucun article. ♦ L’ouverture par OPEN du fichier entraîne un contrôle du nom de fichier externe inscrit dans la phrase select : celui-ci doit être conforme au système d’exploitation utilisé. ♦ Les descriptions en phrases FD doivent être conformes à la description de l’enregistrement faite lors de la création initiale du fichier. ♦ Pour les fichiers ouvert en INPUT ou I-O , l’ordre OPEN positionne le file-position-indicator (pointeur interne au fichier) sur le premier article courant (pour les fichiers séquentiels et séquentiel-indexés) et sur la clé n° 1 pour les fichiers relatifs. S’il n’y a pas de courant , le position-indicator est positionné de telle sorte qu’on passe par la clause AT END lors du prochain READ. Si le fichier n’existe pas , le file status est renseigné avec la valeur adéquate.. ♦ Lorsqu’un OPEN en OUTPUT s’est déroulé correctement , le fichier spécifié est créé (avec 0 article) . Si un fichier avec le même nom existe déjà , il est écrasé.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 11

ESAT-DI

[LRE]

Cours CBL-85

page XV-12

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

♦ L’exécution d’une instruction OPEN renseigne toujours le file status. ♦ Quand LOCK MODE EXCLUSIVE est spécifié dans la select , le verbe OPEN verrouille tout le fichier durant toute l’exécution du programme. ♦ Quand LOCK MODE AUTOMATIC ou MANUAL est spécifié dans la select , le fichier est ouvert en mode partageable (les 2 modes possibles pour un fichier sont partageable ou exclusif) ; le verrouillage effectif dépend ensuite des options choisies dans les diverses instructions (open,read,..). NB : Les fichiers ouverts en OUTPUT ainsi que les fichiers séquentiel-indexés et les fichiers relatifs ouverts en EXTEND sont implicitement en mode exclusif. Seuls les fichiers partageables ouverts en I-O peuvent accéder à des articles verrouillés. ♦ Si l’exécution d’un OPEN échoue , le fichier considéré n’est pas « touché » : une valeur est mise dans le file status et toutes les procédures citées dans une instruction USE AFTER EXCEPTION sont exécutées. ♦ L’ouverture en I-O permet à la fois de lire le fichier et d’écrire sur celui-ci. Si à l’ouverture en I-O le fichier n’existe pas , le système réagit de la façon suivante : si la phrase OPTIONAL est spécifié (en select) le fichier est créé. si c‘est NOT OPTIONAL => il y a erreur. si aucune phrase n’est spécifiée dans la select et qu’on a mis la directive de compilation OPTIONAL-FILE , le fichier est créé. S’il n’y a aucune phrase et aucune directive (ou la directive NOOPTIONAL-FILE) => il y a erreur. ♦ Quand un fichier (en input) contient la clause OPTIONAL dans la phrase select , le système pose une question pour savoir s’il est présent ou absent.S’il est absent , le premier READ passe par la clause AT END. ♦ La clause EXTEND permet de se positionner juste après le dernier enregistrement logique du fichier. (pour un fichier séquentiel , le dernier logique est le dernier écrit ; pour un fichier relatif c’est l’article qui a la plus grande clé relative et pour un séquentiel indexé ,il s’agit de celui qui a la plus grande clé primaire). ♦ L’ouverture en I-O fonctionne avec tous les fichiers sauf les fichiers en organisation LINE-SEQUENTIAL (organisation spécifique au cobol-micro-focus qui est une organisation séquentielle avec sur la fin d’ article 2 caractères ( 0D,0A)16 ou RC,LF de façon à obtenir des lignes). Si le fichier n’existe pas,il est créé et est considéré comme un fichier vide en lecture (sauf si NOT OPTIONAL en select).

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 12

ESAT-DI

[LRE]

page XV-13

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.4

Entrée-sortie (I-O) en mode d’accès séquentiel (SEQUENTIAL)

XV.B.4.1

lecture

READ

file-name [

[ [

NEXT PREVIOUS

RECORD

[ INTO Identifier ]

[ WITH

KEPT NO IGNORE WAIT

LOCK ] ]

AT END instructions impératives-1 . . . . . . ] NOT AT END instructions impératives-2 . . . . . . ]

END-READ Rôle : Permet de lire les articles séquentiellement dans l’ordre croissant des clés primaires.(on n’a aucune clé à remplir : tout se passe comme si on lisait un fichier séquentiel.). Permet aussi de lire séquentiellement les articles dans l’ordre croissant d’une clé secondaire choisie à condition d’avoir fait un START avant. (ce cas fait l’objet de l’exemple du paragraphe C3). Règles de fonctionnement :



La clause AT END doit être spécifiée si on n’a pas mis de phrase USE.. ♦ La phrase WITH LOCK ne peut être spécifiée que lorsqu’ un simple article a été verrouillé en manuel pour un fichier partageable. (si le fichier est ouvert en I-O le système n’accède à l’article verrouillé que si la phrase WITH LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternates clés qui autorisent des doubles.) ♦ WITH NO LOCK n’est permis que lorsque les articles ont été verrouillés en manuel ou automatique dans un fichier partageable. [partageable <=> on n’a pas mis la clause WITH LOCK EXCLUSIVE dans la phrase select ] ♦ WITH KEPT LOCK ne peut être spécifié que si des articles multiples ont été verrouillés manuellement dans un fichier partageable. (si le fichier est ouvert en I-O le système accède aux articles verrouillés que si la phrase WITH KEPT LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternate clés qui autorisent des doubles.) ♦

La clause WITH WAIT permet de donner au système le temps nécéssaire pour vérifier si un article est verrouillé.



La clause IGNORE LOCK permet au READ de s’exécuter comme si l’article n’était pas verrouillé.



En mode d’accès séquentiel NEXT est facultatif.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 13

ESAT-DI

[LRE]

page XV-14

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus



Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le fileposition-indicator indique que l’article suivant n’a pas été trouvé). L’exécution d’un verbe READ met toujours à jour le file status. ♦

Si un fichier décrit avec OPTIONAL est non présent (à l’ouverture) , on passe par AT END au moment du READ.



NB : PREVIOUS pour lire le précédent n’est utilisable qu’en mode d’accès dynamique.



En mode d’accès séquentiel , le read délivre les articles dans l’ordre des clés primaires (on n’a aucune clé à remplir) ou dans l’ordre croissant d’une clé secondaire ayant fait l’objet préalablement d’un START.

• •

Si on fait un READ PREVIOUS et qu’il n’existe pas de précédent , on passe par AT END (NB attention l’option previous est spécifique au cobol micro-focus) et le READ est considéré comme ayant échoué.

avant l’exécution d ‘un READ , il faut nécéssairement que le fichier ait été ouvert en INPUT ou en I-O (cf tableau au parag. B32)

Quand on fait plusieurs descriptions logiques des enregistrements du fichier (plusieurs niveaux 1 en FD ) , en mémoire une seule zone est générée qui est utilisée par les différents types d’articles (plusieurs niveaux 1 en FD ==> redéfinition implicite de la même zone ). C’est l’exécution du verbe READ qui permet de remplir cette zone mémoire (appelée ZE zone d’entrée du fichier ou Record Area) Chaque instruction READ réussie remplit cette zone en écrasant le contenu précédent. ♦ INTO qui permet de ranger l’article lu dans la zone nommée par « identifier » (= nom-donnée) ne doit pas être utilisé si on a des articles de longueur variable. Même s’il y a la clause INTO , l’article lu est stocké dans sa zone d’entrée (=Record Area = le niveau 1 en FD = ZE ). L’utilisation d’un READ ... INTO est équivalente à un read simple suivi d’un MOVE de la zone d’entrée dans la zone citée après into : si l’exécution du read ..into est un échec , le move n’est pas réalisé et la zone « into » garde son contenu initial. ♦ Au moment de l’exécution d’un READ (en mode d’accès séquentiel , read signifie lire le suivant) , si le file-position-indicator indique qu’il n’y a pas d’article logique suivant à lire ou que le fichier optional n’est pas présent :





une valeur est placée dans le file-status indiquant la condition fin de fichier.



si la clause AT END a été spécifiée , les instructions impératives-1 sont exécutées ( et aucune USE AFTER EXCEPTION procedure n’est exécutée) puis le programme se poursuit séquentiellement à partir du END-READ.



Si la clause AT END n’est pas spécifiée , c’est la USE ..procédure qui est lancée puis le programme se poursuit séquentiellement à partir du END-READ.



Quand on passe par AT END , le READ est considéré comme en échec (le file status <> 0 le prouve ). Dans ce cas , le contenu de la zone d’entrée est indéterminé.

Quand la fin de fichier n’est pas atteinte lors de l’exécution du READ (pas de passage par AT END) ∗

le file-position-indicator est mis à jour.



S’il y a une condition d’exception (autre que la fin de fichier) , la procédure USE .. s’exécute.



S’il n’y a pas de condition d’exception ,l’article est rangé dans la zone d’entrée (record area) puis le programme se poursuit séquentiellement à partir des instructions-impératives-2 si NOT AT END est spécifié ou à partir du END-READ dans le cas contraire.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 14

ESAT-DI

[LRE]

page XV-15

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

♦ Après un READ qui tente de lire un article verrouillé , le file-position-indicator reste pointé sur cet article : les read next ou previous suivants continuent à agir sur le même enregistrement. Les instructions de la phrase NOT AT END ne sont exécutées que si READ a réussi complètement. ♦ NB (???) Quand la condition de fin de fichier a été décelée (=> au moment de la lecture du dernier enregistrement ) l’instruction suivante doit être un READ . . .NEXT car PREVIOUS ne peut plus fonctionner car l’article logique précédent n’existe pas .

NB : PROBLEME DE LAFINDE FICHIER

ENREGISTREMENT N°1 ENREGISTREMENT N°2 . . .

ENREGISTREMENT N-1 DERNIER ENREGISTREMENT

FINDE FICHIER

pour bien comprendre les problèmes de fin-de-fichier , il faut considérer qu'il y a un article supplémentaire nommé FIN DE FICHIER La lecture du dernier article se déroule normalement ; on passe par la clause AT END lorsqu'on veut lire le suivant.



Après être passé par AT END , on peut faire OPEN + CLOSE ou START si on veut continuer à travailler sur le fichier.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 15

ESAT-DI

[LRE]

page XV-16

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.4.2

écriture

format n° 1 utilisable en accès séquentiel :

WRITE [ [

record-name

[ FROM Identifier-1 ] littéral-1

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-WRITE Rôle : permet d’écrire des articles séquentiellement ( l’article à écrire devant toujours avoir une clé primaire supérieure à la précédente). C’est l’instruction à utiliser pour faire la création initiale d’un fichier ou pour faire des créations sur un fichier existant. Règles de fonctionnement : ♦ WRITE record-name FROM nom-donnée name

est équivalent à

MOVE nom-donnée to record-name + WRITE record-

♦ identifier-1 est soit un nom-donnée décrit en data division (différent de record-name) soit un identificateur de fonction alphanumérique (FUNCTION arguments ...). ♦ record-name est le nom de la ZS (zone de sortie du fichier ou Record area = niveau 1 en FD ; pour un fichier en lecture on appelle cette zone ZE= zone d’entrée et pour un fichier sur lequel on veut écrire on la nomme ZS= Zone de sortie). ♦ L’exécution d’un write met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié). Si un write échoue , la procédure mentionnée éventuellement dans une phrase USE est exécutée.



La clause INVALID KEY est obligatoire (si on n’a pas prévu de phrase USE).



Pour faire un write il faut avoir ouvert le fichier en OUTPUT ou en EXTEND. (I-O ne fonctionne pas en mode séquentiel)

♦ L’article écrit par l’exécution d’un WRITE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD) si le fichier a fait l’objet d’une clause « SAME AREA » en I-O-CONTROL ou si le write a échoué par une condition INVALID KEY.

♦ Au moment de l’exécution du WRITE , le système utilise la clé primaire pour faire la création : celle-ci doit être unique. ♦

On passe par INVALID KEY dans les cas suivants : ∗ quand (mode séquentiel , fichier ouvert en output) la valeur de la clé primaire est <= à la précédente ( ou = à une clé existant déjà dans le fichier). ∗ Quand on veut créer un article avec une clé secondaire qui existe déjà et que les doubles n’ont pas été autorisés. ∗ quand il y a un problème de dépassement de limite ( ex :plus assez de place pour créer un nouvel article).

[NB : en cas de problème avec des entrées-sorties sur des articles verrouillés : CF les directives de compilation WRITE-LOCK et FDCLEAR ainsi que les run-time switches N et T]

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 16

ESAT-DI

[LRE]

page XV-17

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

format n° 2 utilisable en accès séquentiel :

REWRITE record-name [ [

[ FROM Identifier-1 ] littéral-1

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-REWRITE Rôle : En mode séquentiel , cette instruction sert à «ré-écrire» et donc remplacer ( =>après l’avoir modifié ) l’article qu’on vient de lire. (Il n’y a aucune clé à remplir : l’instruction concerne toujours l’article précédemment lu). ==> pour utiliser ce verbe , il faut forcément avoir fait un READ avant. Règles de fonctionnement : ♦

Pour utiliser REWRITE le fichier doit être ouvert en I-O.

♦ REWRITE record-name FROM nom-donnée record-name

est équivalent à

MOVE nom-donnée to record-name + REWRITE

♦ identier-1 est soit un nom-donnée décrit en data division (différent de record-name) soit un identificateur de fonction alphanumérique (FUNCTION .arguments ...). ♦ record-name est le nom de la ZS (zone de sortie du fichier ou Record area = niveau 1 en FD ; pour un fichier en lecture on appelle cette zone ZE= zone d’entrée et pour un fichier sur lequel on veut écrire on la nomme ZS= Zone de sortie). ♦ L’exécution d’un REWRITE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié). Si un rewrite échoue , la procédure mentionnée éventuellement dans une phrase USE est exécutée.



La clause INVALID KEY n’ est pas obligatoire en mode séquentiel.

♦ L’article écrit par l’exécution d’un REWRITE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD) si le fichier a fait l’objet d’une clause « SAME AREA » en I-O-CONTROL ou si le rewrite a échoué par une condition INVALID KEY.

♦ Au moment de l’exécution du REWRITE , le système utilise la clé primaire pour faire l ‘écriture de remplacement : celle-ci doit être celle de l’article lu précédemment. ♦

On passe par INVALID KEY dans les cas suivants : ∗ quand (mode séquentiel , fichier ouvert en I-O) la valeur de la clé primaire est différente de celle lue précédemment. ∗ Quand on veut créer un article avec une clé secondaire qui existe déjà et que les doubles n’ont pas été autorisés.

[NB : en cas de problème avec des entrées-sorties sur des articles verrouillés : CF les directives de compilation WRITE-LOCK et FDCLEAR ainsi que les run-time switches N et T. un rewrite sur un article verrouillé echoue]

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 17

ESAT-DI

[LRE]

page XV-18

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.4.3

effacement

DELETE [ [

file-name

RECORD

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-DELETE Rôle : En mode séquentiel , cette instruction sert à effacer l’article qu’on vient de lire. (Il n’y a aucune clé à remplir : l’instruction concerne toujours l’article précédemment lu). ==> pour utiliser ce verbe , il faut forcément avoir fait un READ avant. Règles de fonctionnement : ♦

Pour utiliser DELETE le fichier doit être ouvert en I-O.



L’exécution d’un DELETE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié).



La clause INVALID KEY n’ est pas obligatoire en mode séquentiel.



L’article effacé par DELETE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD).



L’article à effacer ne doit pas être verrouillé.



On passe par INVALID KEY dans les cas suivants : ∗ quand (mode séquentiel , fichier ouvert en I-O) la valeur de la clé primaire est différente de celle lue précédemment.

NB : effacement d’un fichier complet :

DELETE FILE

{file-name-1} . . . .

Ne pas confondre le format précédent avec celui-ci qui permet d’effacer complètement (et physiquement ) tous les fichiers cités à condition que ceux-ci aient été préalablement fermés. (ne fonctionne pas s’ ils ont été fermés avec close WITH LOCK)

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 18

ESAT-DI

[LRE]

page XV-19

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.4.4

positionnement dans le fichier (start)

START

{ { { file-name KEY IS { { {

data-name-1 split-key-name-1

[ [

INVAKID KEY NOT INVALID KEY

= > NOT <

{ < NOT >

<=

ou alors EQUAL TO } ou alors GREATER THAN } ou alors NOT LESS THAN } >= ou alors GREATER THAN OR EQUAL TO ou alors LESS THAN } ou alors NOT GREATER THAN } ou alors LESS THAN OR EQUAL TO

[ WITH SIZE

{ identifier-1 } { littéral-1 }

} }

]

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-START Rôle : Sert à se positionner dans le fichier à partir d’une valeur de clé (primaire ou secondaire*). Il faut avoir rempli la clé concernée préalablement avec la valeur choisie. Le START ne fait pas de lecture : pour accéder au premier enregistrement correspondant à la clé choisie , il faut faire un READ. Tous les READ . . . NEXT qui suivent un START délivrent les articles en ordre croissant sur la clé choisie (primaire ou secondaire) au moment du START. La clé choisie au moment du START devient la clé de référence pour les instructions READ qui suivent. [* NB (?!?) : certaines documentations COBOL indiquent que START ne fonctionne qu’avec la clé primaire.] Règles de fonctionnement :

Data-name-1 est le nom de la clé primaire ou secondaire définie dans la phrase select et dans la description de la zone « record » en niveau 1 en FD. ♦

Data-name-1 peut également être une partie (gauche) de clé (zone sous-groupe ou élémentaire composant cette clé). [CF les exemples aux paragraphes C2 C5 C7] ♦

La notion de clé concaténée (split-key-name) est spécifique à cobol-micro-focus.

♦ WITH SIZE indique le nombre de caractères à prendre en compte dans la clé.(dans ce cas identifier-1 doit être une zone élémentaire numérique). ♦

Cours de COBOL-85

Si la phrase KEY est spécifiée , data-name-1 doit être une zone décrite en FD.

L’organisation séquentielle-indexée

Chapître XV -

page 19

ESAT-DI

[LRE]

Cours CBL-85

page XV-20

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus



Pour utiliser START , le fichier doit être ouvert en INPUT ou I-O.

♦ Si la phrase KEY n’est pas spécifiée c’est la condition = (ou EQUAL TO) qui est prise par défaut. ♦ La clause INVALID KEY est obligatoire (si aucune phrase USE n’a été spécifiée en déclaratives). ♦

l’exécution du START met à jour le file status.



Le START ne trouve jamais les articles verrouillés.

♦ Quand l’opérateur de comparaison est = ou > ou >= , le file-position-indicator pointe sur le premier article qui satisfait la condition. Quand l’opérateur de comparaison est < ou <= , le file-position-indicator pointe sur le dernier article logique qui satisfait la condition. Si cette clé a des doubles , le file-position-indicator pointe sur la dernière de ces entrées.

♦ Si aucun article ne satisfait la condition , on passe par INVALID KEY (le file-position-indicator a alors une valeur indéterminée). ♦

Cours de COBOL-85

Si la clause KEY n’est pas mentionnée , c’est la clé primaire qui est utilisée.

L’organisation séquentielle-indexée

Chapître XV -

page 20

ESAT-DI

[LRE]

page XV-21

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.5

Entrée-Sortie (I-O) en mode d’accès direct (RANDOM)

En mode d’accès direct , toutes les instructions agissent sur l’enregistrement choisi directement à l’aide d’une clé (primaire ou secondaire) qu’il faut donc toujours préalablement avoir renseigné.

XV.B.5.1

lecture

READ

file-name

RECORD

[ [

[ INTO Identifier ]

[ WITH

KEPT NO IGNORE WAIT

LOCK ] ]

] [ KEY IS data-name-1 split-key-name-1

[ WITH SIZE

{ identifier-1 } { littéral-1 }

]

] [ [

INVAKID KEY NOT INVALID KEY

instructions impératives-3 . . . . . . ] instructions impératives-4 . . . . . . ]

END-READ

Rôle : Permet de lire directement l’article pour lequel on a rempli la zone « clé-primaire » (ou la clé secondaire si on utilise la clause KEY IS ). Règles de fonctionnement :



La clause INVALID KEY doit être spécifiée si on n’a pas mis de phrase USE.. ♦ La phrase WITH LOCK ne peut être spécifiée que lorsqu’ un simple article a été verrouillé en manuel pour un fichier partageable. (si le fichier est ouvert en I-O le système n’accède à l’article verrouillé que si la phrase WITH LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternates clés qui autorisent des doubles.) ♦ WITH NO LOCK n’est permis que lorsque les articles ont été verrouillés en manuel ou automatique dans un fichier partageable. [partageable <=> on n’a pas mis la clause WITH LOCK EXCLUSIVE dans la phrase select ] ♦ WITH KEPT LOCK ne peut être spécifié que si des articles multiples ont été verrouillés manuellement dans un fichier partageable. (si le fichier est ouvert en I-O le système accède aux articles verrouillés que si la phrase WITH KEPT LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternate clés qui autorisent des doubles.) ♦

La clause WITH WAIT permet de donner au système le temps nécéssaire pour vérifier si un article est verrouillé.



La clause IGNORE LOCK permet au READ de s’exécuter comme si l’article n’était pas verrouillé.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 21

ESAT-DI

[LRE]

Cours CBL-85

page XV-22

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus



Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le fileposition-indicator indique que l’article suivant n’a pas été trouvé). L’exécution d’un verbe READ met toujours à jour le file status.



Data-name doit être une zone décrite en FD. Data-name est généralement le nom d’une clé décrite en FD( primaire ou secondaire ; NB : habituellement on met le nom d’une clé secondaire car pour accéder à un article par la clé primaire , cette clause key n’est pas obligatoire). Data-name peut aussi être une redéfinition de la clé primaire ou une partie de cette zone. La clé citée par data-name doit être remplie avec une valeur avant de faire le READ.



• •

Si un fichier décrit avec OPTIONAL est non présent (à l’ouverture) , on passe par AT END au moment du READ.

avant l’exécution d ‘un READ , il faut nécéssairement que le fichier ait été ouvert en INPUT ou en I-O (cf tableau au parag. B32)

Quand on fait plusieurs descriptions logiques des enregistrements du fichier (plusieurs niveaux 1 en FD ) , en mémoire une seule zone est générée qui est utilisée par les différents types d’articles (plusieurs niveaux 1 en FD ==> redéfinition implicite de la même zone ). C’est l’exécution du verbe READ qui permet de remplir cette zone mémoire (appelée ZE zone d’entrée du fichier ou Record Area) Chaque instruction READ réussie remplit cette zone en écrasant le contenu précédent. ♦ INTO qui permet de ranger l’article lu dans la zone nommée par « identifier » (= nom-donnée) ne doit pas être utilisé si on a des articles de longueur variable. Même s’il y a la clause INTO , l’article lu est stocké dans sa zone d’entrée (=Record Area = le niveau 1 en FD = ZE ). L’utilisation d’un READ ... INTO est équivalente à un read simple suivi d’un MOVE de la zone d’entrée dans la zone citée après into : si l’exécution du read ..into est un échec , le move n’est pas réalisé et la zone « into » garde son contenu initial.



Si la phrase KEY n’est pas spécifiée , c’est la clé primaire qui est choisie par défaut.

♦ Quand la lecture s’est déroulée correctement , le file-position-indicator est positionné sur l’article trouvé ; si aucun article n’a de clé avec la valeur fournie , on passe par INVALID KEY.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 22

ESAT-DI

[LRE]

page XV-23

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.5.2

écriture

format n° 1 utilisable en accès random :

WRITE [ [

record-name

[ FROM Identifier-1 ] littéral-1

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-WRITE Rôle : permet d’écrire directement l’article pour lequel on a rempli la clé primaire. C’est l’instruction à utiliser pour faire des créations sur un fichier existant lorsqu’on travaille en mode RANDOM (ou dynamique). Règles de fonctionnement : ♦ WRITE record-name FROM nom-donnée name

est équivalent à

MOVE nom-donnée to record-name + WRITE record-

♦ identifier-1 est soit un nom-donnée décrit en data division (différent de record-name) soit un identificateur de fonction alphanumérique (FUNCTION arguments ...). ♦ record-name est le nom de la ZS (zone de sortie du fichier ou Record area = niveau 1 en FD ; pour un fichier en lecture on appelle cette zone ZE= zone d’entrée et pour un fichier sur lequel on veut écrire on la nomme ZS= Zone de sortie). ♦ L’exécution d’un write met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié). Si un write échoue , la procédure mentionnée éventuellement dans une phrase USE est exécutée.



La clause INVALID KEY est obligatoire (si on n’a pas prévu de phrase USE).



Pour faire un write il faut avoir ouvert le fichier en OUTPUT ou I-O ( EXTEND.ne fonctionne qu’ en mode séquentiel)

♦ L’article écrit par l’exécution d’un WRITE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD) si le fichier a fait l’objet d’une clause « SAME AREA » en I-O-CONTROL ou si le write a échoué par une condition INVALID KEY.

♦ Avant de faire un WRITE , il faut avoir rempli la zone clé-primaire. Au moment de l’exécution du WRITE , le système utilise la clé primaire pour faire la création : celle-ci doit être unique. En mode direct ou dynamique on peut écrire les articles dans n’importe quel ordre. ♦

On passe par INVALID KEY dans les cas suivants : ∗ quand l’article ayant la valeur de la clé primaire fournie existe déjà dans le fichier. ∗ Quand on veut créer un article avec une clé secondaire qui existe déjà et que les doubles n’ont pas été autorisés. ∗ quand il y a un problème de dépassement de limite ( ex :plus assez de place pour créer un nouvel article).

[NB : en cas de problème avec des entrées-sorties sur des articles verrouillés : CF les directives de compilation WRITE-LOCK et FDCLEAR ainsi que les run-time switches N et T]

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 23

ESAT-DI

[LRE]

page XV-24

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

format n° 2 utilisable en accès random:

REWRITE record-name [ [

[ FROM Identifier-1 ] littéral-1

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-REWRITE Rôle : Cette instruction permet de «ré-écrire» et donc remplacer ( =>après l’avoir modifié ) l’article pour lequel on a rempli la zone clé-primaire. [En mode RANDOM (ou dynamique) , avant de faire un REWRITE , il faut avoir rempli la zone clé-primaire pour choisir directement l’article à modifier.] Règles de fonctionnement : ♦

Pour utiliser REWRITE le fichier doit être ouvert en I-O.

♦ REWRITE record-name FROM nom-donnée record-name

est équivalent à

MOVE nom-donnée to record-name + REWRITE

♦ identier-1 est soit un nom-donnée décrit en data division (différent de record-name) soit un identificateur de fonction alphanumérique (FUNCTION .arguments ...). ♦ record-name est le nom de la ZS (zone de sortie du fichier ou Record area = niveau 1 en FD ; pour un fichier en lecture on appelle cette zone ZE= zone d’entrée et pour un fichier sur lequel on veut écrire on la nomme ZS= Zone de sortie). ♦ L’exécution d’un REWRITE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié). Si un rewrite échoue , la procédure mentionnée éventuellement dans une phrase USE est exécutée.



La clause INVALID KEY est obligatoire..

♦ L’article écrit par l’exécution d’un REWRITE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD) si le fichier a fait l’objet d’une clause « SAME AREA » en I-O-CONTROL ou si le rewrite a échoué par une condition INVALID KEY.

♦ Au moment de l’exécution du REWRITE , le système utilise la clé primaire pour faire l ‘écriture de remplacement : celle-ci doit exister dans le fichier (sinon : INVALID KEY). ♦

On passe par INVALID KEY dans les cas suivants : ∗ quand l’article ayant la valeur de clé primaire choisie n’existe pas dans le fichier. ∗ Quand on veut créer un article avec une clé secondaire qui existe déjà et que les doubles n’ont pas été autorisés.

[NB : en cas de problème avec des entrées-sorties sur des articles verrouillés : CF les directives de compilation WRITE-LOCK et FDCLEAR ainsi que les run-time switches N et T. un rewrite sur un article verrouillé echoue]

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 24

ESAT-DI

[LRE]

page XV-25

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.5.3

effacement

DELETE [ [

file-name

RECORD

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-DELETE

Rôle : Cette instruction sert à effacer l’article pour lequel on a rempli la zone clé-primaire. Avant de faire un DELETE , en mode RANDOM (ou dynamique) , il faut avoir renseigné la zone clé-primaire pour choisir directement l’article à effacer. On peut effacer les articles dans n’importe quel ordre. Règles de fonctionnement : ♦

Pour utiliser DELETE le fichier doit être ouvert en I-O.



L’exécution d’un DELETE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié).



La clause INVALID KEY est obligatoire.



L’article effacé par DELETE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD).



L’article à effacer ne doit pas être verrouillé.



On passe par INVALID KEY dans les cas suivants : ∗ quand l’article ayant la valeur de la clé primaire fixée n’existe pas dans le fichier.

NB : effacement d’un fichier complet :

DELETE FILE

{file-name-1} . . . .

Ne pas confondre le format précédent avec ceui-ci qui permet d’effacer complètement (et physiquement ) tous les fichiers cités à condition que ceux-ci aient été préalablement fermés. (ne fonctionne pas si ils ont été fermés avec CLOSE WITH LOCK)

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 25

ESAT-DI

[LRE]

page XV-26

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.6

Entrée-sortie (I-O) en mode d’accès dynamique (DYNAMIC)

Ce mode permet de travailler à la fois en « séquentiel » et en accès direct : il offre donc les mêmes outils que le mode précédent avec la possibilité supplémentaire d’utiliser les verbes READ . . .NEXT . . .AT END . . . et START du mode séquentiel.

XV.B.6.1

lecture

format n° 1 utilisable en accès dynamique

READ

file-name [

[ [

NEXT PREVIOUS

RECORD

[ INTO Identifier ]

[ WITH

KEPT NO IGNORE WAIT

LOCK ] ]

AT END instructions impératives-1 . . . . . . ] NOT AT END instructions impératives-2 . . . . . . ]

END-READ

Rôle : Permet de lire les articles séquentiellement dans l’ordre croissant des clés primaires.(on n’a aucune clé à remplir : tout se passe comme si on lisait un fichier séquentiel.). Permet aussi de lire séquentiellement les articles dans l’ordre croissant d’une clé secondaire choisie à condition d’avoir fait avant un START ou un READ-direct (format n° 2) pour commencer la lecture à partir d’un certain article : dans ce cas , la clé choisie devient clé de reférence pour les READ NEXT suivants. Règles de fonctionnement :



La clause AT END doit être spécifiée si on n’a pas mis de phrase USE.. ♦ La phrase WITH LOCK ne peut être spécifiée que lorsqu’ un simple article a été verrouillé en manuel pour un fichier partageable. (si le fichier est ouvert en I-O le système n’accède à l’article verrouillé que si la phrase WITH LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternates clés qui autorisent des doubles.) ♦ WITH NO LOCK n’est permis que lorsque les articles ont été verrouillés en manuel ou automatique dans un fichier partageable. [partageable <=> on n’a pas mis la clause WITH LOCK EXCLUSIVE dans la phrase select ] ♦ WITH KEPT LOCK ne peut être spécifié que si des articles multiples ont été verrouillés manuellement dans un fichier partageable. (si le fichier est ouvert en I-O le système accède aux articles verrouillés que si la phrase WITH KEPT LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternate clés qui autorisent des doubles.) ♦

La clause WITH WAIT permet de donner au système le temps nécéssaire pour vérifier si un article est verrouillé.



La clause IGNORE LOCK permet au READ de s’exécuter comme si l’article n’était pas verrouillé.



En mode d’accès dynamique NEXT n’est pas facultatif.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 26

ESAT-DI

[LRE]

page XV-27

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus



Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le fileposition-indicator indique que l’article suivant n’a pas été trouvé). L’exécution d’un verbe READ met toujours à jour le file status. ♦

Si un fichier décrit avec OPTIONAL est non présent (à l’ouverture) , on passe par AT END au moment du READ.



NB : PREVIOUS pour lire le précédent n’est utilisable qu’en mode d’accès dynamique.



Ce read délivre les articles dans l’ordre des clés primaires (on n’a aucune clé à remplir) ou dans l’ordre croissant d’une clé secondaire ayant fait l’objet préalablement d’un START ou d’un READ direct (format suivant).

• •

Si on fait un READ PREVIOUS et qu’il n’existe pas de précédent , on passe par AT END (NB attention l’option previous est spécifique au cobol micro-focus) et le READ est considéré comme ayant échoué.

avant l’exécution d ‘un READ , il faut nécéssairement que le fichier ait été ouvert en INPUT ou en I-O (cf tableau au parag. B32)

Quand on fait plusieurs descriptions logiques des enregistrements du fichier (plusieurs niveaux 1 en FD ) , en mémoire une seule zone est générée qui est utilisée par les différents types d’articles (plusieurs niveaux 1 en FD ==> redéfinition implicite de la même zone ). C’est l’exécution du verbe READ qui permet de remplir cette zone mémoire (appelée ZE zone d’entrée du fichier ou Record Area) Chaque instruction READ réussie remplit cette zone en écrasant le contenu précédent. ♦ INTO qui permet de ranger l’article lu dans la zone nommée par « identifier » (= nom-donnée) ne doit pas être utilisé si on a des articles de longueur variable. Même s’il y a la clause INTO , l’article lu est stocké dans sa zone d’entrée (=Record Area = le niveau 1 en FD = ZE ). L’utilisation d’un READ ... INTO est équivalente à un read simple suivi d’un MOVE de la zone d’entrée dans la zone citée après into : si l’exécution du read ..into est un échec , le move n’est pas réalisé et la zone « into » garde son contenu initial. ♦ Au moment de l’exécution d’un READ (en mode d’accès séquentiel , read signifie lire le suivant) , si le file-position-indicator indique qu’il n’y a pas d’article logique suivant à lire ou que le fichier optional n’est pas présent :





une valeur est placée dans le file-status indiquant la condition fin de fichier.



si la clause AT END a été spécifiée , les instructions impératives-1 sont exécutées ( et aucune USE AFTER EXCEPTION procedure n’est exécutée) puis le programme se poursuit séquentiellement à partir du END-READ.



Si la clause AT END n’est pas spécifiée , c’est la USE ..procédure qui est lancée puis le programme se poursuit séquentiellement à partir du END-READ.



Quand on passe par AT END , le READ est considéré comme en échec (le file status <> 0 le prouve ). Dans ce cas , le contenu de la zone d’entrée est indéterminé.

Quand la fin de fichier n’est pas atteinte lors de l’exécution du READ (pas de passage par AT END) ∗

le file-position-indicator est mis à jour.



S’il y a une condition d’exception (autre que la fin de fichier) , la procédure USE .. s’exécute.



S’il n’y a pas de condition d’exception ,l’article est rangé dans la zone d’entrée (record area) puis le programme se poursuit séquentiellement à partir des instructions-impératives-2 si NOT AT END est spécifié ou à partir du END-READ dans le cas contraire.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 27

ESAT-DI

[LRE]

page XV-28

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

♦ Après un READ qui tente de lire un article verrouillé , le file-position-indicator reste pointé sur cet article : les read next ou previous suivants continuent à agir sur le même enregistrement. Les instructions de la phrase NOT AT END ne sont exécutées que si READ a réussi complètement. ♦ NB (???) Quand la condition de fin de fichier a été décelée (=> au moment de la lecture du dernier enregistrement ) l’instruction suivante doit être un READ . . .NEXT car PREVIOUS ne peut plus fonctionner pas car l’article logique précédent n’existe pas .

NB : PROBLEME DE LAFINDE FICHIER

ENREGISTREMENT N°1 ENREGISTREMENT N°2 . . .

ENREGISTREMENT N-1 DERNIER ENREGISTREMENT

FINDE FICHIER

pour bien comprendre les problèmes de fin-de-fichier , il faut considérer qu'il y a un article supplémentaire nommé FIN DE FICHIER La lecture du dernier article se déroule normalement ; on passe par la clause AT END lorsqu'on veut lire le suivant.



Après être passé par AT END , on peut faire OPEN + CLOSE ou START si on veut continuer à travailler sur le fichier.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 28

ESAT-DI

[LRE]

page XV-29

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

format n° 2 utilisable en accès dynamique

READ

file-name

RECORD

[ [

[ INTO Identifier ]

[ WITH

KEPT NO IGNORE WAIT

LOCK ] ]

] [ KEY IS data-name-1 split-key-name-1

[ WITH SIZE

{ identifier-1 } { littéral-1 }

]

] [ [

INVAKID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-READ

Rôle : Permet de lire directement l’article pour lequel on a rempli la zone « clé-primaire » (ou la clé secondaire si on utilise la clause KEY IS ). [c’est le READ de l’accès RANDOM ] Règles de fonctionnement :



La clause INVALID KEY doit être spécifiée si on n’a pas mis de phrase USE.. ♦ La phrase WITH LOCK ne peut être spécifiée que lorsqu’ un simple article a été verrouillé en manuel pour un fichier partageable. (si le fichier est ouvert en I-O le système n’accède à l’article verrouillé que si la phrase WITH LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternates clés qui autorisent des doubles.) ♦ WITH NO LOCK n’est permis que lorsque les articles ont été verrouillés en manuel ou automatique dans un fichier partageable. [partageable <=> on n’a pas mis la clause WITH LOCK EXCLUSIVE dans la phrase select ] ♦ WITH KEPT LOCK ne peut être spécifié que si des articles multiples ont été verrouillés manuellement dans un fichier partageable. (si le fichier est ouvert en I-O le système accède aux articles verrouillés que si la phrase WITH KEPT LOCK est mentionnée : un simple read ne permet pas cet accès. Pour lire l’article suivant du verrouillé , , le file-position-indicator doit être modifié par START mais ensuite , on ne peut plus accéder aux alternate clés qui autorisent des doubles.) ♦

La clause WITH WAIT permet de donner au système le temps nécéssaire pour vérifier si un article est verrouillé.



La clause IGNORE LOCK permet au READ de s’exécuter comme si l’article n’était pas verrouillé.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 29

ESAT-DI

[LRE]

Cours CBL-85

page XV-30

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus



Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le fileposition-indicator indique que l’article suivant n’a pas été trouvé). L’exécution d’un verbe READ met toujours à jour le file status.



Data-name doit être une zone décrite en FD. Data-name est généralement le nom d’une clé décrite en FD( primaire ou secondaire ; NB : habituellement on met le nom d’une clé secondaire car pour accéder à un article par la clé primaire , cette clause key n’est pas obligatoire). Data-name peut aussi être une redéfinition de la clé primaire ou une partie de cette zone. La clé citée par data-name doit être remplie avec une valeur avant de faire le READ.



• •

Si un fichier décrit avec OPTIONAL est non présent (à l’ouverture) , on passe par AT END au moment du READ.

avant l’exécution d ‘un READ , il faut nécéssairement que le fichier ait été ouvert en INPUT ou en I-O (cf tableau au parag. B32)

Quand on fait plusieurs descriptions logiques des enregistrements du fichier (plusieurs niveaux 1 en FD ) , en mémoire une seule zone est générée qui est utilisée par les différents types d’articles (plusieurs niveaux 1 en FD ==> redéfinition implicite de la même zone ). C’est l’exécution du verbe READ qui permet de remplir cette zone mémoire (appelée ZE zone d’entrée du fichier ou Record Area) Chaque instruction READ réussie remplit cette zone en écrasant le contenu précédent. ♦ INTO qui permet de ranger l’article lu dans la zone nommée par « identifier » (= nom-donnée) ne doit pas être utilisé si on a des articles de longueur variable. Même s’il y a la clause INTO , l’article lu est stocké dans sa zone d’entrée (=Record Area = le niveau 1 en FD = ZE ). L’utilisation d’un READ ... INTO est équivalente à un read simple suivi d’un MOVE de la zone d’entrée dans la zone citée après into : si l’exécution du read ..into est un échec , le move n’est pas réalisé et la zone « into » garde son contenu initial.



Si la phrase KEY n’est pas spécifiée , c’est la clé primaire qui est choisie par défaut.

♦ Quand la lecture s’est déroulée correctement , le file-position-indicator est positionné sur l’article trouvé ; si aucun article n’a de clé avec la valeur fournie , on passe par INVALID KEY.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 30

ESAT-DI

[LRE]

page XV-31

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.6.2

écriture

format n° 1 utilisable en accès dynamique :

WRITE [ [

record-name

[ FROM Identifier-1 ] littéral-1

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-WRITE

Rôle : permet d’écrire directement l’article pour lequel on a rempli la clé primaire. C’est l’instruction à utiliser pour faire des créations sur un fichier existant lorsqu’on travaille en mode DYNAMIC (ou random). Règles de fonctionnement : ♦ WRITE record-name FROM nom-donnée name

est équivalent à

MOVE nom-donnée to record-name + WRITE record-

♦ identifier-1 est soit un nom-donnée décrit en data division (différent de record-name) soit un identificateur de fonction alphanumérique (FUNCTION arguments ...). ♦ record-name est le nom de la ZS (zone de sortie du fichier ou Record area = niveau 1 en FD ; pour un fichier en lecture on appelle cette zone ZE= zone d’entrée et pour un fichier sur lequel on veut écrire on la nomme ZS= Zone de sortie). ♦ L’exécution d’un write met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié). Si un write échoue , la procédure mentionnée éventuellement dans une phrase USE est exécutée.



La clause INVALID KEY est obligatoire (si on n’a pas prévu de phrase USE).



Pour faire un write il faut avoir ouvert le fichier en OUTPUT ou I-O ( EXTEND.ne fonctionne qu’ en mode séquentiel)

♦ L’article écrit par l’exécution d’un WRITE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD) si le fichier a fait l’objet d’une clause « SAME AREA » en I-O-CONTROL ou si le write a échoué par une condition INVALID KEY.

♦ Avant de faire un WRITE , il faut avoir rempli la zone clé-primaire. Au moment de l’exécution du WRITE , le système utilise la clé primaire pour faire la création : celle-ci doit être unique. En mode direct ou dynamique on peut écrire les articles dans n’importe quel ordre. ♦

On passe par INVALID KEY dans les cas suivants : ∗ quand l’article ayant la valeur de la clé primaire fournie existe déjà dans le fichier. ∗ Quand on veut créer un article avec une clé secondaire qui existe déjà et que les doubles n’ont pas été autorisés. ∗ quand il y a un problème de dépassement de limite ( ex :plus assez de place pour créer un nouvel article).

[NB : en cas de problème avec des entrées-sorties sur des articles verrouillés : CF les directives de compilation WRITE-LOCK et FDCLEAR ainsi que les run-time switches N et T]

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 31

ESAT-DI

[LRE]

page XV-32

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

format n° 2 utilisable en accès dynamique :

REWRITE record-name [ [

[ FROM Identifier-1 ] littéral-1

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-REWRITE

Rôle : Cette instruction permet de «ré-écrire» et donc remplacer ( =>après l’avoir modifié ) l’article pour lequel on a rempli la zone clé-primaire. [En mode DYNAMIC (ou random) , avant de faire un REWRITE , il faut avoir rempli la zone clé-primaire pour choisir directement l’article à modifier.] Règles de fonctionnement : ♦

Pour utiliser REWRITE le fichier doit être ouvert en I-O.

♦ REWRITE record-name FROM nom-donnée record-name

est équivalent à

MOVE nom-donnée to record-name + REWRITE

♦ identifier-1 est soit un nom-donnée décrit en data division (différent de record-name) soit un identificateur de fonction alphanumérique (FUNCTION .arguments ...). ♦ record-name est le nom de la ZS (zone de sortie du fichier ou Record area = niveau 1 en FD ; pour un fichier en lecture on appelle cette zone ZE= zone d’entrée et pour un fichier sur lequel on veut écrire on la nomme ZS= Zone de sortie). ♦ L’exécution d’un REWRITE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié). Si un rewrite échoue , la procédure mentionnée éventuellement dans une phrase USE est exécutée.



La clause INVALID KEY est obligatoire..

♦ L’article écrit par l’exécution d’un REWRITE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD) si le fichier a fait l’objet d’une clause « SAME AREA » en I-O-CONTROL ou si le rewrite a échoué par une condition INVALID KEY.

♦ Au moment de l’exécution du REWRITE , le système utilise la clé primaire pour faire l ‘écriture de remplacement : celle-ci doit exister dans le fichier (sinon : INVALID KEY). ♦

On passe par INVALID KEY dans les cas suivants : ∗ quand l’article aynat la valeur de clé primaire choisie n’existe pas dans le fichier. ∗ Quand on veut créer un article avec une clé secondaire qui existe déjà et que les doubles n’ont pas été autorisés.

[NB : en cas de problème avec des entrées-sorties sur des articles verrouillés : CF les directives de compilation WRITE-LOCK et FDCLEAR ainsi que les run-time switches N et T. un rewrite sur un article verrouillé echoue]

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 32

ESAT-DI

[LRE]

page XV-33

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.6.3

effacement

DELETE [ [

file-name

RECORD

INVALID KEY NOT INVALID KEY

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-DELETE

Rôle : Cette instruction sert à effacer l’article pour lequel on a rempli la zone clé-primaire. Avant de faire un DELETE , en mode DYNAMIC (ou random) , il faut avoir renseigné la zone clé-primaire pour choisir directement l’article à effacer. On peut effacer les articles dans n’importe quel ordre. Règles de fonctionnement : ♦

Pour utiliser DELETE le fichier doit être ouvert en I-O.



L’exécution d’un DELETE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié).



La clause INVALID KEY est obligatoire.



L’article effacé par DELETE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD).



L’article à effacer ne doit pas être verrouillé.



On passe par INVALID KEY dans les cas suivants : ∗ quand l’article ayant la valeur de la clé primaire fixée n’existe pas dans le fichier.

NB : effacement d’un fichier complet :

DELETE FILE

{file-name-1} . . . .

Ne pas confondre le format précédent avec celui-ci qui permet d’effacer complètement (et physiquement ) tous les fichiers cités à condition que ceux-ci aient été préalablement fermés. (ne fonctionne pas si ils ont été fermés avec close WITH LOCK)

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 33

ESAT-DI

[LRE]

page XV-34

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.B.6.4

positionnement dans le fichier (START)

START

{ { { file-name KEY IS { { {

data-name-1 split-key-name-1

[ [

INVAKID KEY NOT INVALID KEY

= > NOT <

{ < NOT >

<=

ou alors EQUAL TO } ou alors GREATER THAN } ou alors NOT LESS THAN } >= ou alors GREATER THAN OR EQUAL TO ou alors LESS THAN } ou alors NOT GREATER THAN } ou alors LESS THAN OR EQUAL TO

[ WITH SIZE

{ identifier-1 } { littéral-1 }

} }

]

instructions impératives-1 . . . . . . ] instructions impératives-2 . . . . . . ]

END-START

Rôle : Sert à se positionner dans le fichier à partir d’une valeur de clé (primaire ou secondaire*). Il faut avoir rempli la clé concernée préalablement avec la valeur choisie. Le START ne fait pas de lecture : pour accéder au premier enregistrement correspondant à la clé choisie , il faut faire un READ. Tous les READ . . . NEXT qui suivent un START délivrent les articles en ordre croissant sur la clé choisie (primaire ou secondaire) au moment du START. La clé choisie au moment du START devient la clé de référence pour les instructions READ NEXT ou PREVIOUS qui suivent. [* NB (?!?) : certaines documentations COBOL indiquent que START ne fonctionne qu’avec la clé primaire.] Règles de fonctionnement :

Data-name-1 est le nom de la clé primaire ou secondaire définie dans la phrase select et dans la description de la zone « record » en niveau 1 en FD. ♦

Data-name-1 peut également être une partie (gauche) de clé (zone sous-groupe ou élémentaire composant cette clé). [CF les exemples aux paragraphes C2 C5 C7] ♦

La notion de clé concaténée (split-key-name) est spécifique à cobol-micro-focus.

♦ WITH SIZE indique le nombre de caractères à prendre en compte dans la clé.(dans ce cas identifier-1 doit être une zone élémentaire numérique). ♦

Si le phrase KEY est spécifiée , data-name-1 doit être une zone décrite en FD.



Pour utiliser START , le fichier doit être ouvert en input ou I-O.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 34

ESAT-DI

[LRE]

Cours CBL-85

page XV-35

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

♦ Si la phrase KEY n’est pas spécifiée c’est la condition = (ou EQUAL TO) qui est prise par défaut. ♦ La clause INVALID KEY est obligatoire (si aucune phrase USE n’a été spécifiée en déclaratives). ♦

l’exécution du START met à jour le file status.



Le START ne trouve jamais les articles verrouillés.

♦ Quand l’opérateur de comparaison est = ou > ou >= , le file-position-indicator pointe sur le premier article qui satisfait la condition. Quand l’opérateur de comparaison est < ou <= , le file-position-indicator pointe sur le dernier article logique qui satisfait la condition. Si cette clé a des doubles , le file-position-indicator pointe sur la dernière de ces entrées.

♦ Si aucun article ne satisfait la condition , on passe par INVALID KEY (le file-position-indicator a alors une valeur indéterminée). ♦

Cours de COBOL-85

Si la clause KEY n’est pas mentionnée , c’est la clé primaire qui est utilisée.

L’organisation séquentielle-indexée

Chapître XV -

page 35

ESAT-DI

[LRE]

page XV-36

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C Exercices - exemples

XV.C.1

jeu d’essai utilisé dans les exemples

N° GRADE cléP clé S 3246 3310 3320 3328 3362 3363 3375 3376 3402 3487 3522 3537 3539 3552 3556 3558 3644 3650 3651 3671 3695 3696 3869 5203 5206 5261 5263 5330 5364 5374 5428 5567

sch maj p1 sgt cch maj adc gv adc adc adj adj sch cne sch adc cne adc is cba cce ate ccn cne aa sch sgt adj adc cch adc sgt

NOM clé S

MIRAMON/DEVI. JAOUEN . ADAM . LABAT . ANDRE/MARTIN. ALLAIN . LATEUR . KARMANN . LAVOISIER . BELMONTE . MEAU . MADEC . ALLAIN . LE DARZ . LE DAIN . LE DAIN . L'HUILLIER . MARTIN . LAFARGUE . LAVALLARD . BENOIT . ALLAN . LE DAIN . MAHIEU . AMBROIS . ANGIBAULT . MERCERON . ANEN . ANDREI . LE BOUBENNEC. ANDRE . ANGIBAUD .

Cours de COBOL-85

PRÉNOM clé S damiene . bernard . michel . eric . emilienn. louis . jean-pie. daniel . ronald . jean-man. marie-pa. alain . patrick . patrick . jean-luc. dominiqu. marcel . yves . jean-pie. michel . claude . yvan . michèle . jacques . isabelle. patrick . thierry . patrick . jean-fra. claudine. marcel . pierre .

FONCTION clé S superviseur . officier m c. brocheur-en-. cellule effe. services tec. adjoint ante. chef service. plombier . cellule stag. moniteur epm. instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . chef-section. section appa. chef de site. officiersupé. secrétariat . centre nodal. centre nodal. gérant cercl. chef atelier. sectétaire a. instructeur . armurier .

SERVICE clé S détachemen. dgar/cs/sa. dgar/cs/sa. dgar/cs/b.. dgar/cs/st. dgar/cs/st. dgar/cs/sg. dgar/cs/sg. dgf /cs/bf. dgf /cs/ds. dgar/cs/dr. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/df. dgf /cs/df. dgf /cs/ds. cdt /lvl/o. cdt /lvl . 2cie/lvl . 2cie/lvl . dgar/lvl/s. dgar/lvl/s. dgar/lvl/a. dgf /lvl/d. ucl /lvl .

SITE clé S Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Laval . Laval . Laval . Laval . Laval . Laval . Laval . Laval . Laval .

L’organisation séquentielle-indexée

Chapître XV -

page 36

ESAT-DI

[LRE]

page XV-37

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.2

consultation en mode séquentiel à partir d’une clé secondaire IDENTIFICATION DIVISION. PROGRAM-ID. listind. AUTHOR. IC lre. environment division. input-output section. file-control. select fimpri assign to "c:\laf\cobol\indexe\resu1.txt". select fcadres assign to "c:\laf\cobol\indexe\cadres.don" organization indexed access sequential record key is btph alternate record key bnom with duplicates alternate record key bgrade with duplicates alternate record key bfonction with duplicates alternate record key bservice with duplicates alternate record key bsite with duplicates file status wst. DATA DIVISION. file section. fd fimpri linage is 30. 1 sligne pic x(80). fd fcadres. 1 benreg. 3 btph 3 bgrade 3 bnom 3 bprenom 3 bfonction 3 bservice 3 bsite

pic xxxx. pic xxxx. pic x(25). pic x(20). pic x(30). pic x(30). pic x(20).

WORKING-STORAGE SECTION. 77 wctf pic 9 value 0. 88 ff value 1. 77 wchoix pic x(25) value "LAG". 1 wst. 3 wstk1 pic x. 3 wstk2. 5 wstkbin pic 99 comp-x.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 37

ESAT-DI

[LRE]

Cours CBL-85

page XV-38

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

PROCEDURE DIVISION. debut. open input fcadres output fimpri move "liste des personnes dont le nom est >= à" to sligne move wchoix to sligne(43:) write sligne move spaces to sligne write sligne after 3 move wchoix to bnom start fcadres key is >= bnom invalid key display "je n'ai trouvé personne" " avec un nom > = " wchoix not invalid key read fcadres next record at end set ff to true end-read perform until ff move bnom to sligne move bprenom to sligne(30:) write sligne read fcadres next record at end set ff to true end-read end-perform end-start move "fin de fichier" to sligne move "file status = " to sligne(15:) move wst to sligne(30:) write sligne after 3 close fcadres fimpri stop run. résultat obtenu :

liste des personnes dont le nom est >=

LATEUR LAVALLARD LAVOISIER LE BOUBENNEC LE DAIN LE DAIN LE DAIN LE DARZ MADEC MAHIEU MARTIN MEAU MERCERON MIRAMON/DEVILLE fin de fichier

Cours de COBOL-85

à LAG

jean-pierre michel ronald claudine michèle jean-luc dominique patrick alain jacques yves marie-paule thierry damiene file status = 10

L’organisation séquentielle-indexée

Chapître XV -

page 38

ESAT-DI

[LRE]

page XV-39

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.3

création d’un séquentiel-indéxé (avec SPLIT KEY)

IDENTIFICATION DIVISION. PROGRAM-ID. creind . AUTHOR. IC LAFARGUE. environment division. input-output section. file-control. select fentree assign to "c:\laf\cobol\indexe\cadres.dat". select

fcadres assign to "c:\laf\cobol\indexe\person.don" organization indexed access sequential record key is btph alternate record key bnom with duplicates alternate record key bgrade with duplicates alternate record key split-k1 = bgrade bfonction with duplicates alternate record key split-k2 = bgrade bdeb-nom with duplicates alternate record key bservice with duplicates alternate record key bsite with duplicates file status wst. SELECT Ftri ASSIGN TO disk sort STATUS wst.

DATA DIVISION. fd fentree. 1 eenreg pic x(133). fd fcadres. 1 benreg. 3 btph 3 bgrade 3 bnom. 5 bdeb-nom 5 3 bprenom 3 bfonction 3 bservice 3 bsite sd ftri. 1 tenreg. 3 ttph 3 tgrade 3 tnom 3 tprenom 3 tfonction 3 tservice 3 tsite

pic xxxx. pic xxxx. pic pic pic pic pic pic

xx. x(23). x(20). x(30). x(30). x(20).

pic xxxx. pic xxxx. pic x(25). pic x(20). pic x(30). pic x(30). pic x(20).

WORKING-STORAGE SECTION. 77 wctf pic 9 value 0. 88 ff value 1. 77 wstk2-9 pic z(3) value 0. 1 wst. 3 wstk1 pic x. 3 wstk2. 5 wstkbin pic 99 comp-x.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 39

ESAT-DI

[LRE]

Cours CBL-85

page XV-40

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

PROCEDURE DIVISION. tri section. debut. sort ftri on ascending key ttph using fentree output procedure creation-sans-giving stop run. creation-sans-giving section. debut. open output fcadres return ftri at end set ff to true display "fichier tri vide ??" end-return perform until ff write benreg from tenreg invalid key display "erreur de création pour " ttph " " tnom " " tprenom move wstk2 to wstk2-9 display "avec file status = " wst(1:1) "-" wstk2-9 end-write return ftri at end set ff to true end-return end-perform close fcadres.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 40

ESAT-DI

[LRE]

page XV-41

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.4

création d’un séquentiel-indexé (directement par un tri USING-GIVING)

IDENTIFICATION DIVISION. PROGRAM-ID. cregiv . AUTHOR. IC LAFARGUE. environment division. input-output section. file-control. select fentree assign to "c:\laf\cobol\indexe\cadres.dat". select

fcadres assign to "c:\laf\cobol\indexe\cadres.don" organization indexed access sequential record key is btph alternate record key bnom with duplicates alternate record key bgrade with duplicates alternate record key bfonction with duplicates alternate record key bservice with duplicates alternate record key bsite with duplicates.

SELECT

Ftri

ASSIGN TO disk.

DATA DIVISION. file section. fd fentree. 1 eenreg pic x(133). fd fcadres. 1 benreg. 3 btph pic xxxx. 3 bgrade pic xxxx. 3 bnom. 5 bdeb-nom pic xx. 5 pic x(23). 3 bprenom pic x(20). 3 bfonction pic x(30). 3 bservice pic x(30). 3 bsite pic x(20). sd ftri. 1 tenreg. 3 ttph pic xxxx. 3 pic x(129). PROCEDURE DIVISION. tri section. debut. sort ftri on ascending key ttph using fentree giving fcadres stop run.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 41

ESAT-DI

[LRE]

page XV-42

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.5

exemples de START (mode séquentiel)

IDENTIFICATION DIVISION. PROGRAM-ID. start1. AUTHOR. IC lre. environment division. input-output section. file-control. select

fimpri

assign to wresu.

select

fcadres assign to "c:\laf\cobol\indexe\cadres.don" organization indexed access sequential record key is btph alternate record key bnom with duplicates alternate record key bgrade with duplicates alternate record key bfonction with duplicates alternate record key bservice with duplicates alternate record key bsite with duplicates file status wst.

DATA DIVISION. file section. fd fimpri linage is 30. 1 sligne pic x(80). fd fcadres. 1 benreg. 3 btph. 5 bdebut-cle-primaire pic xx. 5 pic xx. 3 bgrade pic xxxx. 3 bnom. 5 bdebut-nom pic xxx. 5 pic x(22). 3 bprenom pic x(20). 3 bfonction pic x(30). 3 bservice pic x(30). 3 bsite pic x(20). WORKING-STORAGE SECTION. 77 wctf pic 9 value 0. 88 ff value 1. 77 wchoix pic x(25) value "LAG". 1 wzone-test-start pic 9 value 0. 1 wresu pic x(65) value "c:\laf\cobol\indexe\restart?.txt". 1 werreur-start pic 9 value 0. 88 erreur-start value 1. 1 wbnum1 pic xxxx value "3500". 1 wbnum2 pic x(6) value "36". 1 wst. 3 wstk1 pic x. 3 wstk2. 5 wstkbin pic 99 comp-x.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 42

ESAT-DI

[LRE]

Cours CBL-85

page XV-43

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus PROCEDURE DIVISION. debut. display "donnez un n° (0,1,2,3)" at line 24 col 1 accept wzone-test-start at line 24 col 40 move wzone-test-start to wresu(28:1) open input fcadres output fimpri write sligne from " liste des cas sélectionnés" move spaces to sligne write sligne after 3 evaluate wzone-test-start when 0 move wchoix to bnom start fcadres key is > bnom invalid key set erreur-start to true end-start when 1 move "LE " to bdebut-nom start fcadres key is < bdebut-nom invalid key set erreur-start to true end-start when 2 move "53" to bdebut-cle-primaire start fcadres key is = bdebut-cle-primaire invalid key set erreur-start to true end-start when 3 move "52" to btph start fcadres key is > btph invalid key set erreur-start to true end-start end-evaluate if not erreur-start then read fcadres next record at end set ff to true end-read perform until ff move "n° de téléphone=" to sligne move btph to sligne(17:4) move bnom to sligne(22:) move bprenom to sligne(58:) write sligne read fcadres next record at end set ff to true end-read end-perform move "fin de fichier" to sligne move "file status = " to sligne(15:) move wst to sligne(30:) write sligne after 3 else display "erreur avec le start-cas-" wzone-test-start end-if close fcadres fimpri stop run.

résultats obtenus dans le fichier restart0.txt : liste des cas sélectionnés n° n° n° n° n° n° n° n° n° n° n° n°

de de de de de de de de de de de de

téléphone=3375 téléphone=3671 téléphone=3402 téléphone=5374 téléphone=3556 téléphone=3558 téléphone=3869 téléphone=3552 téléphone=3537 téléphone=5203 téléphone=3650 téléphone=3522

Cours de COBOL-85

LATEUR LAVALLARD LAVOISIER LE BOUBENNEC LE DAIN LE DAIN LE DAIN LE DARZ MADEC MAHIEU MARTIN MEAU

jean-pierre michel ronald claudine jean-luc dominique michèle patrick alain jacques yves marie-paule L’organisation séquentielle-indexée

Chapître XV -

page 43

ESAT-DI

[LRE]

Cours CBL-85

page XV-44

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus n° de téléphone=5263 MERCERON n° de téléphone=3246 MIRAMON/DEVILLE fin de fichier file status = 10

Cours de COBOL-85

thierry damiene

L’organisation séquentielle-indexée

Chapître XV -

page 44

ESAT-DI

[LRE]

Cours CBL-85

page XV-45

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

résultats obtenus dans le fichier restart1.txt : liste des cas sélectionnés

n° n° n° n° n° n° n° n° n° n° n° n°

de de de de de de de de de de de de

téléphone=3402 téléphone=5374 téléphone=3556 téléphone=3558 téléphone=3869 téléphone=3552 téléphone=3537 téléphone=5203 téléphone=3650 téléphone=3522 téléphone=5263 téléphone=3246

LAVOISIER LE BOUBENNEC LE DAIN LE DAIN LE DAIN LE DARZ MADEC MAHIEU MARTIN MEAU MERCERON MIRAMON/DEVILLE

fin de fichier file status =

ronald claudine jean-luc dominique michèle patrick alain jacques yves marie-paule thierry damiene

10

résultats obtenus dans le fichier restart2.txt : liste des cas sélectionnés

n° n° n° n° n°

de de de de de

téléphone=5330 téléphone=5364 téléphone=5374 téléphone=5428 téléphone=5567

ANEN ANDREI LE BOUBENNEC ANDRE ANGIBAUD

fin de fichier file status =

patrick jean-françois claudine marcel pierre

10

résultats obtenus dans le fichier restart3.txt : liste des cas sélectionnés

n° n° n° n° n° n° n° n° n°

de de de de de de de de de

téléphone=5203 téléphone=5206 téléphone=5261 téléphone=5263 téléphone=5330 téléphone=5364 téléphone=5374 téléphone=5428 téléphone=5567

MAHIEU AMBROIS ANGIBAULT MERCERON ANEN ANDREI LE BOUBENNEC ANDRE ANGIBAUD

fin de fichier file status =

Cours de COBOL-85

jacques isabelle patrick thierry patrick jean-françois claudine marcel pierre

10

L’organisation séquentielle-indexée

Chapître XV -

page 45

ESAT-DI

[LRE]

page XV-46

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.6

restructuration d’un séquentiel-indexé

IDENTIFICATION DIVISION. PROGRAM-ID. restruc. AUTHOR. IC LAFARGUE. environment division. input-output section. file-control. select

fcadres assign to "c:\laf\cobol\indexe\cadres.don" organization indexed access sequential record key is btph alternate record key bnom with duplicates alternate record key bgrade with duplicates alternate record key bfonction with duplicates alternate record key bservice with duplicates alternate record key bsite with duplicates file status wst. SELECT Ftri ASSIGN TO disk sort STATUS wst.

DATA DIVISION. file section. fd fcadres. 1 benreg. 3 btph pic xxxx. 3 bgrade pic xxxx. 3 bnom. 5 bdeb-nom pic xx. 5 pic x(23). 3 bprenom pic x(20). 3 bfonction pic x(30). 3 bservice pic x(30). 3 bsite pic x(20). sd ftri. 1 tenreg. 3 ttph 3 tgrade 3 tnom 3 tprenom 3 tfonction 3 tservice 3 tsite

pic xxxx. pic xxxx. pic x(25). pic x(20). pic x(30). pic x(30). pic x(20).

WORKING-STORAGE SECTION. 77 wctf pic 9 value 0. 88 ff value 1. 77 wstk2-9 pic z(3) value 0. 1 wst. 3 wstk1 pic x. 3 wstk2. 5 wstkbin pic 99 comp-x.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 46

ESAT-DI

[LRE]

page XV-47

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

PROCEDURE DIVISION. tri section. debut. sort ftri on ascending key ttph input procedure vidage output procedure recreation stop run. vidage section. debut. open input fcadres read fcadres next record at end set ff to true display "fichier indexé vide ??" end-read perform until ff display benreg release tenreg from benreg read fcadres next record at end set ff to true end-read end-perform close fcadres. recreation section. debut. move 0 to wctf open output fcadres return ftri at end set ff to true display "fichier-tri vide" end-return perform until ff write benreg from tenreg invalid key display "erreur de création pour " ttph " " tnom " " tprenom move wstk2 to wstk2-9 display "avec file status = " wst(1:1) "-" wstk2-9 end-write return ftri at end set ff to true end-return end-perform close fcadres.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 47

ESAT-DI

[LRE]

page XV-48

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.7

exemple de START avec split-key

IDENTIFICATION DIVISION. PROGRAM-ID. start2. AUTHOR. IC lre. environment division. input-output section. file-control. select

fimpri

assign to wresu.

select

fcadres assign to "c:\laf\cobol\indexe\person.don" organization indexed access sequential record key is btph alternate record key bnom with duplicates alternate record key bgrade with duplicates alternate record key split-k1 = bgrade bfonction with duplicates alternate record key split-k2 = bgrade bdeb-nom with duplicates alternate record key bservice with duplicates alternate record key bsite with duplicates file status wst.

DATA DIVISION. file section. fd fimpri linage is 30. 1 sligne pic x(80). fd fcadres. 1 benreg. 3 btph. 5 bdebut-cle-primaire pic xx. 5 pic xx. 3 bgrade pic xxxx. 3 bnom. 5 bdeb-nom pic xx. 5 pic x(23). 3 bprenom pic x(20). 3 bfonction pic x(30). 3 bservice pic x(30). 3 bsite pic x(20). WORKING-STORAGE SECTION. 77 wctf pic 9 value 0. 88 ff value 1. 1 wz-test-split pic 9 value 0. 1 wresu pic x(65) value "c:\laf\cobol\indexe\resplit?.txt". 1 werreur-start pic 9 value 0. 88 erreur-start value 1. 1 wst. 3 wstk1 pic x. 3 wstk2. 5 wstkbin pic 99 comp-x.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 48

ESAT-DI

[LRE]

page XV-49

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

PROCEDURE DIVISION. debut. display "donnez un n° (0,1)" at line 24 col 1 accept wz-test-split at line 24 col 40 move wz-test-split to wresu(28:1) open input fcadres output fimpri write sligne from " liste des cas sélectionnés" move spaces to sligne write sligne after 3 evaluate wz-test-split when 0 move "cne" to bgrade move "instructeur" to bfonction start fcadres key is >= split-k1 invalid key set erreur-start to true end-start when 1 move "A" to bdeb-nom move "cne" to bgrade start fcadres key is >= split-k2 invalid key set erreur-start to true end-start end-evaluate if not erreur-start then read fcadres next record at end set ff to true end-read perform until ff move "n°=" to sligne move btph to sligne(5:4) move bgrade to sligne(10:4) move bnom to sligne(15:) move bprenom to sligne(41:) write sligne read fcadres next record at end set ff to true end-read end-perform move "fin de fichier" to sligne move "file status = " to sligne(15:) move wst to sligne(30:) write sligne after 3 else display "erreur avec le start-cas-" wz-test-split end-if close fcadres fimpri stop run.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 49

ESAT-DI

[LRE]

page XV-50

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

résultats obtenus dans le fichier resplit0.txt : liste des cas sélectionnés

n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°=

3552 3644 5203 3376 3651 3363 3310 3320 5261 3556 3539 3246 5567 3328 5263

cne cne cne gv is maj maj p1 sch sch sch sch sgt sgt sgt

LE DARZ L'HUILLIER MAHIEU KARMANN LAFARGUE ALLAIN JAOUEN ADAM ANGIBAULT LE DAIN ALLAIN MIRAMON/DEVILLE ANGIBAUD LABAT MERCERON

fin de fichier file status =

patrick marcel jacques daniel jean-pierre louis bernard michel patrick jean-luc patrick damiene pierre eric thierry 10

résultats obtenus dans le fichier resplit1.txt : liste des cas sélectionnés

n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°= n°=

3644 3552 5203 3376 3651 3363 3310 3320 3539 5261 3556 3246 5567 3328 5263

cne cne cne gv is maj maj p1 sch sch sch sch sgt sgt sgt

L'HUILLIER LE DARZ MAHIEU KARMANN LAFARGUE ALLAIN JAOUEN ADAM ALLAIN ANGIBAULT LE DAIN MIRAMON/DEVILLE ANGIBAUD LABAT MERCERON

fin de fichier file status =

Cours de COBOL-85

marcel patrick jacques daniel jean-pierre louis bernard michel patrick patrick jean-luc damiene pierre eric thierry 10

L’organisation séquentielle-indexée

Chapître XV -

page 50

ESAT-DI

[LRE]

page XV-51

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.8

mise à jour

Liste des modifications à apporter au fichier (listé en C1) n° n° n° n° n° n° n° n° n° n° n° n° n°

1 2 3 4 5 6 7 8 9 10 11 12 13

C C C M M S S S S C C C S

3255 2812 5512 3651 3363 3362 3363 3487 5567 3256 3257 3258 5330

adj sac is ipe cne

PINOUFLET PIGNOUX PIGRALOUP chef de projet chef-adjoint en second

ctr PIZOU-LATRONCHE lcl PICOTIN cne PIGEON-LAFLEUR

Jules-Edouard Zidor Etienne dgf/dmsi/ps dgar/cs

instructeur instructeur instructeur

Marcel Emile Arthur

instructeur instructeur instructeur

dgf/dmsi/ps dgf/dmsi/ps dgf/dmsi/ps

Cesson-sévigné Cesson-sévigné Cesson-sévigné

dgf/dmsi/ps dgf/dmsi/ps dgf/dmsi/ps

Cesson-sévigné Cesson-sévigné Cesson-sévigné

Cesson-sévigné Cesson-sévigné

NB : dans cet exercice , les seules modifications prévues sont celles du grade , de la fonction,du service ou du site : c’est pourquoi , les articles avec un code modification « M » ne contiennent que ces rubriques.

Pseudo-code du programme de mise à jour du fichier séquentiel-indexé début programme de mise à jour ouvrir les fichiers lecture du fichier des modifications faire tant que non fin de fichier (des modifications) remplir la clé primaire avec le n° lu (du fichier des modifications) lire (directement par la clé primaire ) le fichier séquentiel indexé si l’article n’existe pas alors si le code modification = « C » alors MZS dans le fichier seq-ind des informations lues écrire le nouvel article (WRITE) sinon afficher un message d’erreur fin-si sinon si le code modification = « M » alors MZS dans la zone du fichier seq-ind des informations lues(service,fonction,grade,site) ré-écriture de l’article sur le séq-ind (REWRITE) sinon si le code modification = « S » alors effacer l’article (DELETE) sur le seq-indexé sinon afficher message d’erreur fin-si fin-si fin-si lire le fichier des modifications fin faire fermer les fichiers arrêt du programme.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 51

ESAT-DI

[LRE]

Cours CBL-85

page XV-52

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

Programme cobol IDENTIFICATION DIVISION. PROGRAM-ID. maj. AUTHOR. IC LAFARGUE. environment division. input-output section. file-control. select fmodif assign to "c:\laf\cobol\indexe\modif.dat". select fcadres assign to "c:\laf\cobol\indexe\cadres.don" organization indexed access dynamic record key is btph alternate record key bnom with duplicates alternate record key bgrade with duplicates alternate record key bfonction with duplicates alternate record key bservice with duplicates alternate record key bsite with duplicates file status wst. DATA DIVISION. file section. fd fmodif. 1 menreg. 3 mcode pic x. 3 mzone. 5 mtph pic xxxx. 5 mgrade pic xxxx. 5 mfonction pic x(30). 5 mservice pic x(30). 5 msite pic x(20). 5 pic x(45). fd fcadres. 1 benreg. 3 btph pic xxxx. 3 bgrade pic xxxx. 3 bnom. 5 bdeb-nom pic xx. 5 pic x(23). 3 bprenom pic x(20). 3 bfonction pic x(30). 3 bservice pic x(30). 3 bsite pic x(20). working-storage section. 77 wctf pic 9 value 0. 88 ff value 1. 77 wer9 pic zzz. 1 wst. 3 wstk1 pic x. 3 wstk2. 5 wstk2-9 pic 99 comp-x. 1 wmsg pic x(50) value spaces.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 52

ESAT-DI

[LRE]

Cours CBL-85

page XV-53

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

PROCEDURE DIVISION. debut. open input fmodif I-O fcadres read fmodif at end set ff to true end-read perform until ff move mtph to btph read fcadres record invalid key if mcode = "C" or "c" then write benreg from mzone invalid key move "erreur création" to wmsg perform erreur-i-o end-write else move "article inexistant" to wmsg perform erreur-i-o end-if not invalid key if mcode = "M" or "m" then move mfonction to bfonction move mservice to bservice move mgrade to bgrade move msite to bsite rewrite benreg invalid key move "erreur modification" to wmsg perform erreur-i-o end-rewrite else if mcode = "S" or "s" then delete fcadres record invalid key move "erreur suppression" to wmsg perform erreur-i-o end-delete else move "erreur code modification" to wmsg perform erreur-i-o end-if end-if end-read read fmodif at end set ff to true end-read end-perform close fcadres fmodif stop run. erreur-i-o. display "code modification = " mcode display " pour n° = " mtph " => " wmsg if wstk1 = "9" then move wstk2-9 to wer9 display "file-status=9-" wer9 else display "file-status=" wst end-if.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 53

ESAT-DI

[LRE]

Cours CBL-85

page XV-54

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus Résultat obtenu

2812 3246 3255 3256 3257 3258 3310 3320 3328 3375 3376 3402 3522 3537 3539 3552 3556 3558 3644 3650 3651 3671 3695 3696 3869 5203 5206 5261 5263 5364 5374 5428 5512

sac sch adj ctr lcl cne maj p1 sgt adc gv adc adj adj sch cne sch adc cne adc ipe cba cce ate ccn cne aa sch sgt adc cch adc is

PIGNOUX . MIRAMON/DEVI. PINOUFLET . PIZOU-LATRON. PICOTIN . PIGEON-LAFLE. JAOUEN . ADAM . LABAT . LATEUR . KARMANN . LAVOISIER . MEAU . MADEC . ALLAIN . LE DARZ . LE DAIN . LE DAIN . L'HUILLIER . MARTIN . LAFARGUE . LAVALLARD . BENOIT . ALLAN . LE DAIN . MAHIEU . AMBROIS . ANGIBAULT . MERCERON . ANDREI . LE BOUBENNEC. ANDRE . PIGRALOUP .

Cours de COBOL-85

Zidor . damiene . Jules-Ed. Marcel . Emile . Arthur . bernard . michel . eric . jean-pie. daniel . ronald . marie-pa. alain . patrick . patrick . jean-luc. dominiqu. marcel . yves . jean-pie. michel . claude . yvan . michèle . jacques . isabelle. patrick . thierry . jean-fra. claudine. marcel . Etienne .

instructeur . superviseur . instructeur . instructeur . instructeur . instructeur . officier m c. brocheur-en-. cellule effe. chef service. plombier . cellule stag. instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . instructeur . chef de proj. instructeur . chef-section. section appa. chef de site. officiersupé. secrétariat . centre nodal. centre nodal. chef atelier. sectétaire a. instructeur . instructeur .

dgf/dmsi/p. détachemen. dgf/dmsi/p. dgf/dmsi/p. dgf/dmsi/p. dgf/dmsi/p. dgar/cs/sa. dgar/cs/sa. dgar/cs/b.. dgar/cs/sg. dgar/cs/sg. dgf /cs/bf. dgar/cs/dr. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf /cs/ds. dgf/dmsi/p. dgf /cs/ds. dgf /cs/df. dgf /cs/df. dgf /cs/ds. cdt /lvl/o. cdt /lvl . 2cie/lvl . 2cie/lvl . dgar/lvl/s. dgar/lvl/a. dgf /lvl/d. dgf/dmsi/p.

Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Cesson-sévigné. Laval . Laval . Laval . Laval . Laval . Laval . Laval . Cesson-sévigné.

L’organisation séquentielle-indexée

Chapître XV -

page 54

ESAT-DI

[LRE]

Cours CBL-85

page XV-55

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.C.9

consultation en mode DYNAMIC

programme menu pour choisir le type d’acces pour la consultation : consulta.cbl IDENTIFICATION DIVISION. PROGRAM-ID. consulta initial. AUTHOR. IC LAFARGUE. DATA DIVISION. file section. 01 gconsultation. WORKING-STORAGE SECTION. . . 1 winfo value spaces . . . 3 wtitinfo pic x(38). VALUE " entrez le n° correspondant à votre choix ===>". 3 winfo1 pic x(70). 03 COL 59 BACKGROUND-COLOR 7 FOREGROUND-COLOR 1 VALUE " ". 03 COL 61 BACKGROUND-COLOR 7 FOREGROUND-COLOR 1 VALUE " ". 3 winfo2 pic x(70). 03 COL 63 HIGHLIGHT VALUE "¦". 3 winfo3 pic x(70). 03 LINE 24 COL 10 HIGHLIGHT VALUE "+-------------------------3 winfo4 pic x(70). -"--------------------------+". 1 wvalid pic x. 03 g1-6 LINE 23 COL 60 BACKGROUND-COLOR 1 FOREGROUND-COLOR 7 1 wrep pic x. HIGHLIGHT PIC X USING w1-6 AUTO. 1 w1-6 pic x. 88 bonrep value "1" thru "8". *linkage section. SCREEN SECTION. COPY "c:\laf\annu\srn\consul.ss". * COPY "c:\laf\annu\srn\choixtyp.ss". COPY "c:\laf\annu\srn\ginfo.ss". PROCEDURE DIVISION. tri section. debut. move 0 to w1-6 display gconsultation accept g1-6 perform until w1-6 = "8" if bonrep then evaluate w1-6 when 1 call "ac-nom" using wrep cancel "ac-nom" when 2 call "ac-num" using wrep cancel "ac-num" when 3 call "ac-serv" using wrep cancel "ac-serv" when 4 call "ac-fonc" using wrep cancel "ac-fonc" when 5 call "ac-grad" using wrep cancel "ac-grad" when 6 call "ac-site" using wrep cancel "ac-site" when 7 call "ac-multi" using wrep cancel "ac-multi" else move spaces to winfo move " warning !!!!!!" to wtitinfo move "savez-vous compter jusqu'à 8 ???" to winfo2 display ginfo accept gvalid end-if move 0 to w1-6 display gconsultation accept g1-6 end-perform. exit program.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 55

ESAT-DI

[LRE]

Cours CBL-85

page XV-56

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

consultation (accès par la fonction) : ac-fonc.cbl IDENTIFICATION DIVISION. PROGRAM-ID. ac-fonc initial. AUTHOR. IC LAFARGUE. environment division. input-output section. file-control. select fcadres assign to wpath-don organization indexed access sequential record key is ttph alternate record key tnom with duplicates alternate record key tgrade with duplicates alternate record key tfonction with duplicates alternate record key tservice with duplicates alternate record key tsite with duplicates file status wst. DATA DIVISION. 01 gmessage. file section. 02 LINE 8 COL 53 BACKGROUND-COLOR 4 BLINK HIGHLIGHT VALUE " " . fd fcadres. 02 COL 76 BACKGROUND-COLOR 4 BLINK HIGHLIGHT VALUE " ". 1 benreg. 02 gmsgfin LINE 8 COL 56 BACKGROUND-COLOR 4 BLINK HIGHLIGHT 3 ttph pic xxxx. PIC X(20) USING wmsgfin. 3 tgrade pic xxxx. 3 tnom pic x(25). 3 tprenom pic x(20). 3 tfonction pic x(30) . 01 gsaisiefonc. 3 tservice pic x(30). . . 3 tsite pic x(20). . . -"----------------------------------------+". WORKING-STORAGE SECTION. 03 gsaisifonc LINE 13 COL 29 HIGHLIGHT PIC X(30) USING 1 wflecheg pic xxx value x"11cdcd". tfonction. 1 wzondate. 3 zdate. 5 za pic 9999. 5 zm pic 99. 01 gfiche. . . 5 zj pic 99. . . 3 zheure pic 9(8). 02 COL 80 BACKGROUND-COLOR 1 BLINK FOREGROUND-COLOR 6 HIGHLIGHT 3 zjour pic x(8) . VALUE " ". 3 ztailj pic 9. 02 LINE 25 COL 1 BACKGROUND-COLOR 1 BLINK FOREGROUND-COLOR 6 3 zmois pic x(9). HIGHLIGHT VALUE " 3 ztailm pic 9. -" ". 3 zbeldate pic x(29). 02 gtyprech LINE 2 COL 39 BACKGROUND-COLOR 1 BLINK 3 ztaille pic 99. FOREGROUND-COLOR 6 HIGHLIGHT PIC X(40) USING wtyprech. 02 gbeldate LINE 4 COL 50 BACKGROUND-COLOR 7 FOREGROUND-COLOR 1 77 wctf pic 9 value 0. HIGHLIGHT PIC X(29) USING zbeldate. 88 ff value 1. 02 gtph LINE 5 COL 19 FOREGROUND-COLOR 6 HIGHLIGHT PIC X(4) 77 i pic 99 value 0. USING ttph. 1 winfo value spaces. 02 ggrade LINE 7 COL 19 FOREGROUND-COLOR 6 HIGHLIGHT PIC X(4) 3 wtitinfo pic x(38). USING tgrade. 3 winfo1 pic x(70). 02 gnom LINE 9 COL 19 FOREGROUND-COLOR 6 HIGHLIGHT PIC X(25) 3 winfo2 pic x(70). USING tnom. 3 winfo3 pic x(70). 02 gprenom LINE 11 COL 19 FOREGROUND-COLOR 6 HIGHLIGHT PIC X(20) USING tprenom. 3 winfo4 pic x(70). 02 gfonction LINE 13 COL 19 FOREGROUND-COLOR 6 HIGHLIGHT 1 wpath-don pic x(60) value PIC X(30) USING tfonction. "c:\laf\annu\don\cadres.don". 02 gsite LINE 15 COL 19 HIGHLIGHT PIC X(20) USING tsite. 1 wvalid pic x. 02 gservice LINE 19 COL 36 BACKGROUND-COLOR 7 FOREGROUND-COLOR 1 wmsgfin pic x(20) value spaces. 0 PIC X(30) USING tservice. 1 wst pic xx. 02 gchoix LINE 24 COL 79 HIGHLIGHT PIC X USING wchoix AUTO. 1 wchoix PIC X. 1 wtyprech pic x(40). linkage section . 1 lrep pic x. SCREEN SECTION. copy "c:\laf\annu\srn\msgfin.ss". copy "c:\laf\annu\srn\saisifo.ss". COPY "c:\laf\annu\srn\ficheno.ss". COPY "c:\laf\annu\srn\ginfo.ss".

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 56

ESAT-DI

[LRE]

Cours CBL-85

page XV-57

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

PROCEDURE DIVISION using lrep. tri section. debut. initialize wzondate call "newdate" using wzondate cancel "newdate" move "[fonctions classées par ordre alphabétique]" to wtyprech open i-o fcadres display gsaisiefonc accept gsaisifonc call "cbl_tolower" using tfonction by value 30 start fcadres key is >= tfonction invalid key inspect tfonction replacing all " " by "." move ttph to winfo1 move "n'existe pas" to winfo1(31:) move "il n'y a pas de suivant par ordre alhabétique" to winfo3 move "[enter]" to winfo4(50:) display ginfo accept gvalid not invalid key read fcadres next record at end set ff to true end-read move spaces to wchoix display gfiche perform until ff or wchoix not = " " * display gfiche * pour éviter les sauts-image => j'essaie n displays display gtph gnom gprenom ggrade gservice gsite display tfonction at line 13 col 19 with highlight foreground-color 7 background-color 2 end-display display " fonction " at line 13 col 7 with highlight foreground-color 7 background-color 2 end-display display wflecheg at line 13 col 50 with highlight foreground-color 7 background-color 12 end-display read fcadres next record at end set ff to true end-read accept gchoix end-perform if ff then move "fin de fichier" to wmsgfin else move "fin recherche" to wmsgfin end-if display gmessage accept gchoix end-start close fcadres. exit program.

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 57

ESAT-DI

[LRE]

Cours CBL-85

page XV-58

CHAPÎTRE indexée

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus Résultat obtenu [exemples d’écrans de consultation en conversationnel]

cet écran s’affiche lorsqu’on a fait le choix ‘’4’’ dans le menu précédent

premier article trouvé avec une fonction >= à ‘’ins’’

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 58

ESAT-DI

[LRE]

page XV-59

CHAPÎTRE indexée

Cours CBL-85

15

Les fichiers en organisation séquentielle11/10/2009 11/10/2009

ANS85/m-focus

XV.D Vidage physique

XV.D.1

le format IDXFORMAT »4 »

[ sera traité ultérieurement ]

XV.D.2

Les problèmes de compression

[ sera traité ultérieurement ]

Cours de COBOL-85

L’organisation séquentielle-indexée

Chapître XV -

page 59

Related Documents