14
Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres 4 & 5 de Folk, Zoellick & Riccardi, File Structures, An Object-Oriented Approach with

Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

Embed Size (px)

Citation preview

Page 1: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

Gestion de Fichiers

GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct,

Manipulation de classes en C++(Base sur des segments des Chapitres 4 & 5 de Folk, Zoellick & Riccardi, File Structures,

An Object-Oriented Approach with C++)

Page 2: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

2

Resume du Cours d’Aujourd’hui Types de Representation pour les

champs d’un objet dans un fichier. Types de Representation pour les objets

dans un fichier. Lecture et Ecriture d’objets a taille fixe

dans un fichier en C++. Acces Sequentiel vs. Acces Direct.

Examples en C++.

Page 3: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

3

L’Organisation de Fichiers la plus Simple: Fichiers “Stream”

L’organisation de fichiers la plus simple consiste a ecrire l’information qui nous interesse a la suite, dans un fichier, sans separation entre les differents types de donnees presentes.

Cette organisation a l’avantage d’etre tres simple a implementer et de ne pas gaspiller de memoire.

Cependant, a moins, que toutes les donnees soient des donnees simples, du meme type, et aient exactement la meme taille (pas des donnees tres interessantes!), cette organisation ne permet pas de recuperer les donees du fichier car on ne sait pas ou se trouve le debut et la fin de chaque donnee.

Page 4: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

4

Meilleure Solution: Une Organisation avec Enregistrements et Champs

L’unite logique de base dans le traitement des fichiers est le champ qui contient une seule donnee.

Les champs sont organises dans des structures d’ensembles: soit dans des structures qui regroupent plusieures copies du meme champ (les tableaux), soit dans des structures qui regroupent des champs differents (les enregistrements).

Lorsqu’un enregistrement est sauvegarde en memoire on l’appelle un objet et on appele ses champs, ses membres.

Comme nous allons le voir, il y existe beaucoup de moyens pour representer les objets et leurs membres dans des fichiers.

Page 5: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

5

La Structure des Champs Il existe plusieurs moyens d’ajouter de la

structure aux fichiers de facon a distinguer les differents champs et maintenir leur identite. On peut: Forcer le champ a maintenir une certaine

longueur. Ajouter au debut de chaque champ une

indication de sa longueur. Separer les champs avec des separateurs. Utiliser des exressions “mot_cle = valeur” afin

d’identifier chaque champ et son contenu.

Page 6: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

6

Les Champs ne suffisent pas: Il faut aussi des Enregistrements

Un programme peut facilement lire une suite de champs et imprimer

Bien que cette solution preserve la notion de champs, elle ne distingue pas entre deux objets differents De plus des champs il est necessaire d’utiliser la notion d’objets

Last Name: ‘Ames’First Name: ‘Mary’Address: ‘123 Maple’City: ‘Stillwater’State:’OK’Zip Code: ‘74075’Last Name: ‘Mason’First Name:’Alan’Address:’90 Eastgate’City:’Ada’State:’OK’Zip Code: ‘74820’

Page 7: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

7

La Structure des Enregistrements

Il existe plusieurs moyens d’organiser les enregistrements. On peut: Forcer les enregistrements a avoir une certaine

longueur. Forcer les enregistrements a avoir un certain

nombre de champs. Ajouter au debut de chaque enregistrement un

indicateur de longueur. Utiliser un second fichier permettant de

conserver l’addresse de chaque enregistrement. Placer un separateur entre chaque

enregistrement.

Page 8: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

8

Acces au Enregistrements: Mots Cles

Lorsque l’on est a la recherche d’un enregistrement particulier, il est utile d’identifier cet enregistrement avec un mot cle qui represente le contenu de l’enregistrement (par example l’enregistrement Ames).

Les mots cles sont definis de maniere unique et ne doivent pas changer.

Il est aussi possible de chercher un enregistrement base sur un mot-cle secondaire. Typiquement, les mots cles secondaires n’identifient pas les enregistrements de maniere unique.

Page 9: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

9

Recherche Sequentielle I Si on suppose que chaque lecture d’enregistrement

demande 1 allee au disque (chaque allee prenant beaucoup de temps), la recherche sequentielle d’un fichier avec n enregistrements dedans demande, en moyenne, n/2 allees au disque.

La recherche sequentielle, neanmoins, peut etre amelioree si on utilise la notion de blocs: plutot que d’amener un enregistrement par chaque allee au disque, on peut en ramener un nombre b (ou [b * taille d’un enregistrement] represente la taille d’un bloc.

Page 10: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

10

Recherche Sequentielle II Bien que la recherche sequentielle ne soit pas,

habituellement, tres pratique, il existe certains cas dans lesquels, il est raisonnable de l’utiliser: Lorsque l’on cherche un motif dans un fichier ASCII

(example: grep) Lorsqu’il y a peu d’enregistrements Dans les fichiers qui sont rarement l’objet de

recherches. Dans les fichiers dans lesquels vous desirez tous les

enregistrements contenant une certaine cle secondaire (et s’il y en a beaucoup)

Page 11: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

11

Acces Direct On a acces direct a un enregistrement s’il est

possible de trouver directement le debut de cet enregistrement et de le lire.

Avec un acces direct, on n’a besoin que d’un acces au disque, quelle que soit la taille du fichier.

Neanmoins, comment sait-on ou se trouve le debut de l’enregistrement qui nous interesse? L’information se trouve dans un index, ou On connait le numero d’enregistrement

relatif (NER)

Page 12: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

12

Numero d’Enregistrement Relatif (NER)

NERs ne sont pas utiles lorsque l’on travaille avec des enregistrement a longueur variable. Dans ce cas, l’acces doit rester sequentiel.

Avec des enregistrements a longueur fixe, les NERs sont utiles car on peut calculer le nombre d’octets a survoler et utiliser les commandes seekg ou seekp.

Comme nous l’avons déjà vu, on peut choisir l’un de deux types d’enregistrement a longueur fixe: Les enregistrements a champs de longueur fixe Les enregistrements a separateurs de champs a

positions variees.

Page 13: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

13

Enregistrement d’Entete Il est coutumier et utile d’utiliser un

enregistrement d’entete (dans le fichier contenant les donnees) qui contient un certain nombre d’information concernant le fichier.

De telles informations incluent le nombre d’enregistrements dans le fichier, leur longueur, etc.

L’interet d’une telle approache est de liberer le programme de ce type d’information et de rendre le fichier self-suffisant.

Page 14: Gestion de Fichiers GF-3: Structures d’Enregistrements, Acces Sequentiel et Direct, Manipulation de classes en C++ (Base sur des segments des Chapitres

14

Quelques Remarques sur l’Organisation et l’Acces des Fichiers

L’Organisation de Fichiers depend de l’usage que l’on veut en faire.

Puisque l’utilisation d’un fichier implique son acces, l’organisation et l’acces de fichiers sont intimement lies.

Par example: bien que l’utilisation d’enregistrements a longueur fixe rend l’acces direct possible, si les documents ont des longueurs tres variables, les enregistrements a longueur fixe ne sont pas une bonne idee L’application determine donc notre choix d’acces et d’organisation.