Вы находитесь на странице: 1из 10

Algorithmique Fichiers [fh]

Cours, 15 novembre 2012


Table des mati`eres
1 Les chiers / fh00acours1 3
1.1 Notion de chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Structure dun chier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Types de chiers / fh00acours2 5
2.1 Fichiers ` a acc`es sequentiel . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Fichiers ` a acc`es direct . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Fichiers en mode sequentiel indexe . . . . . . . . . . . . . . . . . . . . . 5
3 Operations sur un chier / fh00acours3 6
3.1 Exploitation dun document . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 Operations pour les chiers `a acc`es sequentiel / fh00acours4 7
4.1 Ouverture dun canal dentree/sortie . . . . . . . . . . . . . . . . . . . . 7
4.2 Modes douverture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
4.3 Fermeture dun canal dentrees/sorties . . . . . . . . . . . . . . . . . . . 8
4.4 Lecture depuis un canal dentree . . . . . . . . . . . . . . . . . . . . . . . 8
4.5

Ecriture sur un canal de sortie . . . . . . . . . . . . . . . . . . . . . . . . 8
4.6 Detection de n de contenu sur un canal dentree . . . . . . . . . . . . . 9
5 Operations pour les chiers `a acc`es direct / fh00acours6 10
1
Unisciel algoprog fh00acours, November 15, 2012 2
== Fichiers Algorithmique ==
Mots-Cles Algorithmique, Fichiers. Requis Structuration de linformation.
Introduction
Toutes les informations que nous avons traitees jusqu`a present ont ete placees dans
une memoire dite volatile ` a laide de variables que nous avons au prealable declarees. Cela
signie que, d`es que lalgorithme ou le programme se termine, les variables disparaissent
de la memoire. Par voie de consequence les donnees stockees disparaissent egalement. Sil
faut pourvoir les stocker dans une memoire permanente cest l` a quintervient la notion
de chier.
La division Cours introduit la notion de chier, decrit les types de chiers puis presente
les operations applicables aux chiers.
La division Auto-evaluations contient les quizz relatifs aux sections du cours.
Les divisions Apprehender / Appliquer / Approfondir le cours et Complements ap-
pliquent les notions introduites ` a travers la gestion de chiers.
Conclusion
References generales
Unisciel algoprog fh00acours, November 15, 2012 3
== Activites Cours ==
1 Les chiers / fh00acours1
1.1 Notion de chier
Par defaut, lors de lexecution dun algorithmes les donnees sont lues depuis le clavier
et les resultats sont achees sur la console dexecution (lecran). Le clavier (en lecture)
et la console dexecution (en ecriture) sont les interfaces dentrees/sorties standards.
Dans certains cas, lalgorithme doit exploiter des donnees provenant dautres sources
que le clavier. Ces donnees sont generalement stockees dans un document externe `a lal-
gorithme. Dans dautres cas, lalgorithme doit conserver les resultats produits dans un
document externe permanent, ce qui nest pas le cas avec la console dexecution o` u les
resultats aches sont perdus lorsque la console est fermee.
La source dinformations externe est le chier.
Denition Un chier est un ensemble de donnees structurees, stockees sur une me-
moire de masse (disque, bande magnetique, zip, etc.). Le chier est identie par un nom
unique au syst`eme de chiers de lordinateur.
Figure 1 Notion de chier
1.2 Structure dun chier
Les donnees se trouvant `a linterieur dun chier peuvent etre :
Structurees en ches. Chaque che se compose de champs denis ` a laide dun Type.
Une succession de donnees de dierentes natures. Dans ce cas, il faut obligatoirement
connatre lordre decriture des donnees an de pouvoir les relire dans le meme
ordre : le syst`eme lit ou ecrit dans le chier un certain nombre doctets qui depend
de la nature de linformation lue ou ecrite. Exemple : si on doit lire un entier et quon
lit un caract`ere, le syst`eme va lire un seul octet au lieu de deux. Le deuxi`eme octet
non lu sera lu lors de la prochaine lecture de donnees et il sera donc associe avec un
Unisciel algoprog fh00acours, November 15, 2012 4
ou plusieurs octets qui nont aucun lien avec lui. Les informations recuperees seront
erronees dans ce cas.
Structurees en caract`eres (chier texte) ou en valeurs numeriques (chier de rele-
ves meteo ou de mesures physiques par exemple). Ce type de chier contient un
ensemble de donnees de nature unique.
En conclusion, il faut toujours connatre la structure dun chier avant de lutiliser.
Unisciel algoprog fh00acours, November 15, 2012 5
2 Types de chiers / fh00acours2
Il existe dierents types de chiers qui conditionnent le mode dacc`es aux donnees du
chier.
2.1 Fichiers `a acc`es sequentiel
Denition Un chier `a acc`es sequentiel est un chier dans lequel on ne peut lire
une donnee ou en enregistrement quapr`es avoir lu les donnees ou les enregistrements
precedents.
Exemple Une bande audio est `a acc`es sequentiel. En eet, on ne peut ecouter une
chanson quapr`es avoir fait deler les chansons precedentes.
2.2 Fichiers `a acc`es direct
Denition Un chier `a acc`es direct est un chier dans lequel chaque enregistrement
a toujours la meme taille et porte un numero relatif ` a son emplacement dans le chier.
Cela autorise un acc`es direct ` a la che souhaitee gr ace `a ce numero.
En fait le chier est decoupe en elements de meme taille, ce qui permet un deplacement
direct sur une che donnee en calculant le nombre doctets qui separent cette che du
debut du chier. Cela est possible car tous les elements precedents ont la meme taille.
Remarque Un chier ` a acc`es direct ne doit pas obligatoirement contenir des enre-
gistrements complexes : il peut etre compose dun ensemble de donnees simples. Nous
pouvons travailler avec des chiers dentiers, des chiers de caract`eres. Cela nous donne
des elements de taille xe : nous respectons donc le principe des chiers ` a acc`es direct.
2.3 Fichiers en mode sequentiel indexe
Denition Un chier en mode sequentiel indexe est un chier de donnees au-
quel on associe un autre chier, appele index, construit ` a partir de certains champs des
enregistrements du chier principal. Ce chier index est toujours trie. Cette organisa-
tion permet dacceder aux donnees de deux mani`eres : sequentiellement sur le chier de
donnees lui-meme ou en mode direct par lintermediaire du chier index.
Remarque Cette gestion dindex nest pas implementee dans la plupart des langages
de programmation mais elle lest dans le cadre des SGBDR (Syst`eme de Gestion de
Bases de Donnees Relationnelles). Ce module naborde pas ce mode dacc`es, bien quil
soit possible de simuler les actions avec deux chiers `a acc`es direct, lun pour le chier
de donnees et lautre pour le chier dindex ou encore avec un chier ` a acc`es sequentiel
pour le chier dindex et un chier ` a acc`es direct pour les donnees.
Unisciel algoprog fh00acours, November 15, 2012 6
3 Operations sur un chier / fh00acours3
Un algorithme qui lit des donnees ou ecrit des resultats dans un chier accomplit une
operation dentree/sortie. Un tel transfert dinformation est eectue via un canal den-
trees/sorties. Linformation traitee via un canal dentrees/sorties est presentee sous forme
textuelle (cest-`a-dire une sequence de caract`eres) dans le document vise. On consid`ere
un canal dentrees/sorties comme une sequence de caract`eres et les references `a un canal
dentrees/sorties se font via un nom de canal.
3.1 Exploitation dun document
Un chier est accede en lecture (chier existant, non modie par lalgorithme) ou en
ecriture (chier cree par lalgorithme).
La logique pour acceder ` a un chier en lecture est toujours la meme :
Une ouverture (voir Ouvrir),
Des lectures (voir Prendre et FinDeFichier),
Une fermeture (voir Fermer).
Lacc`es `a un chier en ecriture repond ` a la logique :
Une ouverture (voir Ouvrir),
Des ecritures (voir Mettre),
Une fermeture (voir Fermer).
Unisciel algoprog fh00acours, November 15, 2012 7
4 Operations pour les chiers `a acc`es sequentiel /
fh00acours4
4.1 Ouverture dun canal dentree/sortie
Syntaxe
Ouvrir ( variableFichier, nomFichier, utilisation )
Explication Cette primitive est necessaire avant toute operation sur un chier, exis-
tant ou non. Elle associe un canal dentrees/sorties ` a un chier et indique le mode
dacc`es (lUtilisation) du canal dentree/sortie : Lecture, Ecriture ou Ajout. La
variableFichier sera utilisee pour toutes les operations sur ce chier par la suite, jusqu` a
sa fermeture. Si aucun chemin de dossiers nest specie avec le nom du chier, le syst`eme
ouvre le chier dans le dossier courant (habituellement le dossier o` u est sauvegarde le
projet en execution).
Remarque Un chier cree et non referme risque de contenir des donnees aleatoires et
invalides.
Le syst`eme peut etre dans limpossibilite douvrir le chier specie pour une ou lautre
des raisons suivantes :
Le chier nexiste pas : lalgorithme tente douvrir en mode lecture un chier in-
existant.
Le chier est dej` a ouvert : lalgorithme tente douvrir un chier qui est dej` a ouvert.
Le canal dentrees/sorties nest pas disponible : lalgorithme tente douvrir un chier
sur un canal dentrees/sorties invalide.
Le nom du chier est invalide : ceci peut etre d u au dossier inexistant, au nom du
chier contenant des caract`eres interdits par le syst`eme dexploitation ou ` a lunite
de stockage defectueuse ou non disponible.
Lorsquil y a erreur ` a louverture dun chier, le syst`eme interrompt lexecution de
lalgorithme et ache un message derreur precisant la cause de lerreur.
4.2 Modes douverture
Trois modes douverture sont supportes :
Lecture : permet de lire le contenu du document `a laide de linstruction lire. Si
le document est inexistant, lexecution de lalgorithme est interrompue.


Ecriture : permet decrire des resultats dans le document ` a laide de linstruction

Ecrire. Le contenu anterieur ` a louverture du document est eace. Si le document


est un chier inexistant, celui-ci est cree.
Ajout : permet decrire des resultats ` a la n du document ` a laide de linstruc-
tion

Ecrire. Le contenu anterieur `a louverture du document est conserve. Si le
document est un chier inexistant, celui-ci est cree.
La principale distinction entre les modes dacc`es

Ecriture et Ajout est au niveau du
contenu anterieur du document :
Le mode

Ecriture eace automatiquement le contenu anterieur du document (c.-
` a-d. si le document existait dej` a, son contenu est eace).
Le mode Ajout preserve le contenu existant, les resultats y etant ecrits `a la n.
Unisciel algoprog fh00acours, November 15, 2012 8
Seule linstruction de lecture (Lire) est autorisee sur un canal dentrees/sorties associe
` a un document ouvert en mode Lecture. Similairement, seule linstruction decriture
(

Ecrire) est autorisee sur un canal dentrees/sorties associe ` a un document ouvert en


mode

Ecriture ou Ajout. Toute instruction de lecture ou decriture invalide sur un
canal dentrees/sorties cause automatiquement larret de lexecution de lalgorithme et
un message derreur approprie est ache.
4.3 Fermeture dun canal dentrees/sorties
Syntaxe
Fermer ( variableFichier )
Explication Ferme le canal dentrees/sorties associe au document.
4.4 Lecture depuis un canal dentree
Syntaxe
Prendre ( variableFichier , nomVariable1 [ , nomVariable2 ...] )
Explication Permet de lire dans le chier reference par la variableFichier, ouvert en
lecture. Un enregistrement est lu et place dans les variables. Cette operation peut echouer
si la n de chier est atteinte. Ceci est decelable gr ace `a la fonction FinDeFichier.
Remarque Le canal dentrees/sorties doit obligatoirement etre associe ` a un document
ouvert en mode Lecture. Toute tentative de lecture visant un canal dentrees/sorties
associe ` a un document ouvert en mode Ecriture ou Ajout cause larret dexecution de
lalgorithme.
4.5

Ecriture sur un canal de sortie
Syntaxe
Mettre ( variableFichier , expression1 [ , expression2 ...] )
Explication Permet de rajouter des donnees dans le chier reference par la variable
chier, ouvert en ecriture. Un enregistrement est cree avec les variables et ecrit dans le
chier, de fa con sequentielle. Cette operation peut echouer si le support utilise pour le
chier est plein.
Remarque Le canal dentrees/sorties doit obligatoirement etre associe ` a un document
ouvert en mode Ecriture ou Ajout. Toute tentative decriture visant un canal den-
trees/sorties associe `a un document ouvert en mode Lecture cause larret dexecution de
lalgorithme.
Unisciel algoprog fh00acours, November 15, 2012 9
4.6 Detection de n de contenu sur un canal dentree
Syntaxe
FinDeFichier ( variableFichier )
Explication Permet de tester quand la n dun chier est atteinte. Elle sutilise uni-
quement avec une variable chier avec laquelle on a auparavant ouvert un chier existant
en lecture (ou entree).
Remarque La primitive nest applicable quaux canaux dentrees/sorties associes en
mode Lecture. Toute invocation de la primitive sur un canal dentrees/sorties associe ` a un
document ouvert en mode Ecriture ou Ajout cause larret dexecution de lalgorithme.
Unisciel algoprog fh00acours, November 15, 2012 10
5 Operations pour les chiers `a acc`es direct / fh00acours6
Dans un chier ` a acc`es direct, les enregistrements ont toujours la meme taille. En
eet, pour pouvoir se rendre directement sur une che donnee, il faut pourvoir la localiser.
Puisque toutes les ches ont la meme taille, un simple calcul permet de trouver le debut du
premier element de la che souhaitee. Pour que le syst`eme dierencie les acc`es sequentiels
des acc`es directs, il existe des procedures et fonctions speciques ` a ces derniers.