Fichiers en C - Applications résolues
1)Realiser un programme pour lire, en employant les elements introduits,
Carectere par caractere du clavier jusqu’au caractere ‘$’ en les passant dans un fichier dont on ecrit le nom du clavier ou l’on specifie sur la ligne des parametres de comande.
(ecrire dans fichier)
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { FILE *pf; //on declare la variable pointeur du fichier char c,*nume; printf("Donnez le nom du fichier de travail: "); nume=(char*)malloc(20*sizeof(char)); //dans C standard il n’etait pas necessaire d’ecrire le type, char* gets(nume); if ((pf=fopen("C:\\test.txt", "w"))==NULL) //ouvrir ou creer un fichier pour ecrire (ou sur-ecrire) //avec a au lieu de w on fait un ajout au contenu du fichier { printf("On ne peut pas ouvrir le fichier.\n"); getch(); exit(1); //sortie obligatoire du programme sans realiser } puts("Ecrire un texte. Avec le caractere '$' finit:"); do { c=getchar(); //dans c on introduit un caractere du clavier putc(c,pf); //ou fputc(c,pf); } while (c !='$'); getchar(); fclose(pf); }
2) Ecrire dans un fichier.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { char c; FILE *stream; /*on declare stream (fluxe de dates)*/ stream = fopen("C:\\test.txt", "w"); /*ouvrir le fichier*/ puts("Ecrire un texte. Avec le caractere '$' fermer:"); do { c=getchar(); //dans c on introduit un caractere du clavier putc(c,stream); //ou fputc(c,pf); } while (c !='$'); getchar(); fclose(stream); //fermer }
3) Ecrire un programme pour lire d’un fichier tout caractere ASCII et afficher son contenu.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { FILE *pf; /*on declare stream (flux de date)*/ pf = fopen("C:\\test.txt", "r"); /*ouvrir le fichier*/ char c,*nume; if(pf == NULL) { printf ("Erreur"); getch(); exit(1); } printf("Donnez le nom du fichier du travail: "); nume=(char*)malloc(20*sizeof(char)); gets(nume); c=fgetc(pf); //lire un caractere du fichier c=getc(pf) while (c!=EOF) // tester si c’est la fin du fichier { putchar(c); //afficher un caractere c=fgetc(pf); } fclose(pf); getchar(); }
4) Lire dans un fichier une chaine de caractere avec la fonction fread/ fgets.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { char s; FILE *stream; /*declarer stream (flux de date)*/ stream = fopen("D:/test.txt", "r"); /*ouvrir le fichier*/ if(stream == NULL) { printf ("On ne peut pas ouvrir le fichier.\n"); getch(); exit(1); } fread(&s, sizeof(char),100,stream); //ou fgets(&s,100,stream); printf("%s", &s); getchar(); fclose(stream); //fermer }
5) Realiser un programme pour copier le contenu d’un fichier du disque dans un autre, avec un nom du programme.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { char chaine[256]; FILE *lire, *ecrire; lire = fopen("C:\\test.txt", "r"); ecrire = fopen("D:/test.txt", "w"); if(lire == NULL) { printf ("On ne peut pas ouvrir le fichier pour lire.\n"); getch(); exit(1); } fgets(chaine,sizeof(chaine),lire); /* lire une chaine pour arriver a la longueur de caracteres specifiee dans le fichier de lire */ fputs(chaine,ecrire); /*ecrire la chaine de caracteres dans le fichier d’ecrire*/ printf("Le texte copié est: %s", chaine); fclose(lire); fclose(ecrire); getchar(); }
6) En ndiquant on nombre d’octet, afficher le contenu du octet specifié et le reste du contenu du fichier du octet specifié.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { char s; FILE *stream; /*declarer stream (fluxe de dates)*/ stream = fopen("D:/test.txt", "r"); /*ouvrir le fichier*/ fseek (stream, (3)-1, SEEK_SET); if(stream == NULL) { printf ("On ne peut pas ouvrir le fichier.\n"); getch(); exit(1); } printf("\nL’Element de la pozition 3 est: %c.\n" , fgetc(stream)); puts("\nLe reste du fichier de cette pozition est:"); while (!feof(stream)) //tester si c’est la fin du fichier { printf("%c",fgetc(stream)); } getchar(); fclose(stream); //fermer le fichier }
7) Ecrire un programme pour calculer et afficher dans un fichier, avec la fonction fprintf.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { FILE *pf; pf = fopen("D:/test.txt", "r"); int cant=20; float pret=2378.64; if(pf == NULL) { printf ("Eroare"); getch(); exit(1); } fprintf(pf, "\tTotalisant:\n"); //affiche le fichier fprintf(pf, "\t\tFranc: %14.2f\n",cant*pret); //affiche le fichier printf("\tTotalisant:\n"); //affichée sur l'écran printf("\t\tFranc: %14.2f\n",cant*pret); //affichée sur l'écran fclose(pf); getchar(); }
8) Dans le fichier "D:/test.txt" il y a plusieurs nombres separes par l’espace.
Trier les elements du vecteur avec la metode d’echange (selection directe ou des verres), avec un fichier auxiliaire a.i. on va fermer le premier fichier et le nouveau recevra son nom.
#include<stdio.h> #include<conio.h> #include<stdlib.h> void main() { int n,i=0,j=0,temp,v[50]; FILE *f,*g; if ((f=fopen("D:\\test.txt", "r"))==NULL) printf("Erreur a ouvrir le fichier de lire"); else if ((g=fopen("C:\\nombres.txt","w"))==NULL) { printf("Erreur a ouvrir le fichier d’ecrire.txt"); fclose(f); } else { while(!feof(f)) { fscanf(f,"%d",&v[i]); i++; } n=i; // la valeur finale de i c’est le nombre des elements du vecteur //trier les elements du fichier for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if (v[j]<v[i]) { temp=v[i]; v[i]=v[j]; v[j]=temp; } //afficher les elements du fichier for(i=0;i<n;i++) fprintf(g,"%5d",v[i]); fclose(f); remove("D:\\test.txt"); fclose(g); rename("C:\\nombres.txt", "C:\\test.txt"); printf("\nOperation faite"); } getchar(); }
9) Lire un fichier texte avec des nombres entiers separes par l’espace ou ENTER.
Afficher le minimum et le maximum des valeurs du fichier, et l’amplitude de la chaine des nombres (difference absolue entre les exrtremes).
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<limits.h> void main() { FILE *stream; /*declarer stream (flux de date)*/ stream = fopen("D:\\test.txt", "r"); /*ouvrir le fichier*/ if(stream == NULL) { printf ("Erreur"); getch(); exit(1); } int x; //variable pour retenir les nombres lus int maxim=-INT_MAX; //prenons le maximum comme le plus petit nombre entier int minim=INT_MAX; //le minimum sera le plus grand nombre entier while(!feof(stream)) //si n’est pas la fin du fichier { fscanf(stream,"%d",&x); //lire la chaine des nombres et comparer avec x if (x>maxim) maxim=x; else if (x<minim) minim=x; } fclose(stream); printf("Maximum du fichier est: %d\n",maxim); printf("Minimum du fichier est: %d\n",minim); printf("L’amplitude du fichier est: %d\n",maxim-minim); getchar(); }
10) On supose un fichier texte ("vocale.txt") qui contient une chaine de caracteres.
Contoriser l’apparition de chaque voyelle dans le fichier.
#include<stdio.h> #include<conio.h> #include<stdlib.h> #include<limits.h> void main() { char c; int a=0,e=0,i=0,o=0,u=0; //a=nombres d’apparitions de la voyelle "a", s.a.m.d. FILE *stream; /*declarer stream (flux de date)*/ stream = fopen("D:\\vocale.txt ", "r"); /*ouvrir le fichier*/ if(stream == NULL) { printf ("Erreur"); getch(); exit(1); } while(!feof(stream)) //si ce n’est pas la fin du fichier { fscanf(stream,"%c",&c); //ou c=getc(f); ou c=fgetc(f); switch(c) { case 'a': a++; break; case 'e': e++; break; case 'i': i++; break; case 'o': o++; break; case 'u': u++; }; } fclose(stream); printf("Voyelle \"a\" est de %d fois.\n",a); printf("Voyelle \"e\" est de %d fois.\n",e); printf("Voyelle \"i\" est de %d fois.\n",i); printf("Voyelle \"o\" est de %d fois.\n",o); printf("Voyelle \"u\" est de %d fois.\n",u); getchar(); }