Académique Documents
Professionnel Documents
Culture Documents
II
III
IV
VI
VII
VIII
IX
XI
XII
XIII
XIV
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.
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.
FICHIER
DES
DONNEES
LES CLES
SECONDAIRES
N°1
CLE PRIMAIRE
N° date de
1 élève Nom Prén. grade divers naissance arme
x x(7) x(20) x(15) x(3) x(250) AAMMJJ xxx
CLE SECONDAIRE N°1 CLE SECONDAIRE N°2
• 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és-
secondaires » , 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)
• 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]
external-file-reference
[ ]
{ [ EXTERNAL }
EXTERNAL DISK data-name-1
DYNAMIC littéral-1
DYNAMIC
DISK FROM data-name-1 ]
[ RESERVE entier-1
no
alternate AREA
AREAS
]
[ ORGANIZATION IS ] INDEXED
• 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).
• 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 ]
• 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).
• Pour avoir le mode externe par défaut on utilise la directive de compilation ASSIGN »EXTERNAL ».
• 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 :
• 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)
• 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).
• 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.
• 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.
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.
il comprend 2 caractères :
valeur de status-key-1 :
valeu condition
r
0 déroulement correct
1 passage par AT END
2 passage par INVALID KEY
3 Permanent Error
4 erreur logique (ex fermeture d’un fichier fermé)
9 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 :
i : fichier séquentiel-indexé
s : fichier séquentiel
r : fichier relatif
STATU KEY 2
S
KEY 1 0 1 2 3 4 5 6 7 8 9
0 succès sri i sri sri s
1 at end sri r
2 inv key i ri ri ri
3 perm error sri s s sri sri sri
4 logic error sri sri sri sri sri sri sri sri
9 error voir la valeur binaire
system
cas du status-key-1 = 9 : => erreur système => étude de la valeur binaire du status-key-2
XV.B.2 La phrase FD
XV.B.2.1 Format
FD file-name-1 [ IS EXTERNAL ]
[ IS GLOBAL ]
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)
XV.B.3.1 format
{
OPEN
}
INPUT { file-name-1 [ WITH LOCK ] } . . . .
OUTPUT { file-name-2 [ WITH LOCK ] }....
I-O { file-name-3 [ WITH LOCK ] } . . . .
EXTEND { file-name-4 [ WITH LOCK ] }....
XV.B.3.2 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.
♦ l’ouverture avec succès d’un fichier rend disponible la zone d’entrée (niveau 1 en FD) dans le programme.
♦ 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’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é.
♦ 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.
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).
XV.B.4.1 lecture
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é.
• Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le file-
position-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.
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é.
• 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.
• 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)
∗ 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.
♦ 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 .
ENREGISTREMENT N°1
ENREGISTREMENT N°2
.
.
.
ENREGISTREMENT N-1
DERNIER ENREGISTREMENT
FINDE FICHIER
• Après être passé par AT END , on peut faire OPEN + CLOSE ou START si on veut continuer à travailler sur le fichier.
XV.B.4.2 écriture
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 est équivalent à MOVE nom-donnée to record-name + WRITE record-
name
♦ 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.
∗ 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]
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 :
♦ REWRITE record-name FROM nom-donnée est équivalent à MOVE nom-donnée to record-name + REWRITE
record-name
♦ 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.
♦ 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.
∗ 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]
XV.B.4.3 effacement
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 :
♦ L’exécution d’un DELETE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié).
♦ L’article effacé par DELETE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD).
∗ quand (mode séquentiel , fichier ouvert en I-O) la valeur de la clé primaire est différente de celle
lue précédemment.
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)
{ = ou alors EQUAL TO }
{ > ou alors GREATER THAN }
{ NOT < ou alors NOT LESS THAN }
START file-name KEY IS { >= ou alors GREATER THAN OR EQUAL TO }
{ < ou alors LESS THAN }
{ NOT > ou alors NOT GREATER THAN }
{ <= ou alors LESS THAN OR EQUAL TO }
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é).
♦ 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 la phrase KEY est spécifiée , data-name-1 doit être une zone décrite en FD.
♦ 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).
♦ 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).
♦ Si la clause KEY n’est pas mentionnée , c’est la clé primaire qui est utilisée.
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
[
[ [ INTO Identifier ] [ WITH KEPT LOCK ] ]
NO
IGNORE
WAIT
[
KEY IS data-name-1 [ WITH SIZE { identifier-1 }
split-key-name-1 { littéral-1 } ]
]
[ INVAKID KEY instructions impératives-3 . . . . . . ]
[ NOT INVALID KEY 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é.
• Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le file-
position-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.
• 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.
XV.B.5.2 écriture
END-WRITE
Rôle :
♦ WRITE record-name FROM nom-donnée est équivalent à MOVE nom-donnée to record-name + WRITE record-
name
♦ 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.
∗ 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]
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 :
♦ REWRITE record-name FROM nom-donnée est équivalent à MOVE nom-donnée to record-name + REWRITE
record-name
♦ 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.
♦ 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).
∗ 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]
XV.B.5.3 effacement
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 :
♦ L’exécution d’un DELETE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié).
♦ L’article effacé par DELETE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD).
∗ quand l’article ayant la valeur de la clé primaire fixée n’existe pas dans le fichier.
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)
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
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é.
• Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le file-
position-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.
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é.
• 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).
• 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)
∗ 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.
♦ 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 .
ENREGISTREMENT N°1
ENREGISTREMENT N°2
.
.
.
ENREGISTREMENT N-1
DERNIER ENREGISTREMENT
FINDE FICHIER
• Après être passé par AT END , on peut faire OPEN + CLOSE ou START si on veut continuer à travailler sur le fichier.
[
[ [ INTO Identifier ] [ WITH KEPT LOCK ] ]
NO
IGNORE
WAIT
[
KEY IS data-name-1 [ WITH SIZE { identifier-1 }
split-key-name-1 { littéral-1 } ]
]
[ INVAKID KEY instructions impératives-1 . . . . . . ]
[ NOT INVALID KEY 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é.
• Après une lecture infructueuse le contenu de la zone d’entrée (niveau 01 en FD) est indéterminé (et le file-
position-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.
• 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.
XV.B.6.2 écriture
END-WRITE
Rôle :
♦ WRITE record-name FROM nom-donnée est équivalent à MOVE nom-donnée to record-name + WRITE record-
name
♦ 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.
∗ 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]
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 :
♦ REWRITE record-name FROM nom-donnée est équivalent à MOVE nom-donnée to record-name + REWRITE
record-name
♦ 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.
♦ 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).
∗ 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]
XV.B.6.3 effacement
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 :
♦ L’exécution d’un DELETE met toujours à jour le file-status (par contre le file-position-indicator n’est pas modifié).
♦ L’article effacé par DELETE reste disponible dans la zone de sortie (ZS=Record Area = niveau 1 en FD).
∗ quand l’article ayant la valeur de la clé primaire fixée n’existe pas dans le fichier.
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)
{ = ou alors EQUAL TO }
{ > ou alors GREATER THAN }
{ NOT < ou alors NOT LESS THAN }
START file-name KEY IS { >= ou alors GREATER THAN OR EQUAL TO }
{ < ou alors LESS THAN }
{ NOT > ou alors NOT GREATER THAN }
{ <= ou alors LESS THAN OR EQUAL TO }
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é).
♦ 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.
♦ 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).
♦ 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).
♦ Si la clause KEY n’est pas mentionnée , c’est la clé primaire qui est utilisée.
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".
DATA DIVISION.
file section.
fd fimpri linage is 30.
1 sligne pic x(80).
fd fcadres.
1 benreg.
3 btph pic xxxx.
3 bgrade pic xxxx.
3 bnom pic x(25).
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 wst.
3 wstk1 pic x.
3 wstk2.
5 wstkbin pic 99 comp-x.
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 :
LATEUR jean-pierre
LAVALLARD michel
LAVOISIER ronald
LE BOUBENNEC claudine
LE DAIN michèle
LE DAIN jean-luc
LE DAIN dominique
LE DARZ patrick
MADEC alain
MAHIEU jacques
MARTIN yves
MEAU marie-paule
MERCERON thierry
MIRAMON/DEVILLE damiene
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".
DATA DIVISION.
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 tgrade pic xxxx.
3 tnom pic x(25).
3 tprenom pic x(20).
3 tfonction pic x(30).
3 tservice pic x(30).
3 tsite 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.
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.
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".
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.
IDENTIFICATION DIVISION.
PROGRAM-ID. start1.
AUTHOR. IC lre.
environment division.
input-output section.
file-control.
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.
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.
IDENTIFICATION DIVISION.
PROGRAM-ID. restruc.
AUTHOR. IC LAFARGUE.
environment division.
input-output section.
file-control.
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 pic xxxx.
3 tgrade pic xxxx.
3 tnom pic x(25).
3 tprenom pic x(20).
3 tfonction pic x(30).
3 tservice pic x(30).
3 tsite 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.
PROCEDURE DIVISION.
tri section.
debut.
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.
IDENTIFICATION DIVISION.
PROGRAM-ID. start2.
AUTHOR. IC lre.
environment division.
input-output section.
file-control.
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 wst.
3 wstk1 pic x.
3 wstk2.
5 wstkbin pic 99 comp-x.
PROCEDURE DIVISION.
debut.
display "donnez un n° (0,1)" at line 24 col 1
accept wz-test-split at line 24 col 40
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.
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.
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.
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.
Résultat obtenu
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 " ".
3 winfo2 pic x(70). 03 COL 61 BACKGROUND-COLOR 7 FOREGROUND-COLOR 1 VALUE " ".
3 winfo3 pic x(70). 03 COL 63 HIGHLIGHT VALUE "¦".
3 winfo4 pic x(70). 03 LINE 24 COL 10 HIGHLIGHT VALUE "+--------------------------
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.
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. .
1 benreg. 02 COL 76 BACKGROUND-COLOR 4 BLINK HIGHLIGHT VALUE " ".
3 ttph pic xxxx. 02 gmsgfin LINE 8 COL 56 BACKGROUND-COLOR 4 BLINK HIGHLIGHT
3 tgrade pic xxxx. PIC X(20) USING wmsgfin.
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). . .
3 zjour pic x(8) . 02 COL 80 BACKGROUND-COLOR 1 BLINK FOREGROUND-COLOR 6 HIGHLIGHT
3 ztailj pic 9. VALUE " ".
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.
77 wctf pic 9 value 0. 02 gbeldate LINE 4 COL 50 BACKGROUND-COLOR 7 FOREGROUND-COLOR 1
88 ff value 1. HIGHLIGHT PIC X(29) USING zbeldate.
77 i pic 99 value 0. 02 gtph LINE 5 COL 19 FOREGROUND-COLOR 6 HIGHLIGHT PIC X(4)
1 winfo value spaces. USING ttph.
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
3 winfo4 pic x(70). PIC X(20) USING tprenom.
1 wpath-don pic x(60) value 02 gfonction LINE 13 COL 19 FOREGROUND-COLOR 6 HIGHLIGHT
"c:\laf\annu\don\cadres.don". PIC X(30) USING tfonction.
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".
cet écran s’affiche lorsqu’on a fait le choix ‘’4’’ dans le menu précédent