1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.

Slides:



Advertisements
Présentations similaires
Premier programme en C :
Advertisements

Licence pro MPCQ : Cours
Rappels C.
GEF 243B Programmation informatique appliquée
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
Structures et unions types énumérés Qu'est-ce qu'une structure
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Suite à de nombreuses remarques concernant le projet de structures de données 'Gestion d'un Aéroport' , voici un polycopié de cours concernant la gestion.
Tableaux Certains problèmes nécessitent beaucoup de variables du même type. Exemple : relevé de températures matin et soir dans 10 villes pour 10 jours.
Chap. 1 Structures séquentielles : listes linéaires
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Récursivité.
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
1 Guide de lenseignant-concepteur Vincent Riff 27 mai 2003.
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
TRAITEMENT DE STRUCTURES
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
FICHIERS.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Les fichiers binaires en C++
Logiciel gratuit à télécharger à cette adresse :
FICHIERS : Définition : Algorithme général:
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT Structures de données
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
Les Fichiers.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Structures de données IFT-2000 Abder Alikacem Semaine 11, 1 ère partie Les B-arbres Département dinformatique et de génie logiciel Édition septembre 2009.
Les fichiers texte en C++
L’essentiel du langage C
Structures des données
Le langage C Structures de données
1/65 微距摄影 美丽的微距摄影 Encore une belle leçon de Macrophotographies venant du Soleil Levant Louis.
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Notions de pointeurs en C
PHP 3° PARTIE : GESTION DE FICHIERS ET DE REPERTOIRES
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
Autres éléments du langage
Un survol du language C.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
ETNA – 1ème année Guillaume Belmas –
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Les fichiers 1ère partie
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
1 PHP 5 Notions fondamentales (niveau 1 cours #3) Formation continue – Cégep de Sainte-Foy François G Couillard.
Algorithmique et langage C
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Informatique 2A Langage C 4ème séance
A quoi sert la programmation? - indispensable pour plusieurs métiers. - passion. But du cours: - suite du cours Prog. Imp. I - fichiers, pointeurs, modularité.
Transcription de la présentation:

1 FICHIERS

2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier désigne un ensemble d'informations situé sur une ''mémoire de masse'' telle que le disque ou la disquette.  Un fichier (angl.: file) est un ensemble structuré de données stocké en général sur un support externe.  Tous les périphériques, qu ' ils soient d'archivage (disque, disquette,... ) ou de communication (clavier, écran, imprimante,...), peuvent être considérés comme des fichiers.  Le principal inconvénient est le temps d'accès à une donnée.

3 e1e1 e2e3e4e5...ekemen nom.ext e1e1 e2e3e4e5 curseur le fichier le tampon EOF  Ce sont des structures qui ont un nombre indéfini d'éléments du même type. En général ils sont stockés dans la mémoire permanente

4 Les Fichiers  Un fichier structuré contient une suite d'enregistrements homogènes, qui regroupent le plus souvent plusieurs composantes appartenant ensemble (champs).  L'insertion et la suppression d'éléments qu'en fin d'un fichier devra passer par la création d'un nouveau fichier.  On distingue traditionnellement deux techniques de gestion de fichiers :  l'accès séquentiel consiste à traiter les informations "séquentiellement", c'est-à-dire dans l'ordre où elles apparaissent (ou apparaîtront) dans le fichier,  l'accès direct consiste à se placer immédiatement sur l'information souhaitée, sans avoir à parcourir celles qui la précèdent.

5 Les Fichiers Fichier séquentiel  Les enregistrements sont mémorisés consécutivement dans l'ordre de leur entrée et peuvent seulement être lus dans cet ordre.  Si on a besoin d'un enregistrement précis dans un fichier séquentiel, il faut lire tous les enregistrements qui le précèdent, en commençant par le premier.

6 Les Fichiers Fichier séquentiel  Le grand avantage est qu'il peut contenir des données de tout type, de taille différente.  Il ne peut en général pas être modifié, la seule possibilité étant l'ajout derrière les données déjà stockées. Fichier direct  Il correspond à un tableau en mémoire : toutes ses composantes ont la même taille, on peut donc accéder directement à la N ième.  Les insertions et suppressions nécessitent des décalages des composantes suivantes.

7 Les Fichiers La mémoire tampon  Les accès à un fichier se font par l'intermédiaire d'une mémoire tampon (angl.: buffer) - une zone de la mémoire centrale de la machine réservée à un ou plusieurs enregistrements du fichier.  L'utilisation de la mémoire tampon a l'effet de réduire le nombre d'accès à la périphérie d'une part et le nombre des mouvements de la tête de lecture/écriture d'autre part.

8 Les Fichiers Flots  Les fichiers sont vus par le programmeur comme des flots, c'est-à-dire des suites d'octets qui représentent des données selon une des deux modalités suivantes: 1.Soit le fichier contient les caractères (presque toujours le code ASCII). De tels fichiers sont appelés fichiers de texte.  Ils peuvent être affichés, édités, imprimés, etc.

9 Les Fichiers Flots 2.Soit le fichier contient des données enregistrées sous une forme qui est la copie exacte de leur codage dans la mémoire. On l'appelle alors fichier binaire.  Les opérations de lecture ou d'écriture sur de tels fichiers sont très rapides, car elles ne requièrent pas un travail d'analyse ou de synthèse de l'expression écrite des données.  Ils ne sont pas éditables ou imprimables.  Ils ne sont pas censés être transportables d'un logiciel à un autre, encore moins d'un système à un autre.  Ils sont utiles pour manipuler des données de grande taille ou ayant un type composé.

10 Types de fichiers  Classifiés par leur contenu –binaires – les données sont présentées dans la forme dont ils sont stockées dans la mémoire machine. Ce sont des fichiers composés d'octets –texte – leurs éléments sont des caractères qui sont stockés en lignes dans le format approprié du système d’exploitation. Lecture et écriture se font par conversion dans le type de la variable.  Classifiés par le mode d'accès –séquentiels – ils ont d'éléments du même type. L'accès se produit de premier au dernier élément sans retour. les fichiers texte sont toujours séquentiels –directs – les éléments sont accédés dans un ordre arbitraire.

11 Les Fichiers Fonctions générales sur les flots 1.Les flots sont représentés dans les programmes par des variables de type FILE * (la structure FILE est définie dans le fichier ). 2.Ouverture d’un fichier - la fonction ouvre le fichier dont le nom est indiqué par la chaîne nom et rend un pointeur sur le flot correspondant, ou NULL si l'opération a échoué. FILE *fichier; Déclaration d’une fichier par la variable fichier FILE *fopen(const char *nom, const char *mode);

12 Les Fichiers Fonctions générales sur les flots 2.Ouverture d’un fichier - les valeurs permises pour mode: “r”(read) fichier ouvert pour lecture – il doit exister; le contenu n'est pas détruit “r+”comme "r", mais les opérations d'écriture sont permises “w”(write) fichier ouvert pour écriture – s’il existe il est détruit avant, il le crée sinon “w+”comme "w", mais les opérations de lecture sont permises “a”(append) allongement d'un fichier; fichier ouvert pour ajout à la fin. Si le fichier n’existe pas il est créé. “a+”comme "a", mais les opérations de lecture sont permises “t” “b” fichier texte fichier binaire

13 Les Fichiers Fonctions générales sur les flots 2.Ouverture d’un fichier - les valeurs permises pour mode: “rb”,”r+b” “wb”,”ab”, “w+b”, “a+b” si on envisage d'utiliser le fichier en mode binaire il faut ajouter la lettre b Exemples: f = fopen("ftext.txt","rt");ouvrir un fichier texte existant pour lecture f1 = fopen("fich.dat","rb");ouvrir un fichier binaire existant pour lecture f2 = fopen("fic1.txt","wt");ouvrir un fichier texte pour écriture f1 = fopen("fich.dat","r+b"); f1= fopen("fich.dat","rb+"); ouvrir un fichier binaire existant pour lecture et modification f= fopen("ftext.txt","at");ouvrir un fichier texte existant ou pas existant pour ajouter f2 = fopen("fic1.txt","a+b");ouvrir un fichier binaire pour ajouter et modification

14 Les Fichiers Fonctions générales sur les flots 3.Fermeture d’un fichier – la fonction ferme le flot indiqué, produisant l'écriture physique des tampons. Elle rend zéro en cas de succès, une autre valeur en cas d'erreur. 4.Fin de fichier (feof) - la fonction renvoie une valeur non nulle si et seulement si l'indicateur de fin de fichier du flot indiqué est vrai. feof n'est jamais vrai après l'ouverture (en lecture) du fichier, même lorsque ce dernier est vide. Il faut au moins une [tentative de] lecture pour le rendre vrai. int fclose(FILE *fichier); int feof(FILE *fichier);

15 Les Fichiers Fonctions générales sur les flots FILE *pf;... pf = fopen(nom, "rb"); vérification du succès de l'ouverture de fichier... lecture de données sur fichier while ( ! feof(pf)) {traitement des données lues lecture de données sur fichier }... le schèma de lecture séquentielle d'un fichier

16 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles 1.Lecture et écriture de caractères et de chaînes  Les fonctions de lecture - écriture effectuent la lecture ou l'écriture d'un caractère. int fgetc(FILE *flot); Renvoie le caractère suivant sur le flot indiqué ou EOF si la fin du fichier est atteinte ou en cas d’erreur. int fputc(int caractere, FILE *flot); Ecrit le caractere indiqué sur le flot. Renvoie le caractère écrit ou EOF en cas d’erreur.

17 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles  Exemple – Faire un programme qui lit et affiche le fichier – programme en C en le parcourant caractère par caractère. #include main() { FILE *fp; fp = fopen("pr_c.c", "r"); if (!fp) { printf("Impossible d'ouvrir le fichier\n"); exit(-1); } while (!feof(fp)) putchar(fgetc(fp)); fclose(fp); return 0; } #include void main() { int a; printf("a="); scanf("%d",&a); printf("a=%d,a*a=%d\n",a,a*a) }

18 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles 1.Lecture et écriture de caractères et de chaînes  La fonction de la lecture d'une ligne. On s'arrête lorsqu'elle a lu n-1 caractères ou lorsqu'elle a rencontré un caractère ‘\n‘.  La fonction d'écriture d'une ligne renvoie EOF en cas d'erreur, une valeur >= 0 dans les autres cas. char *fgets(char *s, int n, FILE *flot); lit des caractères sur le flot indiqué et les place dans l'espace pointé par s. int fputs(const char *s, FILE *flot); écrit la chaîne s sur le flot indiqué.

19 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles  Exemple – Faire un programme de: 1) création d’un fichier en entrant ligne par ligne son contenu par clavier; 2) d’affichage le fichier lu par lignes. #include 1/3 #include void main() { FILE *p; char f_nom[10],ligne[63]; printf("Entrer f_nom:"); gets(f_nom); p=fopen(f_nom,"w"); if(p==NULL) { printf("Le fichier n'est pas ouvert\n"); exit(1); } Ouverture du fichier avec un nom donné.

20 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles  Exemple do 2/3 {printf("\nEntrer une ligne\n"); fgets(ligne,62,stdin); fputs(ligne,p); printf("Entrer caractere e(E) pour la fin"); } while(toupper(getch())!='E'); fclose(p); Création du fichier.

21 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles  Exemple p=fopen(f_nom,"r"); 3/3 if(p==NULL) { printf("Le fichier n'est pas ouvert\n"); exit(1); } printf("\n"); fgets(ligne,62,p); while(!feof(p)) { puts(ligne); fgets(ligne,62,p); } fclose(p); } Lire et afficher le fichier. Entrer f_nom: a Entrer une ligne Traitement d’un fichier Entrer caractere e(E) pour la fin Entrer une ligne ligne par ligne. Entrer caractere e(E) pour la fin Traitement d’un fichier ligne par ligne.

22 I.Lecture et écriture textuelles  Exemple – Faire un programme qui lit et affiche le fichier – programme en C en le parcourant par lignes. #include main() { FILE *fp; char s[82]; fp = fopen("pr_c.c", "r"); if (!fp) { printf(“Fichier n’est pas ouvert\n"); exit(1);} fgets(s,82,fp); while (!feof(fp)) { puts(s); fgets(s,81,fp); } fclose(fp); return 0; } #include void main() { int a; printf("a="); scanf("%d",&a); printf("a=%d,a*a=%d\n",a,a*a) }

23 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles 2.Lecture et écriture avec format int fscanf(FILE *flot, const char *format, &v 1,…&v k ); Comme scanf mais sur le flot indiqué (à la place de stdin) int fprintf(FILE *flot, const char *format, exp 1,…exp k ); Comme printf mais sur le flot indiqué (à la place de stdout)

24 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles 2.Lecture et écriture avec format  est un pointeur du type FILE* qui est relié au nom du fichier à lire. ,,..., représentent les adresses des variables qui vont recevoir les valeurs des différentes rubriques d'un enregistrement lu dans le fichier. ,,..., représentent les spécificateurs de format pour la lecture des différentes rubriques. fscanf(," \n \n...\n \n",,,..., );

25 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles 2.Lecture et écriture avec format  est un pointeur du type FILE* qui est relié au nom du fichier cible. ,,..., représentent les rubriques qui forment un enregistrement et dont les valeurs respectives sont écrites dans le fichier. ,,..., représentent les spécificateurs de format pour l'écriture des différentes rubriques. fprintf(," \n \n...\n \n",,,..., );

26 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles  Exemple – Faire un programme de: 1) création d’un fichier en entrant l’information d’enregistrements - détails (nom et prix); 2) d’affichage le fichier lu par enregistrements. #include 1/2 #include void main() { FILE *p; char f_nom[10], nom[20]; float prix; printf("Entrer f_nom:"); gets(f_nom); p=fopen(f_nom,"w"); if(p==NULL) { printf("Le fichier n'est pas ouvert\n"); exit(1); } Ouverture du fichier avec un nom donné.

27 Les Fichiers Fonctions générales sur les flots I.Lecture et écriture textuelles  Exemple do { printf("\nnom:"); gets(nom); 2/2 printf("prix:"); scanf("%f",&prix);fflush(stdin); fprintf(p,"%s\n%f\n",nom,prix); printf("Enregistremen suivant?O/N:"); } while(toupper(getch())=='O'); fclose(p); p=fopen(f_nom,"r"); if(p==NULL) { printf(" Le fichier n'est pas ouvert\n "); exit(1); } while(fscanf(p,"%s%f",nom,&prix)!=EOF) printf("\n%s %.2f",nom,prix); fclose(p); } Création du fichier. Lire et afficher le fichier. Entrer f_nom:b nom:detail1 prix:2.50 Enregistremen suivant?O/N: nom:detail2 prix:50 Enregistremen suivant?O/N: detail detail

28 Fonctions générales sur les flots I.Lecture et écriture textuelles  Exemple – Faire un programme de: 1) création d’un fichier en entrant l’information d’enregistrements - détails (nom et prix); 2) d’affichage le fichier lu par enregistrements. Utilizer des fonctions differentes. #include 1/3 #include FILE *writefile(char *f_name); void readfile(FILE *p,char *f_name); void main() { FILE *det; char f_name[10]; printf("f_name:"); gets(f_name); det=writefile(f_name); readfile(det,f_name); }

29 Fonctions générales sur les flots I.Lecture et écriture textuelles FILE *writefile(char *f_name) 2/3 { FILE *p; char det_name[20]; float price; p=fopen(f_name,"w+"); if(p==NULL) { printf("Fichier n’est pas ouvert\n"); exit(1); } do { fflush(stdin); printf("det_name:"); fgets(det_name,20,stdin); printf("price:"); scanf("%f",&price);fflush(stdin); fprintf(p,"%s\n%f\n",det_name,price); printf("Next element?Y/N:"); } while(toupper(getchar())=='Y'); return p; }

30 Fonctions générales sur les flots I.Lecture et écriture textuelles void readfile(FILE *p,char *f_name) 3/3 { char det_name[20]; float price; rewind(p); if(p==NULL) { printf("Fichier n’est pas ouvert\n"); exit(1); } while(fscanf(p,"%s%f",det_name,&price)!=EOF) printf("\n%s\t%.2f",det_name,price); fclose(p); } f_name:detaili det_name:gaika price:1.22 Next element?Y/N:y det_name:bolt price:1.50 Next element?Y/N:n gaika1.22 bolt1.50

31 Les Fichiers Fonctions générales sur les flots II.Lecture et écriture en mode binaire  Lecture - la fonction essaye de lire sur le flot indiqué nombre objets, chacun ayant la taille indiquée, et les copie les uns à la suite des autres dans l'espace pointé par destination. Elle renvoie le nombre d'objets effectivement lus (et non pas le nombre d'octets lus), qui peut être inférieur au nombre demandé, à cause de la rencontre de la fin du fichier, d'une erreur, etc.  Remarque: size_t, défini dans stddef.h, correspond au type du résultat de l'évaluation de sizeof. size_t fread(void *destination, size_t taille, size_t nombre, FILE *flot);

32 Les Fichiers Fonctions générales sur les flots II.Lecture et écriture en mode binaire  Ecriture - la fonction écrit les nombre objets, chacun ayant la taille indiquée, qui se trouvent les uns à la suite des autres à l'adresse indiquée par source. Elle renvoie le nombre d'objets écrits, qui peut être inférieur au nombre demandé (en cas d'erreur).  fwrite permet de transférer plusieurs blocs consécutifs de même taille à partir d'une adresse donnée. size_t fwrite(const void *source, size_t taille, size_t nombre, FILE *flot);

33 Les Fichiers Fonctions générales sur les flots II.Lecture et écriture en mode binaire  Exemple - Faire un programme à: 1) enregistrer séquentiellement dans un fichier une suite de nombres entiers qu'on lui fournit au clavier; 2) lister le contenu du fichier crée. #include #include 1/2 int main(void) { char nomfich[21] ; int n ; FILE * sortie,* entree ; printf ("nom du fichier a creer : ") ; scanf ("%20s", nomfich) ; sortie = fopen (nomfich, "wb") ; if(sortie == NULL) { printf("Le fichier n'est pas ouvert\n"); exit(1); } Ouverture du fichier avec un nom donné.

34 Les Fichiers Fonctions générales sur les flots II.Lecture et écriture en mode binaire  Exemple do 2/2 { printf ("donnez un entier : ") ; scanf ("%d", &n) ; if (n) fwrite(&n, sizeof(int), 1, sortie) ; } while (n) ; fclose (sortie) ; entree = fopen (nomfich, "rb") ; if(entree == NULL) { printf("Le fichier n'est pas ouvert\n"); exit(1); } while ( fread (&n, sizeof(int), 1, entree), ! feof(entree) ) { printf ("\n%d", n) ; } fclose (entree) ; return 0 ; } nom du fichier a creer: a donnez un entier : 22 donnez un entier : 33 donnez un entier : 44 donnez un entier : Création du fichier. Lire et afficher le fichier.

35 Les Fichiers Fonctions générales sur les flots II.Lecture et écriture en mode binaire  Exemple - le programme suivant écrit un tableau d'entiers (contenant les 20 premiers entiers) avec fwrite dans le fichier sortie, puis lit ce fichier avec fread et imprime les éléments du tableau. #include 1/3 #include #define NB 20 #define F_SORTIE "sortie" int main(void) { FILE *f_in, *f_out; int *tab1, *tab2; int i; tab1 = (int*)malloc(NB * sizeof(int)); tab2 = (int*)malloc(NB * sizeof(int)); Réservation de la mémoire dynamiques.

36 Les Fichiers Fonctions générales sur les flots II.Lecture et écriture en mode binaire  Exemple for (i = 0 ; i < NB; i++) 2/3 tab1[i] = i; /* ecriture du tableau dans F_SORTIE */ if ((f_out = fopen(F_SORTIE, "wb")) == NULL) { fprintf(stderr, "\nImpossible d'ecrire dans le fichier %s\n",F_SORTIE); return(EXIT_FAILURE); } fwrite(tab1, NB * sizeof(int), 1, f_out); fclose(f_out); /* lecture dans F_SORTIE */ if ((f_in = fopen(F_SORTIE, "rb")) == NULL) { fprintf(stderr, "\nImpossible de lire dans le fichier %s\n",F_SORTIE); return(EXIT_FAILURE); } Écrire dans le fichier 1 objet (le tableau).

37 Les Fichiers Fonctions générales sur les flots II.Lecture et écriture en mode binaire  Exemple fread(tab2, NB * sizeof(int), 1, f_in); 3/3 fclose(f_in); for (i = 0 ; i < NB; i++) printf("%d\t",tab2[i]); printf("\n"); return(EXIT_SUCCESS); free(tab1); free(tab2); } Lire du fichier 1 objet (le tableau)

38 Les Fichiers Fonctions générales sur les flots III.Positionnement dans un fichier (ACCÈS DIRECT) 1.On peut se positionner а n'importe quel endroit précis du fichier à l 'aide de la fonction fseek.  La fonction positionne le pointeur du fichier associé au flot indiqué.  La première lecture ou écriture ultérieure se fera à partir de la nouvelle position (obtenue en ajoutant la valeur de déplacement à une valeur de base (origine) qui peut être la position courante, la fin ou le début du fichier.  La fonction renvoie zéro en cas de succès, une valeur non nulle en cas d'erreur. int fseek(FILE *flot, long deplacement, int origine);

39 Les Fichiers Fonctions générales sur les flots III.Positionnement dans un fichier (ACCÈS DIRECT)  La valeur d’argument origine doit être une des constantes (définies dans ) : 2.La fonction à retourner la position courante dans le fichier (en nombre d'octets depuis l'origine) – ftell. SEEK SET : base = le début du fichierou0 SEEK CUR : base = la position couranteou1 SEEK END : base = la fin du fichierou2 long ftell(FILE *flot);

40 Les Fichiers Fonctions générales sur les flots III.Positionnement dans un fichier (ACCÈS DIRECT) 3.La fonction permettant de se positionner au début du fichier. – rewind int rewind(FILE *flot); équivalente а fseek(flot, 0, SEEK_SET);

41 Les Fichiers L'accès relatif aux éléments des fichiers (accès direct aux composantes (enregistrements) d'un fichier)  Le fichier puisse être vu comme une suite d'articles de même taille.  Cela s'obtient généralement en déclarant une structure qui représente un article, selon le modèle : typedef struct {... champs dont se composent tous les articles... } ARTICLE;... FILE *fichier;... fichier = fopen(nom, "rb+");

42 Les Fichiers L'accès relatif aux éléments des fichiers (accès direct aux composantes (enregistrements) d'un fichier)  Si les articles sont numérotés à partir de zéro: ARTICLE article;... fseek(fichier, n * sizeof(ARTICLE), SEEK_SET); fread( & article, sizeof(ARTICLE), 1, fichier);... exploitation des valeurs des champs de article... affectation des champs de article... fseek(fichier, n * sizeof(ARTICLE), SEEK_SET); fwrite( & article, sizeof(ARTICLE), 1, fichier);... lecture de l'enregistrement de rang n écriture de la composante de rang n

43 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple – faire un programme de constituer un fichier d'entiers en laissant l'utilisateur les fournir dans l'ordre de son choix. #include 1/2 int main(void) { char nomfich[21] ; FILE * sortie ; long num ; int n ; printf ("nom fichier : ") ; scanf ("%20s",nomfich) ; sortie = fopen (nomfich, "wb+") ; while (printf("\nrang de l'entier : "), scanf("%ld",&num), num) {printf ("valeur de l'entier : ") ; scanf ("%d", &n) ; fseek (sortie, sizeof(int)*(num-1), SEEK_SET); fwrite (&n, sizeof(int), 1, sortie) ; } écriture des composantes (n) dans le fichier selon leurs rang num

44 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple rewind(sortie); 2/2 while(fread(&n,sizeof(int),1,sortie),!feof(sortie)) printf("%d\n",n); fclose(sortie) ; return 0 ; } Lire le fichier et afficher nom fichier : a rang de l'entier : 1 valeur de l'entier : 11 rang de l'entier : 3 valeur de l'entier : 22 rang de l'entier : 5 valeur de l'entier : 33 rang de l'entier :

45 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple – Faire un programme C de création d'un fichier binaire d'éléments de type structuré. Chaque structure est composée des champs suivants: a) nom - chaîne de caractères; b) groupe - nombre entier; c) note - nombre reél. Afficher l’information des étudiants. Faire un changement du champ groupe si on decide de le faire. Utiliser les fonctions differentes pour chaque action. #include 1/6 #include struct student { char nom[60]; int groupe; float note; }; La définition du modèle

46 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple FILE *writefile(char *name_file); 2/6 int readfile(FILE *fp,char *name_file); FILE *updatefile(FILE *fp,char *name_file); void main() { FILE *fp; int r; char name_file[30]; printf("Entrer le nom du fichier :") ; gets(name_file) ; fp=writefile(name_file) ; if(fp != NULL) printf("\nLe fichier est cree\n ") ; else { printf("Le fichier n'est pas cree") ; exit(1); } r=readfile(fp,name_file) ; if(r) printf(“\nLe fichier est affiche\n ") ; fp=updatefile(fp,name_file) ; readfile(fp,name_file) ; } Les prototypes Création Lire et Afficher Changer et Afficher

47 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple FILE *writefile(char *name_file) 3/6 {FILE *fp; struct student s; if((fp=fopen(name_file,"wb+")) == NULL) { printf("\nLe fichier %s n'est pas ouvert\n",name_file); exit(1) ; } do {printf("\nnom=>") ; gets(s.nom) ; printf("groupe=>") ; scanf("%d",&s.groupe) ; printf("note=>") ; scanf("%f",&s.note) ; while((getchar()) != '\n') ; fwrite(&s,sizeof(s),1,fp) ; printf("Element suivant? Y/N =>"); }while(toupper(getch())=='Y') ; return(fp) ; } La création du fichier

48 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple int readfile(FILE *fp) 4/6 {struct student temp; int flag=0; rewind(fp); while(fread(&temp,sizeof(temp),1,fp)==1) { flag=1; printf(“\n%s %d %.2f\n",temp.nom,temp.groupe,temp.note); } fclose(fp); if(!flag) printf("\nFichier vide. Creer le fichier !") ; return flag ; } Lire et afficher le fichier

49 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple FILE *updatefile(FILE *fp,char *name_file) 5/6 {struct student s; long int pos; if((fp=fopen(name_file,"r+b")) == NULL) { printf("\nLe fichier %s n'est pas ouvert\n",name_file); exit(1) ; } Changer le champ groupe. Ouverture du fichier à être changer.

50 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple while(fread(&s,sizeof(s),1,fp)==1) 6/6 {printf("\nL'element lu:\n"); printf("%s %d %.2f\n",s.nom,s.groupe,s.note); printf("On va changer le groupe? Y/N :") ; if(toupper(getch()) == 'Y') { printf("\nEntrer le groupe :") ; scanf("%d",&s.groupe) ; while((getchar()) != '\n') ; pos=ftell(fp)-sizeof(s) ; fseek(fp,pos,0); fwrite(&s,sizeof(s),1,fp); } pos=ftell(fp); fseek(fp,pos,0); } fclose(fp); return(fp); } Changer le champ groupe.

51 Les Fichiers L'accès relatif aux éléments des fichiers  Exemple La création du fichier. L’affichage du fichier. Entrer le nom du fichier: a nom=>Ivanov groupe=>12 note =>4 Element suivant? Y/N => nom=>Petrov groupe=>13 note =>5 Element suivant? Y/N => Le fichier est cree Ivanov 12 4 Petrov 13 5 Le fichier est affiche L'element lu: Ivanov 12 4 On va changer le groupe? Y/N : L'element lu: Petrov 13 5 On va changer le groupe? Y/N : Entrer le groupe :12 Ivanov 12 4 Petrov 12 5 Le changement du fichier. L’affichage du fichier.