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.