You are on page 1of 12

Rappel : ce cours d'algorithmique et de programmation est enseign l'Universit Paris 7,

Prambule : le Codage Introduction l'algorithmique 1. Les Variables 2. Lecture et Ecriture 3. Les Tests 4. Encore de la Logique 5. Les Boucles 6. Les Tableaux 7. Techniques Ruses 8. Tableaux Multidimensionnels 9. Fonctions Prdfinies 10. Fichiers
Organisation des fichiers Structure des enregistrements Types d'accs Instructions Stratgies de traitement Donnes structures

dans la spcialit PISE du Master SSAMECI (ancien DESS A.I.G.E.S.) par Christophe Darmangeat

PARTIE 10 LES FICHIERS


On ne peut pas davantage crer des fichiers numriques non copiables que crer de leau non humide - Bruce Schneier

Jusqu prsent, les informations utilises dans nos programmes ne pouvaient provenir que de deux sources : soit elles taient inclues dans lalgorithme lui-mme, par le programmeur, soit elles taient entres en cours de route par lutilisateur. Mais videmment, cela ne suffit pas combler les besoins rels des informaticiens. Imaginons que lon veuille crire un programme grant un carnet dadresses. Dune excution du programme lautre, lutilisateur doit pouvoir retrouver son carnet jour, avec les modifications quil y a apportes la dernire fois quil a excut le programme. Les donnes du carnet dadresse ne peuvent donc tre inclues dans lalgorithme, et encore moins tre entres au clavier chaque nouvelle excution ! Les fichiers sont l pour combler ce manque. Ils servent stocker des informations de manire permanente, entre deux excutions dun programme. Car si les variables, qui sont je le rappelle des adresses de mmoire vive, disparaissent chaque fin dexcution, les fichiers, eux

11. Procdures et Fonctions 12. Notions Complmentaires Liens Souvent Poses Questions

LE

A lire :
COMMUNISME PRIMITIF

sont stocks sur des priphriques mmoire de masse (disquette, disque dur, CD Rom).

N'EST PLUS CE QU'IL TAIT

1. ORGANISATION DES

FICHIERS

Vous connaissez tous le coup des papous : chez les papous, il y a les papous papas et les
AUX
ORIGINES DE

papous pas papas. Chez les papous papas, il y a les papous papas poux et les papous papas pas poux, etc. Eh bien les fichiers, c'est un peu pareil : il y a des catgories, et dans les catgories, des sortes, et dans les sortes des espces. Essayons donc de dbroussailler un peu tout cela... Un premier grand critre, qui diffrencie les deux grandes catgories de fichiers, est le suivant : le fichier est-il ou non organis sous forme de lignes successives ? Si oui, cela signifie vraisemblablement que ce fichier contient le mme genre d'information chaque ligne. Ces lignes sont alors appeles des enregistrements. Afin d'illuminer ces propos obscurs, prenons le cas classique, celui d'un carnet d'adresses. Le fichier est destin mmoriser les coordonnes (ce sont toujours les plus mal chausses, bien sr) d'un certain nombre de personnes. Pour chacune, il faudra noter le nom, le prnom, le numro de tlphone et l'email. Dans ce cas, il peut paratre plus simple de stocker une personne par ligne du

L'OPPRESSION DES FEMMES

Mon premier livre : 464 pages propos des socits primitives, des socits prhistoriques, de la famille, des rapports entre les sexes et de bien d'autres choses encore. On est certes fort loin de l'informatique, mais avouez que a n'est pas toujours plus mal. Prix public : 20 .

fichier (par enregistrement). Dit autrement, quand on prendra une ligne, on sera sr qu'elle contient les informations concernant une personne, et uniquement cela. Un fichier ainsi cod sous forme d'enregistrements est appel un fichier texte. En fait, entre chaque enregistrement, sont stocks les octets correspondants aux caractres CR (code Ascii 13) et LF (code Ascii 10), signifiant un retour au dbut de la ligne suivante. Le plus souvent, le langage de programmation, ds lors qu'il s'agit d'un fichier texte, grera lui-mme la lecture et l'criture de ces deux caractres chaque fin de ligne : c'est autant de moins dont le

programmeur aura s'occuper. Le programmeur, lui, n'aura qu' dire la machine de lire une ligne,
Disponible (entre autres) la FNAC. Critiques, ractions et discussions lies l'ouvrage sur mon blog.

ou d'en crire une. Ce type de fichier est couramment utilis ds lors que l'on doit stocker des informations pouvant tre assimiles une base de donnes. Le second type de fichier, vous l'aurez devin, se dfinit a contrario : il rassemble les fichiers qui ne possdent pas de structure de lignes (d'enregistrement). Les octets, quels qu'il soient, sont crits la queue leu leu. Ces fichiers sont appels des fichiers binaires. Naturellement, leur structure diffrente implique un traitement diffrent par le programmeur. Tous les fichiers qui ne codent pas une base de donnes sont obligatoirement des fichiers binaires : cela concerne par exemple un fichier son, une image, un programme excutable, etc. . Toutefois, on en dira quelques mots un peu plus loin, il est toujours possible d'opter pour une structure binaire mme dans le cas o le fichier reprsente une base de donnes.

Ne manquez pas mon groupe de country-rock, les incroyables Moonlight Swampers !

Vous aimez les petites btes qui vivent sous l'eau ? Faites donc un tour vers mes photos sous-marines Des remarques ? Des suggestions ? Des compliments ? Des injures ?

Autre diffrence majeure entre fichiers texte et fichiers binaires : dans un fichier texte, toutes les donnes sont crites sous forme de... texte (tonnant, non ?). Cela veut dire que les nombres y sont reprsents sous forme de suite de chiffres (des chanes de caractres). Ces nombres doivent donc tre convertis en chanes lors de l'criture dans le fichier. Inversement, lors de la lecture du fichier, on devra convertir ces chanes en nombre si l'on veut pouvoir les utiliser dans des calculs. En revanche, dans les fichiers binaires, les donnes sont crites l'image exact de leur codage en mmoire vive, ce qui pargne toutes ces oprations de conversion.

Ecrivez-moi !

Ceci a comme autre implication qu'un fichier texte est directement lisible, alors qu'un fichier binaire ne l'est pas(sauf bien sr en crivant soi-mme un programme appropri). Si l'on ouvre un fichier texte via un diteur de textes, comme le bloc-notes de Windows, on y reconnatra toutes les informations (ce sont des caractres, stocks comme tels). La mme chose avec un fichier binaire ne nous produit l'cran qu'un galimatias de scribouillis incomprhensibles.

2. STRUCTURE DES

Retour Haut de Page

ENREGISTREMENTS

Savoir que les fichiers peuvent tre structurs en enregistrements, c'est bien. Mais savoir comment sont leur tour structurs ces enregistrements, c'est mieux. Or, l aussi, il y a deux grandes possibilits. Ces deux grandes variantes pour structurer les donnes au sein dun fichier texte sont la dlimitation et les champs de largeur fixe. Reprenons le cas du carnet dadresses, avec dedans le nom, le prnom, le tlphone et l'email. Les donnes, sur le fichier texte, peuvent tre organises ainsi :
Structure n1 "Fonfec";"Sophie";0142156487;"fonfec@yahoo.fr" "Ztofrais";"Mlanie";0456912347;"ztofrais@free.fr" "Herbien";"Jean-Philippe";0289765194;"vantard@free.fr" "Hergbel";"Octave";0149875231;"rg@aol.fr"

ou ainsi :
Structure n2 Fonfec Ztofrais Sophie Mlanie 0142156487fonfec@yahoo.fr 0456912347ztofrais@free.fr

Herbien Hergbel

Jean-Philippe Octave

0289765194vantard@free.fr 0149875231rg@aol.fr

La structure n1 est dite dlimite ; Elle utilise un caractre spcial, appel caractre de dlimitation, qui permet de reprer quand finit un champ et quand commence le suivant. Il va de soi que ce caractre de dlimitation doit tre strictement interdit lintrieur de chaque champ, faute de quoi la structure devient proprement illisible. La structure n2, elle, est dite champs de largeur fixe. Il ny a pas de caractre de dlimitation, mais on sait que les x premiers caractres de chaque ligne stockent le nom, les y suivants le prnom, etc. Cela impose bien entendu de ne pas saisir un renseignement plus long que le champ prvu pour laccueillir.

Lavantage de la structure n1 est son faible encombrement en place mmoire ;

il ny a aucun espace perdu, et un fichier texte cod de cette manire occupe le minimum de place possible. Mais elle possde en revanche un inconvnient majeur, qui est la lenteur de la lecture. En effet, chaque fois que lon rcupre une ligne dans le fichier, il faut alors parcourir un par un tous les caractres pour reprer chaque occurrence du caractre de sparation avant de pouvoir dcouper cette ligne en diffrents champs.

La structure n2, linverse, gaspille de la place mmoire, puisque le fichier est

un vrai gruyre plein de trous. Mais dun autre ct, la rcupration des diffrents champs est trs rapide. Lorsquon rcupre une ligne, il suffit de la dcouper en diffrentes chanes de longueur prdfinie, et le tour est jou. A lpoque o la place mmoire cotait cher, la structure dlimite tait souvent privilgie. Mais depuis bien des annes, la quasi-totalit des logiciels et des programmeurs optent pour la structure en champs de largeur fixe. Aussi, sauf mention contraire, nous ne travaillerons quavec des fichiers btis sur cette structure. Remarque importante : lorsqu'on choisit de coder une base de donnes sous forme de champs de largeur fixe, on peut alors trs bien opter pour un fichier binaire. Les enregistrements y seront certes la queue leu leu, sans que rien ne nous signale la jointure entre chaque enregistrement. Mais si on sait combien d'octets mesure invariablement chaque champ, on sait du coup combien d'octets mesure chaque enregistrement. Et on peut donc trs facilement rcuprer les informations : si je sais que dans mon carnet d'adresse, chaque individu occupe mettons 75 octets, alors dans mon fichier binaire, je dduis que l'individu n1 occupe les octets 1 75, l'individu n2 les octets 76 150, l'individu n3 les octets 151 225, etc.

3. TYPES DACCS

Retour Haut de Page

On vient de voir que lorganisation des donnes au sein des enregistrements du fichier pouvait seffecteur selon deux grands choix stratgiques. Mais il existe une autre ligne de partage des fichiers : le type daccs, autrement dit la manire dont la machine va pouvoir aller rechercher les informations contenues dans le fichier. On distingue :

Laccs squentiel : on ne peut accder qu la donne suivant celle quon vient

de lire. On ne peut donc accder une information qu'en ayant au pralable examin celle qui la prcde. Dans le cas d'un fichier texte, cela signifie qu'on lit le fichier ligne par ligne (enregistrement par enregistrement).

Laccs direct (ou alatoire) : on peut accder directement lenregistrement

de son choix, en prcisant le numro de cet enregistrement. Mais cela veut souvent dire une gestion fastidieuse des dplacements dans le fichier.

Laccs index : pour simplifier, il combine la rapidit de l'accs direct et la de l'accs squentiel (en restant toutefois plus compliqu). Il est

simplicit

particulirement adapt au traitement des gros fichiers, comme les bases de donnes importantes. A la diffrence de la prcdente, cette typologie ne caractrise pas la structure elle-mme du fichier. En fait, tout fichier peut tre utilis avec lun ou lautre des trois types daccs. Le choix du type daccs nest pas un choix qui concerne le fichier lui-mme, mais uniquement la manire dont il va tre trait par la machine. Cest donc dans le programme, et seulement dans le programme, que lon choisit le type daccs souhait. Pour conclure sur tout cela, voici un petit tableau rcapitulatif :

Fichiers Texte On les utilise pour stocker... Ils sont structurs sous forme de... Les donnes y sont crites... Les enregistrements sont eux-mmes structurs... Lisibilit des bases de donnes lignes (enregistrements) exclusivement en tant que caractres au choix, avec un sparateur ou en champs de largeur fixe Le fichier est lisible clairement avec n'importe quel diteur de texte On ne peut lire le fichier que ligne par ligne

Fichiers Binaires tout, y compris des bases de donnes. Ils n'ont pas de structure apparente. Ce sont des octets crits la suite les uns des autres. comme en mmoire vive en champs de largeur fixe, s'il s'agit d'un fichier codant des enregistrements Le fichier a l'apparence d'une suite d'octets illisibles On peut lire les octets de son choix (y compris la totalit du fichier d'un coup)

Lecture du fichier

Dans le cadre de ce cours, on se limitera volontairement au type de base : le fichier texte en accs squentiel. Pour des informations plus compltes sur la gestion des fichiers binaires et des autres types d'accs, il vous faudra... chercher ailleurs.

4. INSTRUCTIONS (FICHIERS

TEXTE EN ACCS SQUENTIEL)

Retour Haut de Page

Si lon veut travailler sur un fichier, la premire chose faire est de louvrir. Cela se fait en attribuant au fichier un numro de canal. On ne peut ouvrir quun seul fichier par canal, mais quel que soit le langage, on dispose toujours de plusieurs canaux, donc pas de soucis. Limportant est que lorsquon ouvre un fichier, on stipule ce quon va en faire : lire, crire ou ajouter.

Si on ouvre un fichier pour lecture, on pourra uniquement rcuprer les

informations quil contient, sans les modifier en aucune manire. Si on ouvre un fichier pour criture, on pourra mettre dedans toutes les

informations que lon veut. Mais les informations prcdentes, si elles existent, seront intgralement crases Et on ne pourra pas accder aux informations qui existaient prcdemment.

Si on ouvre un fichier pour ajout, on ne peut ni lire, ni modifier les informations

existantes. Mais on pourra, comme vous commencez vous en douter, ajouter de nouvelles lignes (je rappelle qu'au terme de lignes, on prfrera celui denregistrements. Au premier abord, ces limitations peuvent sembler infernales. Au deuxime rabord, elles le sont effectivement. Il n'y a mme pas d'instructions qui permettent de supprimer un enregistrement d'un fichier ! Toutefois, avec un peu dhabitude, on se rend compte que malgr tout, mme si ce nest pas toujours marrant, on peut quand mme faire tout ce quon veut avec ces fichiers squentiels. Pour ouvrir un fichier texte, on crira par exemple :
Ouvrir "Exemple.txt" sur 4 en Lecture

Ici, "Exemple.txt" est le nom du fichier sur le disque dur, 4 est le numro de canal, et ce fichier a donc t ouvert en lecture. Vous laviez sans doute pressenti. Allons plus loin :
Variables Truc, Nom, Prnom, Tel, Mail en Caractres Dbut Ouvrir "Exemple.txt" sur 4 en Lecture LireFichier 4, Truc Nom Mid(Truc, 1, 20) Prnom Mid(Truc, 21, 15) Tel Mid(Truc, 36, 10) Mail Mid(Truc, 46, 20)

Linstruction LireFichier rcupre donc dans la variable spcifie lenregistrement suivant dans le fichier... "suivant", oui, mais par rapport quoi ? Par rapport au dernier enregistrement lu. Cest en cela que le fichier est dit squentiel. En loccurrence, on rcupre donc la premire ligne, donc, le premier enregistrement du fichier, dans la variable Truc. Ensuite, le fichier tant organis sous forme de champs de largeur fixe, il suffit de trononner cette variable Truc en autant de morceaux quil y a de champs dans lenregistrement, et denvoyer ces tronons dans diffrentes variables. Et le tour est jou. La suite du raisonnement simpose avec une logique impitoyable : lire un fichier squentiel de bout en bout suppose de programmer une boucle. Comme on sait rarement lavance combien denregistrements comporte le fichier, la combine consiste neuf fois sur dix utiliser la fonction EOF (acronyme pour End Of File). Cette fonction renvoie la valeur Vrai si on a atteint la fin du fichier (auquel cas une lecture supplmentaire dclencherait une erreur). Lalgorithme, ultra classique, en pareil cas est donc :
Variable Truc en Caractre Dbut Ouvrir "Exemple.txt" sur 5 en Lecture Tantque Non EOF(5)

LireFichier 5, Truc FinTantQue Fermer 5 Fin

Et neuf fois sur dix galement, si lon veut stocker au fur et mesure en mmoire vive les informations lues dans le fichier, on a recours un ou plusieurs tableaux. Et comme on ne sait pas davance combien il y aurait denregistrements dans le fichier, on ne sait pas davantage combien il doit y avoir demplacements dans les tableaux. Quimporte, les programmeurs avertis que vous tes connaissent la combine des tableaux dynamiques. En rassemblant lensemble des connaissances acquises, nous pouvons donc crire le prototype du code qui effectue la lecture intgrale dun fichier squentiel, tout en recopiant lensemble des informations en mmoire vive :
Tableaux Nom(), Prnom(), Tel(), Mail() en Caractre Dbut Ouvrir "Exemple.txt" sur 5 en Lecture i -1 Tantque Non EOF(5) LireFichier 5, Truc i i + 1 Redim Nom(i) Redim Prnom(i) Redim Tel(i) Redim Mail(i) Nom(i) Mid(Truc, 1, 20) Prnom(i) Mid(Truc, 21, 15) Tel(i) Mid(Truc, 36, 10) Mail(i) Mid(Truc, 46, 20) FinTantQue Fermer 5 Fin

Ici, on a fait le choix de recopier le fichier dans quatre tableaux distincts. On aurait pu galement tout recopier dans un seul tableau : chaque case du tableau aurait alors t occupe par une ligne complte (un enregistrement) du fichier. Cette solution nous aurait fait gagner du temps au dpart, mais elle alourdit ensuite le code, puisque chaque fois que l'on a besoin d'une information au sein d'une case du tableau, il faudra aller procder une extraction via la fonction MID. Ce qu'on gagne par un bout, on le perd donc par l'autre. Mais surtout, comme on va le voir bientt, il y a autre possibilit, bien meilleure, qui cumule les avantages sans avoir aucun des inconvnients. Nanmoins, ne nous impatientons pas, chaque chose en son temps, et revenons pour le moment la solution que nous avons employe ci-dessus. Pour une opration dcriture, ou dajout, il faut dabord imprativement, sous peine de semer la panique dans la structure du fichier, constituer une chane quivalente la nouvelle ligne du fichier. Cette chane doit donc tre calibre de la bonne manire, avec les diffrents champs qui tombent aux emplacements corrects. Le moyen le plus simple pour spargner de longs traitements est de procder avec des chanes correctement dimensionnes

ds leur dclaration (la plupart des langages offrent cette possibilit) :


Ouvrir "Exemple.txt" sur 3 en Ajout Variable Truc en Caractre Variables Nom*20, Prnom*15, Tel*10, Mail*20 en Caractre

Une telle dclaration assure que quel que soit le contenu de la variable Nom, par exemple, celle-ci comptera toujours 20 caractres. Si son contenu est plus petit, alors un nombre correct despaces sera automatiquement ajout pour combler. Si on tente dy entrer un contenu trop long, celui-ci sera automatiquement tronqu. Voyons la suite :
Nom "Jokers" Prnom "Midnight" Tel "0348946532" Mail "allstars@rockandroll.com" Truc Nom & Prnom & Tel & Mail EcrireFichier 3, Truc

Et pour finir, une fois quon en a termin avec un fichier, il ne faut pas oublier de fermer ce fichier. On libre ainsi le canal quil occupait (et accessoirement, on pourra utiliser ce canal dans la suite du programme pour un autre fichier ou pour le mme).

Exercice 10.1 Exercice 10.2 Exercice 10.3

5. STRATGIES

Retour Haut de Page

DE TRAITEMENT

Il existe globalement deux manires de traiter les fichiers textes : lune consiste sen tenir au fichier proprement dit, c'est--dire modifier

directement (ou presque) les informations sur le disque dur. Cest parfois un peu acrobatique, lorsquon veut supprimer un lment dun fichier : on programme alors une boucle avec un test, qui recopie dans un deuxime fichier tous les lments du premier fichier sauf un ; et il faut ensuite recopier intgralement le deuxime fichier la place du premier fichier Ouf.

lautre stratgie consiste, comme on la vu, passer par un ou plusieurs

tableaux. En fait, le principe fondamental de cette approche est de commencer, avant toute autre chose, par recopier lintgralit du fichier de dpart en mmoire vive. Ensuite, on ne manipule que cette mmoire vive (concrtement, un ou plusieurs tableaux). Et lorsque le traitement est termin, on recopie nouveau dans l'autre sens, depuis la mmoire vive vers le fichier dorigine. Les avantages de la seconde technique sont nombreux, et 99 fois sur 100, c'est ainsi qu'il faudra procder :

la rapidit : les accs en mmoire vive sont des milliers de fois plus rapides

(nanosecondes) que les accs aux mmoires de masse (millisecondes au mieux pour un

disque dur). En basculant le fichier du dpart dans un tableau, on minimise le nombre ultrieur d'accs disque, tous les traitements tant ensuite effectus en mmoire.

la facilit de programmation : bien quil faille crire les instructions de

recopie du fichier dans le tableau, pour peu quon doive tripoter les informations dans tous les sens, cest largement plus facile de faire cela avec un tableau quavec des fichiers. Pourquoi, alors, demanderez-vous haletants, ne fait-on pas cela tous les coups ? Y a-t-il des cas o il vaut mieux en rester aux fichiers et ne pas passer par des tableaux ? La recopie dun trs gros fichier en mmoire vive exige des ressources qui peuvent atteindre des dimensions considrables. Donc, dans le cas d'immenses fichiers (trs rares, cependant), cette recopie en mmoire peut s'avrer problmatique. Toutefois, lorsque le fichier contient des donnes de type non homognes (chanes, numriques, etc.) cela risque dtre coton pour le stocker dans un tableau unique : il va falloir dclarer plusieurs tableaux, dont le maniement au final peut tre aussi lourd que celui des fichiers de dpart. A moins... d'utiliser une ruse : crer des types de variables personnaliss, composs dun collage de plusieurs types existants (10 caractres, puis un numrique, puis 15 caractres, etc.). Ce type de variable s'appelle un type structur. Cette technique, bien quelle ne soit pas vraiment difficile, exige tout de mme une certaine aisance... Voil pourquoi on va maintenant en dire quelques mots.

Retour Haut de Page

6. DONNES

STRUCTURES

6.1 Donnes structures simples Nostalgiques du Lego, cette partie va vous plaire. Comment construire des trucs pas possibles et des machins pas croyables avec juste quelques lments de base ? Vous n'allez pas tarder le savoir... Jusqu' prsent, voil comment se prsentaient nos possibilits en matire de mmoire vive : nous pouvions rserver un emplacement pour une information d'un certain type. Un tel emplacement s'appelle une variable (quand vous en avez assez de me voir radoter, vous le dites). Nous pouvions aussi rserver une srie d'emplacement numrots pour une srie d'informations de mme type. Un tel emplacement s'appelle un tableau (mme remarque). Eh bien toujours plus haut, toujours plus fort, voici maintenant que nous pouvons rserver une srie d'emplacements pour des donnes de type diffrents. Un tel emplacement s'appelle une variable structure. Son utilit, lorsqu'on traite des fichiers texte (et mme, des fichiers en gnral), saute aux yeux : car on va pouvoir calquer chacune des lignes du fichier en mmoire vive, et considrer que chaque enregistrement sera recopi dans une variable et une seule, qui lui sera adapte. Ainsi, le problme du "dcoupage" de chaque enregistrement en diffrentes variables (le nom, le prnom, le numro de tlphone, etc.) sera rsolu d'avance, puisqu'on aura une structure, un gabarit, en quelque sorte, tout prt d'avance pour accueillir

et prdcouper nos enregistrements. Attention toutefois ; lorsque nous utilisions des variables de type prdfini, comme des entiers, des boolens, etc. nous n'avions qu'une seule opration effectuer : dclarer la variable en utilisant un des types existants. A prsent que nous voulons crer un nouveau type de variable (par assemblage de types existants), il va falloir faire deux choses : d'abord, crer le type. Ensuite seulement, dclarer la (les) variable(s) d'aprs ce type. Reprenons une fois de plus l'exemple du carnet d'adresses. Je sais, c'est un peu comme mes blagues, a lasse (l, pour ceux qui s'endorment, je signale qu'il y a un jeu de mots), mais c'est encore le meilleur moyen d'avoir un point de comparaison. Nous allons donc, avant mme la dclaration des variables, crer un type, une structure, calque sur celle de nos enregistrements, et donc prte les accueillir :
Structure Bottin Nom en Caractre * 20 Prnom en Caractre * 15 Tel en Caractre * 10 Mail en Caractre * 20 Fin Structure

Ici, Bottin est le nom de ma structure. Ce mot jouera par la suite dans mon programme exactement le mme rle que les types prdfinis comme Numrique, Caractre ou Boolen. Maintenant que la structure est dfinie, je vais pouvoir, dans la section du programme o s'effectuent les dclarations, crer une ou des variables correspondant cette structure :
Variable Individu en Bottin

Et si cela me chantait, je pourrais remplir les diffrentes informations contenues au sein de la variable Individu de la manire suivante :
Individu "Joker", "Midnight", "0348946532", "allstars@rock.com"

On peut aussi avoir besoin d'accder un seul des champs de la variable structure. Dans ce cas, on emploie le point :
Individu.Nom "Joker" Individu.Prnom "Midnight" Individu.Tel "0348946532" Individu.Mail "allstars@rockandroll.com"

Ainsi, crire correctement une information dans le fichier est un jeu d'enfant, puisqu'on dispose d'une variable Individu au bon gabarit. Une fois remplis les diffrents champs de cette variable - ce qu'on vient de faire -, il n'y a plus qu' envoyer celle-ci directement dans le fichier. Et zou !
EcrireFichier 3, Individu

De la mme manire, dans l'autre sens, lorsque j'effectue une opration de lecture dans le fichier Adresses, ma vie en sera considrablement simplifie : la structure tant faite pour cela, je peux dornavant me contenter de recopier une ligne du fichier dans une variable de type Bottin, et le tour sera jou. Pour charger l'individu suivant du fichier en mmoire vive, il me suffira donc d'crire :

LireFichier 5, Individu

Et l, direct, j'ai bien mes quatre renseignements accessibles dans les quatre champs de la variable individu. Tout cela, videmment, parce que la structure de ma variable Individu correspond parfaitement la structure des enregistrements de mon fichier. Dans le cas contraire, pour reprendre une expression connue, on ne dcoupera pas selon les pointills, et alors, je pense que vous imaginez le carnage...

6.2 Tableaux de donnes structures Et encore plus loin, encore plus vite et encore plus fort. Si partir des types simples, on peut crer des variables et des tableaux de variables, vous me voyez venir, partir des types structurs, on peut crer des variables structures... et des tableaux de variables structures. L, bien que pas si difficile que cela, a commence devenir vraiment balze. Parce que cela veut dire que nous disposons d'une manire de grer la mmoire vive qui va correspondre exactement la structure d'un fichier texte (d'une base de donnes). Comme les structures se correspondent parfaitement, le nombre de manipulations effectuer, autrement dit de lignes de programme crire, va tre rduit au minimum. En fait, dans notre tableau structur, les champs des emplacements du tableau correspondront aux champs du fichier texte, et les indices des emplacements du tableaux correspondront aux diffrentes lignes du fichier. Voici, titre d'illustration, l'algorithme complet de lecture du fichier Adresses et de sa recopie intgrale en mmoire vive, en employant un tableau structur.
Structure Bottin Nom en Caractre * 20 Prnom en Caractre * 15 Tel en Caractre * 10 Mail en Caractre * 20 Fin Structure Tableau Mespotes() en Bottin Dbut Ouvrir "Exemple.txt" sur 3 en Lecture i -1 Tantque Non EOF(3) i i + 1 Redim Mespotes(i) LireFichier 3, Mespotes(i) FinTantQue Fermer 3 Fin

Une fois que ceci est rgl, on a tout ce qu'il faut ! Si je voulais crire, un moment, le mail de l'individu n13 du fichier (donc le n12 du tableau) l'cran, il me suffirait de passer l'ordre :
Ecrire Mespotes(12).Mail

Et voil le travail. Simplissime, non ? REMARQUE FINALE SUR LES DONNES STRUCTURES Mme si le domaine de prdilection des donnes structures est la gestion de fichiers, on peut

tout fait y avoir recours dans d'autres contextes, et organiser plus systmatiquement les variables d'un programme sous la forme de telles structures. En programmation dite procdurale, celle que nous tudions ici, ce type de stratgie reste relativement rare. Mais rare ne veut pas dire interdit, ou mme inutile. Et nous aurons l'occasion de voir qu'en programmation objet, ce type d'organisation des donnes devient fondamental. Mais ceci est un autre cours...

Retour Haut de Page

7. RCAPITULATIF

GNRAL

Lorsqu'on est amen travailler avec des donnes situes dans un fichier, plusieurs choix, en partie indpendants les uns des autres, doivent tre faits :

sur l'organisation en enregistrements du fichier (choix entre fichier texte ou

fichier binaire) sur le mode d'accs aux enregistrements du fichier (direct ou squentiel) sur l'organisation des champs au sein des enregistrements (prsence de

sparateurs ou champs de largeur fixe) sur la mthode de traitement des informations (recopie intgrale pralable du

fichier en mmoire vive ou non) sur le type de variables utilises pour cette recopie en mmoire vive

(plusieurs tableaux de type simple, ou un seul tableau de type structur). Chacune de ces options prsente avantages et inconvnients, et il est impossible de donner une rgle de conduite valable en toute circonstance. Il faut connatre ces techniques, et savoir choisir la bonne option selon le problme traiter. Voici une srie de (pas toujours) petits exercices sur les fichiers texte, que l'on pourra traiter en employant les types structurs (c'est en tout cas le cas dans les corrigs).

Exercice 10.4 Exercice 10.5 Exercice 10.6 Exercice 10.7 Exercice 10.8 Exercice 10.9
Et en conclusion de la conclusion, voil plusieurs remarques fondamentales : REMARQUE N1 Lorsqu'on veut rcuprer des donnes numriques inscrites dans un fichier texte, il ne faut surtout pas oublier que ces donnes se prsentent forcment sous forme de caractres. La rcupration elle-mme transmettra donc obligatoirement des donnes de type alphanumrique ; pour utiliser ces donnes des fins ultrieures de calcul, il sera donc

ncessaire d'employer une fonction de conversion. Cette remarque ne s'applique videmment pas aux fichiers binaires. REMARQUE N1bis Voil pourquoi une structure s'appliquant aux fichiers textes est forcment compose uniquement de types caractres. Une structure traitant de fichiers binaires pourrait en revanche tre compose de caractres, de numriques et de boolens. REMARQUE N2 Plusieurs langages interdisent l'criture d'une variable structure dans un fichier texte, ne l'autorisant que pour un fichier binaire. Si l'on se trouve dans ce cas, cela signifie qu'on peut certes utiliser une structure, ou un tableau de structures, mais condition d'crire sur le fichier champ par champ, ce qui annule une partie du bnfice de la structure. Nous avons postul ici que cette interdiction n'existait pas ; en tenir compte ne changerait pas fondamentalement les algorithmes, mais alourdirait un peu le code pour les lignes traitant de l'criture dans les fichiers.

Retour Haut de Page

You might also like