Cours de Cobol les fichiers

Les FICHIERS en COBOL
- Rappel organisation des fichiers.
- INPUT-OUTPUT SECTION.
FILE-CONTROL.
- FILE SECTION.
- Cfr chapitre 5 du livre de référence.
- Fichier d’impression et Format d’impression (cfr chapitre 3.5)
Gestion de fichiers
- Ensemble de données enregistrées sur un support périphérique.
- le pgm COBOL doit faire le lien avec cet ensemble de donnée sur un périphérique.
- Le pgm LIT ou ECRIT progressivement ces données Î elles ne sont pas simultanément dans la mémoire centrale.
- Zone tampon ou buffer
Organisation des fichiers
- Volumes et fichiers
- Blocs et enregistrements.
- Longueur enregistrement.
- Modes d’accès
– Séquentiel.
– Aléatoire.
– Mixte (séquentiel indexé).
- Portabilité des fichiers séquentiels (imprimantes indépendantes; µfilms; bandes magnétiques; autre jeu de caractères; … )
Objectifs du COBOL
- Pouvoir utiliser tout ces types de fichiers dans un programme.
- Î Possibilité de définir tous ces types de fichiers en COBOL.
- Î Définir pour chaque fichier du programme
2 zones tampons en mémoire centrale :
– Tampon de bloc (Système d’exploitation)
– Tampon d’article (programme)
- Allocation de la mémoire centrale lors de l’OPEN
Méthode et moyens d’accès:
ENVIRONMENT DIVISION
FILE-CONTROL
- Informations pour le transfert entre les périphériques et le tampon bloc du fichier. • SELECT [OPTIONAL] nom-de-fichier
- ASSIGN TO nom-de-système littéral
- [ORGANIZATION IS [LINE] SEQUENTIAL]
- [ACCES MODE IS SEQUENTIAL]
- [RECORD DELIMITER IS …]
- [RESERVE entier AREA]
- [FILE STATUS IS nom-de-donnée]
Attributs pour l’OS
- SELECT [OPTIONAL] nom-de-fichier
- ASSIGN TO nom-de-système
- littéral
- [ORGANIZATION IS [LINE] SEQUENTIAL]
- [ACCES MODE IS SEQUENTIAL]
- [PADDING CHARACTER IS nom-de-donnée/constante]
- [RECORD DELIMETER IS nom-de-système]
- [RESERVE entier AREA]
- [FILE STATUS IS nom-de-donnée ]
Mémoires tampons
FILE SECTION
- Description des mémoires tampons et des éventuelles règles de transferts entre elles. • FD nom-de-fichier
- [IS EXTERNAL]
- [IS GLOBAL]
- [clause RECORD]
- [clause BLOCK]
- [clause CODE-SET]
- 01 description-article
Attributs pour les zones tampons:
Mémoire centrale:
- FD nom-de-fichier [IS EXTERNAL]
- [IS GLOBAL]
BLOC
- BLOCK CONTAINS [entier-1 TO] entier-2 RECORDS CHARACTERS
Enregistrement
- RECORD IS VARYING IN SIZE
- [[FROM entier-1] [TO entier-2 CHARACTERS]
- [DEPENDING ON nom-de-donnée]
Traduction
- CODE-SET IS nom-d-alphabet
Fichiers de plusieurs articles 1/2
- Certains fichiers séquentiels contiennent des enregistrements de type différents.
- Î plusieurs articles en niveau 01 sont décrit dans la file section.
Fichiers de plusieurs articles ½
Exemple • FD COMMANDES RECORD IS VARYING IN SIZE DEPENDING ON LONGUEUR-LIGNE CODE-SET IS EBCDIC.
… … …
Synthèse: les fichiers en COBOL
Actions sur le buffer du fichier PROCEDURE (le charger ou le vider)
READ nom-de-fichier
WRITE nom-record-fi
CLOSE nom-de-fichier Fermeture du fichier PROCEDURE
Ouverture du fichier (reservation PROCEDURE ressource) et définition du mode d’utilisation
OPEN INPUT
OUTPUT
I-O
DATA
FILE SECTION
Déclaration de l’enregistrement du fichier
01 nom-record-fi
DATA
FILE SECTION
Déclaration du nom-de-fichier, suivi de la description, de l’organisation du fichier.
FD nom-de-fichier
[ORGANIZATION; BLOCK …]
ENVIRONMENT
INPUT-OUTPUT
SECTION.
Lien entre le fichier logique et le fichier sur un périphérique
FILE-CONTROL
SELECT … ASSIGN
Syntaxe COBOL Signification DIVISION
Exercice
- Décrire le fichier mouvement de stock comprenant
3 types d’enregistrements:
– Enreg debut de stock: (1:code enreg=‘D’;2-9:n° article dont les 2 premières positions = famille d’articles; 10-15:date valorisation; 16-45: libelle; 46-49: quantite; 50-54: prix unitaire dont 2 décimales)
– Enreg entrée: (1:code enreg=‘E’;2-9:n° article dont les
2 premières positions = famille d’articles; 10-15:date entrée;16-20:n° bon entrée; 23-26: qty; 27-31: PU dont
2 décimales; 32-54: inutilisé)
– Enreg Sortie: (1:code enreg=‘S’;2-9:n° article dont les 2 premières positions = famille d’articles; 10-15:date sortie;16-22:n° bon sortie; 23-26: qty; 27-54: inutilisé)
... ... ... ...
CARACTERISTIQUES
- fichier : collection de données du même type
- données persistantes -> stockées sur mémoire de masse
- capacité de stockage beaucoup plus grande que celle des structures de données residant en mémoire centrale
Fichiers : 2 niveaux
- Niveau système d’exploitation:
- allocation d’espace disque, organisation des fichiers sur disques (blocs)
- transfert des blocs d’octets du disque vers la mémoire centrale ( et inversément)
- gestion des répertoires de fichiers (directory)
- Niveau utilisateur ( par ex. l’utilisation d’un fichier depuis un programme Modula):
- stocker des enregistrements sur disque.
Ex. : ( “L’année du déluge”, “Eduardo Mendoza”, “Seuil”, 1993)
- rechercher des enregistrements sur le disque
-> méthodes d’accès aux données
NIVEAU SYSTEME D’EXPLOITATION
Accès individuel et par bloc
RAM: chaque octet possède une adresse;
accès octet par octet temps d’accès : 60 à 70 nanosecondes
Disque:
les octets sont regroupés par blocs (p.ex. 512 ou 1024 octets / bloc) temps d’accès ( positionnement de la tête de lecture ):
8 à 9 millisecondes modifier un octet d’un bloc =>
- lire un bloc du disque en mémoire RAM;
- modifier l’octet en RAM;
- récrire le bloc sur disque
Efficacité => regrouper toutes les opérations portant sur les octets d’un bloc pendant qu’il est en mémoire RAM.
- Grouper par dans le même bloc les données qui sont en général manipulées ensemble
...
Lecture d’un bloc du disque
- a) il faut connaître l’adresse du bloc sur le disque
- b) positionner la tête de lecture sur la bonne piste
- c) attendre que le bon bloc se présente sous la tête de lecture
- d) transférer le bloc en mémoire centrale
- temps nécessaire pour b) + c) + d) : 8 à 9 millisec
- temps pour d) : environ 0.1 millisec
-> il est avantageux de lire plusieurs blocs contigüs à la suite
- “Buffering” de blocs : réservation de plusieurs tampons (un tampon peut recevoir un bloc) dans la mémoire centrale. Lorsqu’un tampon est utilisé pour le transfert depuis le disque, le CPU peut en même temps traiter les données d’un autre tampon;
-> Le contrôleur de disque et le CPU travaillent en parallèle.
- Création et écriture de fichiers sur disque
Méthode pour nommer des objets stockés sur disque (équiv. variables dans les programmes)
Fichier collection d’octets identifié par un nom (le nom du fichier)
Opérations de création et d’écriture écrire: fichier × liste-octets × position -> fichier créer: … supprimer: …
vider: … longueur: fichier -> entier
Réalisation. Un répertoire (directory, folder, dossier, catalogue, etc.) + un ensemble de blocs attribués à chaque fichier.
Organisation.
- blocs contigus
- blocs chaînés
- index des blocs
- Nerima Faculté des lettres - Université de Genève 10
Organisation - blocs contigus
Problème de création d’un fichier
Comment gérer plusieurs fichiers qui grandissent simultanément?
Nécessité de réserver un nombre fixe de blocs à la création.
Où allouer le premier bloc? Combien de blocs réserver?
Problème de fragmentation - trous - => impossible de trouver un espace libre suffisamment grand.
Exemples
Apple II
DEC PDP11 - RT11 IBM 3090 - VM (minidisques) rép. A C B
Organisation - chaîne de blocs
Le répertoire contient le no. du premier bloc du fichier
Chaque bloc contient le no. du suivant
Les blocs inutilisés sont liés entre eux de la même manière
Avantages
Pas de réservation de blocs à la création
Utilisation optimale du disque
Extensibilité des fichiers
Problèmes
Trouver le n-ième bloc du fichier => lire n blocs
Mélange de données (utilisateur) et adresses disque (système) dans le même bloc
Mauvaise résistance aux pannes
- Nerima Faculté des lettres - Université de Genève 12
Organisation - index de blocs - FAT
Table d’allocation des blocs
Le répertoire contient le no. du premier bloc du fichier
On a une table d’allocation (FAT) qui contient un élément par bloc du disque.
FAT[i]
= <libre> si le bloc n’est utilisé par aucun fichier
= j si le bloc no. i est utilisé par un fichier f et j suit le bloc no. i dans f
= <fin> si le bloc no. i est utilisé par un fichier f et c’est le dernier bloc de f.
Pour que ce soit efficace il faut que la FAT soit copiée en mémoire centrale.
Problème
Pour le gros disques (1 gigaoctet) la FAT devient très grande
Exemple
DOS
Organisation - index de blocs hiérarchisés
Un descripteur de fichier (i-node) contient
- les no.s des 10 premiers blocs
- le no. d’un bloc d’index primaire, secondaire et tertiaire
Si le fichier fait plus de 10 blocs on alloue un bloc d’index primaire qui contient les nos des N blocs suivants.
Si le fichier fait plus de N + 10 blocs on alloue un bloc secondaire qui contient les nos des N blocs d’index primaire.
Si le fichier fait plus de N2 + N + 10 blocs on alloue un bloc tertiaire …
Exemple : UNIX
- Nerima Faculté des lettres - Université de Genève 14
NIVEAU UTILISATEUR
Un fichier est une collection d’enregistrements
Un enreg. est composé d’un ou plusieurs champs
Un champ est une chaîne d’octetsdelong.fixeouvariable
Les champs sontgénéralementtypés(entier, ch. de car...)
Un ou plusieurs parmi les champs jouent le rôle de clé
Opérations de base
- ouvrir, fermer, se déplacer dans un fichier
- lire, écrire, supprimer un enregistrement
Organisations
1) Séquentielle, 2)relative, 3)indexée (index B - arbre)
Types d’accès
- séquentiel lire: fichier -> enregistrement (notion d’enregistrement courant)
- direct (relatif) lire: fichier × no_enregistrement -> enregistrement
- indexé (par la clé) lire: fichier × valeur_clé -> enregistrement
Fichiers de textes / fichiers binaires
On distingue deux types de fichiers: fichiers de textes
- les données sont stockées sous forme de code ascii.
Ex : 35 -> (63c est le code ascii de ‘3’,
65C est le code ascii de ‘5’)
- on peut lire et écrire les fichiers de textes avec un éditeur de textes
- il y a la notion de fin de ligne: elle est indiquée par la présence du caractère de contrôle EOL (36C) fichiers binaires
- les données sont stockées dans un format interne.
Ex: 35 -> (3510 = 438)
- lecture et écriture des fichiers binaires par programme uniquement
63C 65C
43C
- Nerima Faculté des lettres - Université de Genève 16
1) Fichiers en organisation séquentielle
Les enregistrements forment une séquence, c-à-d qu’ils sont arrangés de manière adjacente les uns à la suite des autres.
Sur la plupart des ordinateurs l’entrée sur clavier et la sortie sur l’écran sont assimilés à des fichiers séquentiels.
Support physique: unité de bande magnétique, disques magnétiques, disques optiques.
Remarque: l’organisation séquentielle convient pour les deux types de fichiers (textes et binaires)
Opérations sur les fichiers séquentiels
Opérations d’écriture
- (1) générer un fichier vide
- (2) ajouter un enregistrement à la fin du fichier
Opérations de lecture
- (3) ouvrir et positionner la “tête de lecture” au début du fichier
- (4) lire un enregistrement et passer au suivant
-> l’accès à un enregistrement particulier demande l’ouverture du fichier puis la lecture successive de tous les enregistrements qui précédent l’enregistrement recherché.
-> pour accéder à l’enregistrement précédent, il faut réouvrir le fichier (positionnement au début du fichier)
Etat de lecture / état d’écriture le fichier ne peut se trouver que dans un seul état à la fois pour passer à l’état d’écriture: opération (1) pour passer à l’état de lecture: opération (3)
Problème : comment modifier un enregistrement d’un fichier séquentiel ?
- Nerima Faculté des lettres - Université de Genève 18
Les fichiers séquentiels en Modula
- Fichiers de textes:
Le module “InOut”
Lecture et écriture de chaînes de caractères et de nombres. Ex: ReadString, ReadCard, WriteString,...
La lecture se fait depuis le clavier ou depuis un fichier de texte.
L’écriture se fait sur l’écran ou dans un fichier de texte.
Fin du flot d’entrée ou lecture de la fin du fichier:
Done = FALSE ou in.eof = TRUE.
Le module “Terminal”
Lecture et écriture de charactères et de chaînes de caractères au terminal. Ex: KeyPressed, Read,Write,...
Remarque: la procédure Read ne fait pas l’écho du caractère lu (il faut utiliser Write pour faire l’écho)
- Fichiers binaires:
Le module LogiFile (voir fichiers en organisation relative)
- Nerima Faculté des lettres - Université de Genève 19
2) Les fichiers en organisation relative (ou fichiers à accès direct)
Les enregistrements sont identifiés par un numéro
d’ordre (relatif par rapport au début du fichier).
L’enregistrement de numéro d’ordre n occupe la nème position dans le fichier.
Deux type d’accès possible:
- séquentiel (idem fichiers séquentiels)
- direct, à condition de connaître le numéro d’ordre de l’enregistrement.
Avantages accès direct:
- rapidité de recherche
- lecture et écriture n’importe où dans le fichier
Support physique: disques magnétiques, disques optiques.
Remarque: les fichiers relatifs sont de type texte ou binaire (mais utilisation limitée de l’accès direct pour les fichiers de textes)
Opérations sur les fichiers relatifs
Opérations de positionnement
- ouvrir un fichier
- positionner “la tête de lecture / écriture” sur l’enregistrement de numéro d’ordre n
- positionner “la tête de lecture / écriture” au début du fichier
Opérations d’écriture
- créer un fichier
- écrire un enregistrement
Opération de lecture
- lire un enregistrement
Les fichiers relatifs en Modula
Le module “LogiFile” (exemples d’opérations):
Les enregistrements sont adressés par un déplacement relatif en nombre d’octets à partir du début du fichier ( déplacement = ‘highpos’∗10000H + ‘lowpos’ )
PROCEDURE GetPos( f : File;
VAR highpos : CARDINAL;
VAR lowpos : CARDINAL; )
(* donne la position courante du fichier *)
PROCEDURE SetPos( f : File; highpos : CARDINAL; lowpos : CARDINAL; )
(*positionne la tête de lecture / d’écriture dans le fichier*)
PROCEDURE ReadNBytes( f : File buffPtr : ADDRESS; requestedBytes: CARDINAL; VAR read : CARDINAL; )
(*lit dans le fichier ‘f’ n octets (n=’requestedBytes’) et les copie dans le buffer à l’adresse ‘buffptr’*)
PROCEDURE WriteNBytes( f : File buffPtr : ADDRESS; requestedBytes: CARDINAL;
VAR written : CARDINAL; )
(* idem mais pour écrire dans le fichier ‘f’ *)
3) Les fichiers en organisation séquentielle indexée
Origine: langage COBOL (ISAM : Index Sequential Access Method)
Implique deux structures de données: données + index.
Idée générale: index de fichier ≡ index à la fin d’un livre.
Clé
Le champ (ou les champs) par lequel les enregistrements sont référencés s’appelle clé d’accès.
-> on peut accéder à un enregistrement en précisant la valeur de la clé.
Un fichier indexé doit avoir au moins une clé (la clé primaire).
Il peut avoir d’autre clés (secondaire, tertiaire,...).
La clé d’accès peut être unique ou non.
Ex. clé unique:
Ex. clé non unique:
La clé primaire est unique (mais il y a des exceptions...).
Index
L’index est une suite de paires <K,A> où A est l’adresse de l’enregistrement qui a K pour valeur de clé.
Remarque: L’index est généralement trié selon la clé