Les fichiers
I. Introduction
Les informations stockés dans un tableau sont volatiles c'ad qu'on les perds à la fin de l'exécution d'un programme , par contre les informations sauvegardés dans un fichier sont permanentes .
Un tableau doit toujours avoir une taille fixe contrairement à un fichier qui est théoriquement illimité .
La notion de fichiers est très importante en informatique .
Un tableau doit toujours avoir une taille fixe contrairement à un fichier qui est théoriquement illimité .
La notion de fichiers est très importante en informatique .
II. Définition
Un fichier (file) est un ensemble de données structurées stockées sur un support magnétique interne (CD,disque dur,flash disque...)
On distingue deux techniques de gestion d'un fichier :
Dans notre cas on utilise l'accès séquentiel , c'ad qu'on doit parcourir le fichier depuis le début à chaque fois .
On distingue deux techniques de gestion d'un fichier :
- L'accès séquentiel : qui consiste à traiter les informations séquentiellement c'ad dans l'ordre de leur apparition dans le fichier , si on a besoin d'un élément précis dans un fichier il faut lire tous les éléments qui le précède en commençant par le premier .
- L'accès direct : il consiste à se placer directement sur l'information souhaité sans avoir à parcourir celles qui le précède .
Dans notre cas on utilise l'accès séquentiel , c'ad qu'on doit parcourir le fichier depuis le début à chaque fois .
III. Déclaration
<identificateur> : Fichier de <type_élément>
exp: Var F : Fichier d'entier
exp: Var F : Fichier d'entier
IV. Instructions de manipulation de fichiers
En Langage Algorithmique :
1. Instruction d'Assignation :
Assigner (<Nom_logique_fichier>,<Nom_physique_fichier> )
Cette instruction permet de donner un nom logique au fichier .
exp : Assigner (F, C\File.txt)
Cette instruction permet de donner un nom logique au fichier .
exp : Assigner (F, C\File.txt)
2. Instruction de fin de fichier :
FDF (<Nom_logique_fichier>)
Cette instruction est une fonction qui retourne un booléen , retourne 'vrai' si le curseur est sur le dernier élément du fichier (c'ad qu'on est arrivé à la fin du fichier , et retourne 'faux' sinon .
exp : FDF (F)
Cette instruction est une fonction qui retourne un booléen , retourne 'vrai' si le curseur est sur le dernier élément du fichier (c'ad qu'on est arrivé à la fin du fichier , et retourne 'faux' sinon .
exp : FDF (F)
3. Instruction de lecture :
Lire (<Nom_logique_fichier>)
Cette instruction permet de lire un élément du fichier dans la position courante du curseur .
exp : Lire (F)
Cette instruction permet de lire un élément du fichier dans la position courante du curseur .
exp : Lire (F)
4. Instruction d'écriture :
Ecrire (<Nom_logique_fichier>)
Cette instruction permet d'écrire un élément à la fin du fichier
exp : Ecrire (F)
Cette instruction permet d'écrire un élément à la fin du fichier
exp : Ecrire (F)
5. Instruction de relecture :
Relire(<Nom_logique_fichier>)
Cette instruction permet de positionner le curseur au début du fichier afin de le relire
exp : Relire (F)
Cette instruction permet de positionner le curseur au début du fichier afin de le relire
exp : Relire (F)
6. Instruction de réécriture :
Réécrire (<Nom_logique_fichier>)
Cette instruction permet de créer un nouveau fichier vide ayant comme nom celui désigné par l'instruction .
exp : Réécrire (F)
Cette instruction permet de créer un nouveau fichier vide ayant comme nom celui désigné par l'instruction .
exp : Réécrire (F)
7. Instruction de fermeture d'un fichier :
Fermer (<Nom_logique_fichier>)
Cette instruction permet de fermer un fichier
exp : Fermer (F)
Cette instruction permet de fermer un fichier
exp : Fermer (F)
En Langage C :
Syntaxe d'ouverture d'un fichier :
<pointeur_vers_fichier>= fopen (<nom_fichier> ou <emplacement>,<mode_ouverture>)
exp:
FILE *f
f=fopen ("C:\\desktop\\File.txt","r+")
f=fopen ("Mot.txt","w")
exp:
FILE *f
f=fopen ("C:\\desktop\\File.txt","r+")
f=fopen ("Mot.txt","w")
les modes d'ouvertures :
- "r" : lecture seule. Vous pourrez lire le contenu du fichier, mais pas y écrire. Le fichier doit avoir été créé au préalable.
- "w" : écriture seule. Vous pourrez écrire dans le fichier, mais pas lire son contenu. Si le fichier n'existe pas, il sera créé.
- "a" : mode d'ajout. Vous écrirez dans le fichier, en partant de la fin du fichier. Vous ajouterez donc du texte à la fin du fichier. Si le fichier n'existe pas, il sera créé.
- "r+" : lecture et écriture. Vous pourrez lire et écrire dans le fichier. Le fichier doit avoir été créé au préalable.
- "w+" : lecture et écriture, avec suppression du contenu au préalable. Le fichier est donc d'abord vidé de son contenu, vous pouvez y écrire, et le lire ensuite. Si le fichier n'existe pas, il sera créé.
- "a+" : ajout en lecture / écriture à la fin. Vous écrivez et lisez du texte à partir de la fin du fichier. Si le fichier n'existe pas, il sera créé.
Les instructions de manipulation d'un fichier en langage C :
FILE *fichier
1. Ecrire dans un fichier :
fprintf (fichier,"texte");
2. Lire dans un fichier :
fscanf (fichier,<varibale>);
3. Se déplacer dans un fichier :
ftell (fichier) : indique à quelle position vous êtes actuellement dans le fichier ;
fseek (fichier,<déplacement>,<origine>) : positionne le curseur à un endroit précis ;
rewind (fichier) : remet le curseur au début du fichier (c'est équivalent à demander à la fonction fseek
4. Renomer un fichier :
rename (<Nom_fichier>,<nouveau_nom>);
5. Supprimer un fichier :
remove (<Nom_fichier>);
6. Fermer un fichier :
fclose(<Nom_fichier>);
1. Ecrire dans un fichier :
fprintf (fichier,"texte");
2. Lire dans un fichier :
fscanf (fichier,<varibale>);
3. Se déplacer dans un fichier :
ftell (fichier) : indique à quelle position vous êtes actuellement dans le fichier ;
fseek (fichier,<déplacement>,<origine>) : positionne le curseur à un endroit précis ;
rewind (fichier) : remet le curseur au début du fichier (c'est équivalent à demander à la fonction fseek
4. Renomer un fichier :
rename (<Nom_fichier>,<nouveau_nom>);
5. Supprimer un fichier :
remove (<Nom_fichier>);
6. Fermer un fichier :
fclose(<Nom_fichier>);
V.1 Création d'un fichier :
Language Algorithmique :Algorithme CréaFich
Var F : Fchier d'entiers i , val : entier Début Assigner(F,C/File.txt) //On associe un nom logique au fichier (obligatoire) Réécrire (F) //Permet de créer le fichier F vide Lire (n) Pour i:=1 à n faire Lire (val) Ecrire(F, val) //Permet d'écrire une valeur dans le fichier à la fin Fait Fermer (F) Fin |
Language C :int main()
{ FILE *f; int val,i,n; f=fopen("file.txt","w"); //Si vous ne déclarez pas un emplacment précis du fichier il sera créé automatiquement dans le dossier contenant le code source printf("Saisir le nombre d'éléments \n"); scanf("%d",&n); for(i=0;i<n;i++) { printf("Sasir une valeur \n"); scanf("%d",&val); fprintf(f,"%d",val); }; fclose(f); return 0; } |
Après exécution du programme en language C :
V.2 Affichage des éléments d"un fichier :
Algorithme AffichFich
Var F : Fchier d'entiers
val : entier
Début
Assigner(F,C/File.txt) //On associe un nom logique au fichier (obligatoire)
Relire (F) //Permet de positionner le curseur au début du fichier pour le lire depuis le début
Tantque (NonFDF(F)) Faire
Lire (F, val)
Ecrire(val)
Fait
Fermer (F)
Fin
Var F : Fchier d'entiers
val : entier
Début
Assigner(F,C/File.txt) //On associe un nom logique au fichier (obligatoire)
Relire (F) //Permet de positionner le curseur au début du fichier pour le lire depuis le début
Tantque (NonFDF(F)) Faire
Lire (F, val)
Ecrire(val)
Fait
Fermer (F)
Fin
V.3 Insertion d'une valeur dans un fichier :
Remarque : Comme les valeurs stockés dans un fichiers sont permanentes , tous les traitement passeront par un fichier intermédiaire . A la fin on supprime le fichier initial et on le recrée et on le remplit par les valeurs modifiés dans le fichier intermédiaire
Insertion à la k ème position :
Procédure InsertFich (E/S F: Fichier d'entiers E/ k: entier E/ info: entier )
Var G : Fichier d'entiers
i : entier
Début
//L’assignation se fait dans l'algorithme principal
Relire (F)
Réécrire(G)
i←1
Tantque (NonFDF(F)) ET (i<k) Faire
Lire(F,val)
Ecrire(G,val) //On remplit le fichier intermédiaire
i←i+1
Fait
Si (i=k) Alors
Ecrire(G,info)
FSi
Tantque (NonFDF(F)) Faire
Lire (F,val)
Ecrire(G,val)
Fait
Réecrire(F) //Créer un nouveau fichier remplaçant l'ancien et possédant son nom
Tantque (NonFDF(G)) Faire
Lire(G,val)
Ecrire(F,val)
Fait
Fin
Var G : Fichier d'entiers
i : entier
Début
//L’assignation se fait dans l'algorithme principal
Relire (F)
Réécrire(G)
i←1
Tantque (NonFDF(F)) ET (i<k) Faire
Lire(F,val)
Ecrire(G,val) //On remplit le fichier intermédiaire
i←i+1
Fait
Si (i=k) Alors
Ecrire(G,info)
FSi
Tantque (NonFDF(F)) Faire
Lire (F,val)
Ecrire(G,val)
Fait
Réecrire(F) //Créer un nouveau fichier remplaçant l'ancien et possédant son nom
Tantque (NonFDF(G)) Faire
Lire(G,val)
Ecrire(F,val)
Fait
Fin
Insertion suivant ordre :
Soit F un fichier d'entiers trié par ordre croissant
Procédure InsertFich (E/S F: Fichier d'entiers E/ info: entier )
Var G : Fichier d'entiers
i : entier
Début
//L’assignation se fait dans l'algorithme principal
Relire (F)
Réécrire(G)
i←1
Lire(F,val)
Tantque (NonFDF(F)) ET (val<info) Faire
Ecrire(G,val)
Lire(F,val)
Fait
Ecrire(G,info)
Tantque (NonFDF(F)) Faire
Lire (F,val)
Ecrire(G,val)
Fait
Réecrire(F) //Créer un nouveau fichier remplaçant l'ancien et possédant son nom
Tantque (NonFDF(G)) Faire
Lire(G,val)
Ecrire(F,val)
Fait
Fin
Procédure InsertFich (E/S F: Fichier d'entiers E/ info: entier )
Var G : Fichier d'entiers
i : entier
Début
//L’assignation se fait dans l'algorithme principal
Relire (F)
Réécrire(G)
i←1
Lire(F,val)
Tantque (NonFDF(F)) ET (val<info) Faire
Ecrire(G,val)
Lire(F,val)
Fait
Ecrire(G,info)
Tantque (NonFDF(F)) Faire
Lire (F,val)
Ecrire(G,val)
Fait
Réecrire(F) //Créer un nouveau fichier remplaçant l'ancien et possédant son nom
Tantque (NonFDF(G)) Faire
Lire(G,val)
Ecrire(F,val)
Fait
Fin
V.4 Suppression d'une valeur dans un fichier :
Procédure SuppValFich (E/S F: Fichier d'entiers E/ info: entier )
Var G : Fichier d'entiers
Début
//L’assignation se fait dans l'algorithme principal
Relire (F)
Réécrire(G)
Lire(F,val)
Tantque (NonFDF(F)) ET (val<>info) Faire
Ecrire(G,val)
Lire(F,val)
Fait
Tantque (NonFDF(F)) Faire
Lire (F,val)
Ecrire(G,val)
Fait
//Le fichier G contient toutes les valeurs de F sauf celle de 'info'
Réecrire(F) //Créer un nouveau fichier remplaçant l'ancien et possédant son nom
Tantque (NonFDF(G)) Faire
Lire(G,val)
Ecrire(F,val)
Fait
Fin
Var G : Fichier d'entiers
Début
//L’assignation se fait dans l'algorithme principal
Relire (F)
Réécrire(G)
Lire(F,val)
Tantque (NonFDF(F)) ET (val<>info) Faire
Ecrire(G,val)
Lire(F,val)
Fait
Tantque (NonFDF(F)) Faire
Lire (F,val)
Ecrire(G,val)
Fait
//Le fichier G contient toutes les valeurs de F sauf celle de 'info'
Réecrire(F) //Créer un nouveau fichier remplaçant l'ancien et possédant son nom
Tantque (NonFDF(G)) Faire
Lire(G,val)
Ecrire(F,val)
Fait
Fin
V.5 Fusion de deux fichiers :
Soit F1 et F2 deux fichiers triées , on veut les regrouper dans un 3 ème fichier F3 triée .
Fonction FusionFich (E/F1,F2: fichier d'entiers ): Fichier d'entiers
Var Var val1,val2,val3;
Début
Relire(F1) Relire(F2)
Lire(F1,val) Lire(F2,val)
Tantque (NonFDF(F1))ET(NonFDF(F2)) Faire
Si (val1<val2) Alors Ecrire(F3,val1)
Lire(F1,val1)
Sinon Ecrire(F3,val3)
Ecrire(F2,val2)
FSi
Fait
//Cas où on est arrivé à la fin du fichier F2 mais pas à la fin du fichier F1
Tantque ((NonFDF(F1))ET(val1<=val2)) Faire
Ecrire(F3,val1)
Lire(F1,val1)
Fait
//Cas où on est arrivé à la fin du fichier F1 mais pas à la fin du fichier F2
Tantque(NonFDF(F2)ET(val2<=val1)) Faire
Ecrire(F3,val2)
Lire(F1,val1)
Fait
Retourner(F3)
Fin
Fonction FusionFich (E/F1,F2: fichier d'entiers ): Fichier d'entiers
Var Var val1,val2,val3;
Début
Relire(F1) Relire(F2)
Lire(F1,val) Lire(F2,val)
Tantque (NonFDF(F1))ET(NonFDF(F2)) Faire
Si (val1<val2) Alors Ecrire(F3,val1)
Lire(F1,val1)
Sinon Ecrire(F3,val3)
Ecrire(F2,val2)
FSi
Fait
//Cas où on est arrivé à la fin du fichier F2 mais pas à la fin du fichier F1
Tantque ((NonFDF(F1))ET(val1<=val2)) Faire
Ecrire(F3,val1)
Lire(F1,val1)
Fait
//Cas où on est arrivé à la fin du fichier F1 mais pas à la fin du fichier F2
Tantque(NonFDF(F2)ET(val2<=val1)) Faire
Ecrire(F3,val2)
Lire(F1,val1)
Fait
Retourner(F3)
Fin
VI. Exercices d'application :
Exercice 1 : *
Soit T un vecteur contenant n entiers positifs
- Ecrire une action paramétrée qui permet de remplir un fichier F d'entiers à partir du vecteur T
- Ecrire un algorithme qui permet de créer le fichier F puis l'éclater en deux fichier Fpair et Fimpair qui contiennent respectivement les nombres pairs et impairs du fichier F .
VOIR LA CORRECTION
1.
Type Tab=Tableau[1..n]
Procedure RemplirFich (E/T:TabS/F:fichier d'entier)
Var F,F1,F2:fichier d'entier
Début
Réécrire(F)
Pour i:=1 à n faire
Ecrire(F,T[i])
Fait
Fin
2.
Algorithme Pair_Impair
Var T:Tab
n,val : entier
Début
Lire(n)
pour i:=1 à n faire
Lire(T[i])
Fait
RemplirFich (T ,F)
Tantque (NonFDF(F)) Faire
Lire(F,val)
Si (val mod 2=0) Alors Ecrire(F1,val)
Sinon Ecrire(F2,val)
FSi
Fait
Fermer(F)
Fin
Type Tab=Tableau[1..n]
Procedure RemplirFich (E/T:TabS/F:fichier d'entier)
Var F,F1,F2:fichier d'entier
Début
Réécrire(F)
Pour i:=1 à n faire
Ecrire(F,T[i])
Fait
Fin
2.
Algorithme Pair_Impair
Var T:Tab
n,val : entier
Début
Lire(n)
pour i:=1 à n faire
Lire(T[i])
Fait
RemplirFich (T ,F)
Tantque (NonFDF(F)) Faire
Lire(F,val)
Si (val mod 2=0) Alors Ecrire(F1,val)
Sinon Ecrire(F2,val)
FSi
Fait
Fermer(F)
Fin
Exercice 2 : **
Ecrire un Algorithme qui permet de :
- Créer le fichier MOTS.TXT contenant un série de 50 mots au maximum (longueur minimale d'un mot 20 caractères) . La saisie des mots se terminera à l"introduction du symbole'*' qui ne sera pas écrit dans le fichier .
- Ajouter les instructions qui affichent le nombre de mots ainsi que la longueur moyenne des mots contenant dans le fichier MOTS.TXT .
- Ajouter les instructions qui chargent les mots de plus de 10 caractères du fichier MOTS.TXT dans un deuxième fichier MOTS10.TXT
VOIR LA CORRECTION
Algorithme Exo2
Var F1,F2 ; fichier de chaine[20]
nom1,nom2 : chaine[20]
somme,nb : entier
Début
somme←0
Assigner(F1,Mots.txt)
Assigner(F2,Mots10.txt)
Réécrire(F1)
Réécrire(F2)
Répéter
Ecrire("saisir mot")
Lire(mot)
Ecrire(F1,mot)
nb←nb+1
somme←somme+taille(mot)
Si (taille(mot)>10) Alors
Ecrire(F2,mot)
FSi
Ecrire("saisir le mot de langueur max")
Jusqu'à (mot !='*') OU (nb<50)
Ecrire("Le nombre de mots est",nb,"et la langueur est ",somme/nb)
Fermer(F)
Fin
Var F1,F2 ; fichier de chaine[20]
nom1,nom2 : chaine[20]
somme,nb : entier
Début
somme←0
Assigner(F1,Mots.txt)
Assigner(F2,Mots10.txt)
Réécrire(F1)
Réécrire(F2)
Répéter
Ecrire("saisir mot")
Lire(mot)
Ecrire(F1,mot)
nb←nb+1
somme←somme+taille(mot)
Si (taille(mot)>10) Alors
Ecrire(F2,mot)
FSi
Ecrire("saisir le mot de langueur max")
Jusqu'à (mot !='*') OU (nb<50)
Ecrire("Le nombre de mots est",nb,"et la langueur est ",somme/nb)
Fermer(F)
Fin
Exercice 3 : **
Soit F un fichier contenant des chaines de caractères séparés par un ou plusieurs blancs
Ecrire un Algorithme qui permet de calculer le nombre de mots qui commencent par 'A' et se terminent par 'Z' .
N.B Traiter le cas où le fichier commence par des blancs et le cas où un caractère est erroné .
Ecrire un Algorithme qui permet de calculer le nombre de mots qui commencent par 'A' et se terminent par 'Z' .
N.B Traiter le cas où le fichier commence par des blancs et le cas où un caractère est erroné .
VOIR LA CORRECTION
Algorithme FichAZ
Var
Début
Assigner(F,File.txt)
Relire(F)
NB←0
Tantque (NonFDF(F)) Faire
//On saute les blancs
Répéter Lire(F,x)
Jusqu'à (x!=' ')
i←0
//On regroupe le mot à partir des caractères lues à partir du fichier
Tantque (NonFDF(F))ET(x!=' ') Faire
i←i+1
Mot[i]←x
Lire(F,x)
Fait
Si (Mot[1]='A') ET (Mot[i]='Z') Alors
nb←nb+1
FSi
Fait
Ecrire(nb)
Fermer(F)
Fin
Var
Début
Assigner(F,File.txt)
Relire(F)
NB←0
Tantque (NonFDF(F)) Faire
//On saute les blancs
Répéter Lire(F,x)
Jusqu'à (x!=' ')
i←0
//On regroupe le mot à partir des caractères lues à partir du fichier
Tantque (NonFDF(F))ET(x!=' ') Faire
i←i+1
Mot[i]←x
Lire(F,x)
Fait
Si (Mot[1]='A') ET (Mot[i]='Z') Alors
nb←nb+1
FSi
Fait
Ecrire(nb)
Fermer(F)
Fin
Exercice 4 : ***
Soit F un fichier de nombres entiers non triée .
1. Ecrire une action paramétrée qui permet de chercher le minimum du fichier F1 tout en le supprimant .
2. En utilisant l'action paramétrée précédente , écrire un Algorithme qui permet de trier le fichier F1 dans un deuxième fichier F2 .
N.B Le fichier peut contenir des valeurs répétitives .
1. Ecrire une action paramétrée qui permet de chercher le minimum du fichier F1 tout en le supprimant .
2. En utilisant l'action paramétrée précédente , écrire un Algorithme qui permet de trier le fichier F1 dans un deuxième fichier F2 .
N.B Le fichier peut contenir des valeurs répétitives .
VOIR LA CORRECTION
Exercice 5 : ***
Soit F un fichier de caractères contenant une suite de télégrammes . Chaque télégramme est constitué d'une suite de mots séparés par un ou plusieurs blancs . Le télégramme se termine par le mot FINTEL .
Ecrire un Algorithme qui permet pour chaque télégramme , d'imprimer le texte en respectant les conventions suivantes :
1. Les mots imprimés sont séparés par un seul blanc .
2. Les mots ne peuvent dépasser 12 caractères sinon ils seront tronqués à droite .
3. Le texte de chaque télégramme est suivie de l’indication du nombre total de mots (tronqués ou non) et le nombre de mots tronqués .
4. La fin de chaque télégramme sera indiqué par FINTEL .
Ecrire un Algorithme qui permet pour chaque télégramme , d'imprimer le texte en respectant les conventions suivantes :
1. Les mots imprimés sont séparés par un seul blanc .
2. Les mots ne peuvent dépasser 12 caractères sinon ils seront tronqués à droite .
3. Le texte de chaque télégramme est suivie de l’indication du nombre total de mots (tronqués ou non) et le nombre de mots tronqués .
4. La fin de chaque télégramme sera indiqué par FINTEL .
VOIR LA CORRECTION
Exercice 6 : ***
Soit F un fichier de caractères contenant des phrases , chaque phrase se termine par un point '.' , les mots sont séparés par des espaces .
Ecrire un Algorithme qui permet d'afficher pour chaque phrase :
Ecrire un Algorithme qui permet d'afficher pour chaque phrase :
- Le numéro de la phrase .
- Les mots ayant respectivement le plus grand nombre de consonnes et le plus grand nombre de voyelles et leurs positions dans la phrase .
- Le nombre de mots du fichier.
- Les deux mots ayant respectivement le plus grand nombre de consonnes et le plus grand nombre de voyelles du fichier avec le numero de la phrase où ils se trouvent.
Auteur :
Afrit Hani
Encore des points flous sur les fichiers ?
Posez-nous toutes vos question et nous vous répondrons par mail.