Fichier texte
Transcription
Fichier texte
Formation continue Les fichiers comme Entrées – sorties Hervé Locteau Université de Nancy 2 [email protected] L'intérêt des fichiers Une variable est une cellule mémoire volatile, sa durée de vie correspond à celle de l'exécution du programme (ou d'une fonction) dans lequel elle est déclarée. Solution : exporter / importer les informations acquises, les résultat de calculs vers/à partir de la mémoire auxiliaire (disques durs internes/externes, CDROM, DVD, clefs USB), un support rémanent. Fonctionnalités de manipulation des fichiers création d'un fichier, lecture d'un fichier, modification d'un fichier. L'application qui ouvre un fichier en lecture n'est pas nécessairement celle qui l'a créée, mais le format d'échange (la syntaxe, le vocabulaire) est connue. Année univ. 2009/2010 Formation continue – Algorithmique – Fichier texte Définition : une organisation séquentielle en lignes (chaque ligne étant constitués de caractères). Marqueurs spéciaux Fin de ligne, notée FDL ou EOL Différentes valeurs selon l'O.S.: 0Dh puis 0Ah sous Windows, 0Dh sous Apple, 0Ah sous Unix (table ASCII 7bits) Fin de fichier, notée FDF ou EOF Exemples 1 Ceci n'est qu'un texte FDL 1 france2;Marie Druker FDL 2 Pour le cours d'algorithmique sur les fichiers FDL 2 france3;Samuel Etienne FDL 3 Cours dispensé en Formation Continue FDL 3 tf1;Claire Chazal FDL 4 Nous sommes le 22 mars 2010 FDL 4 FDF 5 FDF Remarque : le clavier et l'écran (entrée-sortie standard) sont gérés comme des fichiers de type texte. Année univ. 2009/2010 Formation continue – Algorithmique – Primitives d'entrées/sorties (1) Ouverture d'un canal de communication (identifié par un entier) En création : var ← ouvrir( nomLogique, CREATION ) crée d'un nouveau fichier de nom logique (le nom du fichier, son emplacement sur le support), positionne la tête d'E/S sur le premier caractère de la première ligne, et renvoie l'identifiant du canal établi, En consultation : var ← ouvrir( nomLogique, LECTURE ) ouverture du fichier existant ayant pour nom logique nomLogique en le protégeant contre toute modification, positionne la tête d'E/S sur le premier caractère de la première ligne, et renvoie l'identifiant du canal établi, En extension : var ← ouvrir( nomLogique, AJOUT ) ouverture du fichier existant ayant pour nom logique nomLogique et positionne la tête d'E/S sur le dernier caractère de la dernière ligne, et renvoie l'identifiant du canal établi. Année univ. 2009/2010 Formation continue – Algorithmique – Primitives d'entrées/sorties (2) Fermeture : fermer( f ) Écriture : ecrire( f, information ) Lecture : lire( f, var ) retire le verrou sur le fichier d'identifiant f (pour qu'il puisse être modifié), ajoute le marqueur FDF si le mode d'ouverture était CREATION. écrit dans le fichier d'identifiant f, la valeur de information sous forme de chaîne de caractères, quelque soit le type prédéfini de information, positionne la tête d'E/S à la fin de ces informations. Passage à la ligne suivante : ecrire( f, FDL ) (Pour le mode d'ouverture CREATION et AJOUT uniquement) transfert les informations mémorisées au niveau de la tête d'E/S du fichier identifié par f dans la variable var et positionne la tête d'E/S du fichier à la fin de ces informations. Passage à la ligne suivante (premier caractère): lireLigne( f,var ) (Pour le mode d'ouverture LECTURE, si la tête d'E/S le permet) Année univ. 2009/2010 Formation continue – Algorithmique – Exemple simple 0. Fonction unAlgo( Entree nomFichier en chaine ) 1. Debut 2. variables fic, i en Entier 3. variable ch en Chaine 4. variable tc en Tableau[1..6] de Caractere 5. fic ← ouvrir( nomFichier, CREATION ) 6. ecrire( fic, « Debut\n ») 7. ecrire( fic, « variable i en Entier\n » ) 8. ecrire( fic, « i < - - 12» ) 9. fermer( fic ) 10. fic ← ouvrir( nomFichier, AJOUT ) 11. ecrire( fic, « \nFin\n ») 12. fermer( fic ) 13. fic ← ouvrir( nomFichier, LECTURE ) 14. lireLigne( fic, ch ) - - ch ← « Debut » 15. lireLigne( fic, ch ) - - ch ← « variable », lecture jusqu'à espace 17. lire( fic, tc ) - - tc ← ('i', '<', '-', '-', '1',\0), tc a une taille de 6 18. lire( fic, i ) - - i ← 2, lecture d'un entier dans le fichier 19. lireLigne( fic, ch ) - - ch ← « », la tete d'E/S est deja sur FDL 19. lireLigne( fic, ch ) - - ch ← « Fin » 19. fermer( fic ) 20.Fin Année univ. 2009/2010 Formation continue – Algorithmique – Primitives d'entrées/sorties (3) Détection des marqueurs (renvoient vrai si... ) Fin de ligne : var ← fdl( f ) ou Si fdl( f) Alors ... Fin de fichier : var ← fdf( f ) ou Si fdf( f ) Alors … Exercice Écrire une fonction de copie de fichier ayant pour entête (il n'est pas utile de savoir quelle est le format des données) : Fonction copie( Entree source en Chaine, Entree dest en Chaine ) Année univ. 2009/2010 Formation continue – Algorithmique – Primitives d'entrées/sorties (3) Détection des marqueurs (renvoient vrai si... ) Fin de ligne : var ← fdl( f ) ou Si fdl( f) Alors ... Fin de fichier : var ← fdf( f ) ou Si fdf( f ) Alors … Exercice Écrire une fonction de copie de fichier ayant pour entête (il n'est pas utile de savoir quelle est le format des données) : 0. Fonction copie( Entree source en Chaine, Entree dest en Chaine ) 1. Debut 2. variable idSource, idDest en Entier 3. variable c en Caractere 4. idSource ← ouvrir( source, LECTURE ) 5. idDest ← ouvrir( dest, ECRITURE ) 6. TantQue Non( fdf( idSource) ) Faire 7. lire( idSource, c ) 8. ecrire( idDest, c ) 9. FinFaire 10. fermer( idSource ) 11. fermer( idDest ) 12.Fin Année univ. 2009/2010 Formation continue – Algorithmique – Accès séquentiel et traitement des données Nous ne considérons que les fichiers séquentiels mais le mode d'accès aux informations peut être direct (cours C) La suppression d'une ligne n'est pas possible directement; il faut écrire ce qui doit l'être et omettre les lignes en question en passant par un autre fichier ou un tableau, une liste, ... Pour faciliter les opérations de lecture, on peut recourir à des écritures de longueurs fixes (au détriment de la taille des fichiers et de la flexibilité des informations véhiculées). 1 Exemple Claire Chazal tf1 1956 FDL Taille en caract. 2 3 Champ1 Champ2 Champ3 Champ4 7 10 7 4 Année univ. 2009/2010 4 5 6 7 8 Marie Drucker france21974 David Pujadas france21964 Samuel Etienne france31971 Bruce Toussaint canal+ 1973 LaurentDelahoussefrance21969 Audrey Pulvar i-tele 1972 FDF Formation continue – Algorithmique – FDL FDL FDL FDL FDL FDL