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