Vous êtes sur la page 1sur 32

Les fichiers

Présentés par MAHSEUR Mohammed

1
Introduction
• La mémoire centrale est une mémoire volatile,
donc les variables utilisées dans un programme
ne sont accessibles que pendant le temps
d’exécution,
• Pour conserver les données utilisées par un
programme de façon durable pour pouvoir être
utilisées d’autres fois, il est indispensable
d’utiliser des supports de stockage non volatiles
(disque dur, CD, flash disque,…), ces support
nécessitent la structuration de données sous
forme de FICHIERS, 2
Définition
• Un fichier est un ensemble de données stockées
d’une manière permanente dans une mémoire
secondaire,
• Un fichier possède un nom physique connu par
le système d’exploitation, et un nom logique
(flot) connu par le programme,
• On distingue deux types de fichiers:
 Les fichiers texte
 Les fichiers binaires
3
Fichier texte et fichier binaire
• Un fichier texte est constitué de caractères, il est
organisé en lignes pouvant contenir 255 caractères
chacune, qui se terminent par le caractère de retour
à la ligne, il peut être ouvert par n’importe quel
éditeur de texte,
• Un fichier binaire peut contenir toute sorte de
données sous forme d’une suite d’octets, y compris
les données texte. Les octets d’un fichier binaire ne
sont interprétés que par des logiciels dédiés. Ils sont
lus et écrits tels quels, un fichier binaire peut être
structuré (exemple: fichier BDD) ou non structuré 4

(exemple: fichier MP3)


Fichier texte et fichier binaire
Accès Fichiers
Accès
séquentiel
séquentiel
et direct
Fichiers Fichier
binaires texte

Fichiers
structurés

Fichiers
non
structurés

5
Nom (physique) de fichier
• Le nom de fichier est représenté sous forme de
chaînes de caractères. Ce nom est connu par le
système d’exploitation et l’utilisateur; il doit
respecter les mêmes règles utilisées dans la
nomination de n’importe quel fichier
informatique.
• Exemple: sous Windows, est interdit d’utiliser les
caractères spéciaux suivants (\ / : * ? < > | "),
• Le nom de fichier peut contenir l’arborescence de
sont emplacement, ainsi que son extension,
• Exemple: C:\mesprogrammes\fichier2020.dat 6
Nom (physique) de fichier

• Remarque: si le nom d’un fichier est initialisé


dans un programme C, sachant que l’antislash
prend un sens particulier en C, donc on doit le
redoubler:
• Exemple: C:\\mesprogrammes\\fichier2020.dat
• Si le nom de fichier ne contient aucune
arborescence, alors il sera stocké dans le même
endroit avec le programme qui l’utilise,

7
Flot (fichier logique)
• Pour utiliser un fichier dans un programme, il
est indispensable de déclarer un représentant
de ce fichier dans la mémoire centrale, c’est
le Flot du fichier (fichier logique),
• Un flot est une séquence continue d’octets de
données.

8
Flot (fichier logique)
• Un flot est lié a un fichier par l’opération
d’ouverture (en langage C),
• Exemple en algorithmiques :
FFouvrir(’’Nomfichier ’’,’’ModeOuverture’’)
• Ou bien par l’assignation (en Pascal),
• Exemple en algorithmiques:
Assigner (F, ’’Nomfichier ’’)

9
Ouverture d’un fichier
Pour utiliser un fichier dans un programme il faut
l’ouvrir, on peut ouvrir un fichier en:
• Mode écriture: le programme peut envoyer des
données vers le fichier, Si le fichier n’existe pas, il
est créé. S’il existe déjà, son contenu est effacé.
• Mode lecture: les données du fichier peuvent être
entrées dans le programme
• Mode mise à jour : Si le fichier n’existe pas, il est
créé. S’il existe déjà, les nouvelles informations
sont ajoutées à la fin. 10
Mode écriture
FFouvrir("fichier2020.dat",’’ modecriture");
Ou bien : Reecrire(F)

Mode lecture
FFouvrir("fichier2020.dat",’’ modelecture");
Ou bien : Relire(F)

Mode mise à jour


FFouvrir("fichier2020.dat",’’ modeMAJ");
Ou bien : Rajouter(F)
11
Ecrire une valeur VAL

• ECRIRE(F,VAL): Permet d’écrire une valeur


VAL de type quelconque dans la position
courante du pointeur du fichier,

Lire une valeur dans VAL


• LIRE(F,VAL): Permet de lire une valeur a
partir de la position courante du pointeur du
fichier et de la ranger dans la variable VAL ,
 Après une opération de lecture ou écriture, le pointeur12 de
position passe automatiquement à la position suivante,
Autres fonctions
• FERMER(F): Permet de fermer un fichier ouvert;
• SUPPRIMER(NomFichier): Permet de supprimer
un fichier fermé,
• RENOMMER(’’ancien nom physique ’’, ’’nouveau
nom physique’’): Permet de renommer le nom
physique d’un fichier fermé,
• FDF(F): fonction booléenne qui retourne vrai à la
fin de fichier (cette fonction prend une valeur
après une opération de lecture), 13
Fichiers binaires d’enregistrements en C
• Déclarer un flot de fichier

• Assigner et ouvrir un fichier en mode écriture

• Assigner et ouvrir un fichier en mode lecture

• Assigner et ouvrir un fichier en mode mise a jour

• Ecrire une valeur VAL dans un fichier 14


• Lire une valeur VALR a partir d’un fichier

• Fermer un fichier

• Renommer un fichier fermé

• Supprimer un fichier fermé

• Fin de fichier

15
Accès direct dans un fichier binaire
Modifier la position du pointeur du fichier binaire:
Positionner (F, pas, position d’origine)
La nouvelle position=Pas + position d’origine
En langage C: fseek(F, sizeof(enreg)*i, origine)
 F: le nom du fichier logique(flot)
 Sizeof(enreg): la taille de l’enregistrement
 i: le nombre de positions
 Origine: la position initiale:
• SEEK_SET : début de fichier
• SEEK_END: fin de fichier
• SEEK_CUR: position courante 16
Exemple1: accéder a l’enregistrement N°10:

fseek(F,sizeof(enreg)*(10-1),SEEK_SET);

Exemple2: accéder a l’enregistrement précédant


d’une position courante:

fseek(F,sizeof(enreg)*(-1),SEEK_CUR);

17
Exercice
On souhaite réaliser un programme pour la gestion des
articles dans un magasin de notre université, pour cela
nous allons utilisé un fichier binaire d’enregistrements,
Chaque enregistrement représente un article défini
comme suit:
• Num: entier (c’est un numéro unique de l’article, il est
interdit de coder deux articles avec le même numéro)
• Desig: chaine[30] (c’est la désignation de l’article)
• Qtts: réel (c’est la quantité en stock)
• Seuil: réel (c’est le stock minimal)

exemple
12 Brosse 356 30
18
Num Desig Qtts Seuil
Le programme assure les opérations suivantes:
1) La création du fichier
2) L’ajout d’un article
3) La suppression d’un article
4) La mise a jour de la Qtts d’un article par une quantité Q
(entrée: ajouter Q / sortie: soustraire Q)
5) La recherche d’un article par son numéro
6) Afficher la liste globale des articles
7) Afficher la liste des articles déficitaires (Qtts<seuil)

Travail a faire:
Ecrire l’algorithme est le programme en C
19
Algorithme Magasin
Type Article=enregistrement
Num: entier;
Desig: chaine[30];
Qtts, Seuil: réel
Fin;
F : fichier d’enregistrements
Rep: caractère
Choix: entier

20
// 1) la création du fichier

Procédure Création (var F: fichier d’enregistrements)


Début
FFouvrir("Mag.bin",’’ ModEcriture");
Si F=NULL alors écrire(‘‘Erreur de création’’);
Sinon écrire(‘‘Fichier créé avec succès’’);
Fermer(F);
FinSi
Fin;

21
// une fonction booléenne qui vérifie l’utilisation
(existence) d’un numéro d’article dans le fichier
Fonction Existe(N: entier ; F: fichier d’enregistrements):
booléen
Trouv: booléen;
Val : Article;
Début
Trouvfaux;
FFouvrir("Mag.bin",’’ModeLecture");
Tant que(Non Trouv et Non FDF(F)) faire
lire(F,Val); Si (Val.Num=N) alors Trouv vrai
FinTantQue;
Fermer(F);
Retourner Trouv;
Fin; 22
// 2) Ajout d’un article

Procédure Ajout(var F: fichier d’enregistrements)


Val : Article;
Début
Répéter Lire(Val.Num); jusqu’à Non Existe(Val.Num,F);
Lire(Val.Desig);Lire(Val.Qtts); Lire(Val.Seuil);
FFouvrir("Mag.bin",’’ ModeMAJ");
Ecrire(F,Val);
Fermer(F);
Fin;

23
// 3) suppression d’un article
Tem F

N= Num

Mag.bin
Sauv.bin Mag.bin

24
// 3) suppression d’un article

Procédure Suppression(var F: fichier d’enregistrements)


N: entier;
Val : Article;
Temp: fichier d’enregistrements
Début
FFouvrir("Mag.bin",’’ ModeLecture");
TempFouvrir("Sauv.bin",’’ ModeEcriture");
Répéter Lire(N); jusqu’à Existe(N);
Tant que(Non FDF(F)) faire
Lire(F,Val);si (Val.Num≠N) alors Ecrire(Temp,Val);
Fintantque;
Fermer(F); Fermer(Temp);Supprimer("Mag.bin" );
Renommer ("Sauv.bin",’’Mag.bin");
25
Fin;
// 4) MAJ de la Qtts d’un article
F
Type operation=entrée
Quatité=Q

Val Num Qtts+Q

Num
Num Qtts
Qtts

Mag.bin

26
// 4) MAJ de la Qtts d’un article
Procédure MAJ_QTT(var F: fichier d’enregistrements)
N: entier; Val : Article; Typeop: caractère;q: réel;
Trouv: booléen;
Début
Trouv Faux;
Répéter Lire(N) jusq’a Existe(N,F);
FFouvrir("Mag.bin",’’ ModeLecture");
Tant que(Non Trouv) faire
Lire(F,Val);
Si (Val.Num=N) alors Trouvvrai; FinSi;
Fintantque;
Lire(Typeop);Lire(q);
Si (Typeop=‘E’ ou Typeop=‘e’) alors Val.QttsVal.Qtts+q
Sinon Val.QttsVal.Qtts-q FinSi
Positionner(F, taille(Val)*(-1),position_courante);
Ecrire(F,Val);
Fermer(F); 27
Fin;
// 5) La recherche d’un article par son numéro

Procédure Recherche(F: fichier d’enregistrements)


N: entier;
Val : Article;
Trouv : booléenne
Début
Lire(N) ; Trouvfaux;
FFouvrir("Mag.bin",’’ ModeLecture");
Tant que(Non FDF(F)et Non Trouv) faire
Lire(F,Val); Si (Val.Num=N) alors Trouvvrai;
Fintantque;
Si (Trouv) alors ércire(Val.Num, Val.Desig, Val.Qtts, Val.Seuil);
Sinon écrire(‘‘article inexistant’’);
Fermer(F);
Fin;

28
// 6) Afficher la liste globale des articles

Procédure Affichage_global(F: fichier d’enregistrements)


Val : Article;
Début
FFouvrir("Mag.bin",’’ ModeLecture");
Tant que(Non FDF(F)) faire
Lire(F,Val);
ércire(Val.Num, Val.Desig, Val.Qtts, Val.Seuil);
Fintantque;
Fermer(F);
Fin;

29
// 7) Afficher la liste des produits déficitaires

Procédure Affichage_deficitaires(F: fichier d’enregistrements)


Val : Article;
Début
FFouvrir("Mag.bin",’’ ModeLecture");
Tant que(Non FDF(F)) faire
Lire(F,Val);
Si(Val.Qtts<Val.Seuil) alors
ércire(Val.Num, Val.Desig, Val.Qtts, Val.Seuil);
Fintantque;
Fermer(F);
Fin;

30
//procédure qui affiche le menu principal

Procédure Affichage_menu()
Début
Écrire(‘‘MENU PRINCIPAL’’);
Écrire(‘‘1: création du fichier’’);
Écrire(‘‘2: insertion d’un nouveau article’’);
Écrire(‘‘3: suppression d’un article’’);
Écrire(‘‘4: la mise à jour de la Qtt d’un article’’);
Écrire(‘‘5: la recherche d’un article’’);
Écrire(‘‘6: liste global des articles’’);
Écrire(‘‘7: liste des articles déficitaires’’);
Écrire (‘‘tapez votre choix: ’’);
Fin;

31
//Corps de l’algorithme principal

Début
Rep’o’;
Tant que (Rep=‘o’ ou Rep=‘O’) faire
Affichage_Menu(); Lire(choix)
Cas (choix) parmi
1: Création(F);
2: Ajout(F);
3: Supression(F);
4: MAJ_QTT(F);
5: Recherche(F);
6: Affichage_global(F);
7: Affichage_deficitaires(F);
Sinon écrire(‘‘choix incorrect’’);
Fin;
Écrire (‘‘voulez vous continuez tapez O/N’’); Lire(Rep); 32

Fin tant que


Fin;

Vous aimerez peut-être aussi