La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier."— Transcription de la présentation:

1 1 FICHIERS

2 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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: detail1 2.50 detail2 50.00

28 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 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 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 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 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 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 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 : 0 22 33 44 Création du fichier. Lire et afficher le fichier.

35 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 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 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). 0123456789 10111213141516171819

38 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 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 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 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 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 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 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 : 0 11 0 22 0 33

45 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 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 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 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 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 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 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.


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

Présentations similaires


Annonces Google