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++)
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++.
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.
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.
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.
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’ Zip Code: ‘74820’
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.
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.
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.
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)
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)
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.
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.
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.