Programme C pour lire le contenu du fichier entier
Langage de programmation C prend en charge quatre fonctions prédéfinies pour lire le contenu d'un fichier, défini dans le fichier d'en-tête stdio.h :
- fgetc() – Cette fonction est utilisée pour lire un seul caractère du fichier.
- fgets() – Cette fonction est utilisée pour lire des chaînes à partir de fichiers.
- fscanf() – Cette fonction est utilisée pour lire l'entrée formatée d'un fichier.
- fread() – Cette fonction est utilisée pour lire le bloc d'octets bruts des fichiers. Ceci est utilisé pour lire des fichiers binaires.
Étapes pour lire un fichier :
- Ouvrez un fichier à l'aide de la fonction fopen() et stockez la référence du fichier dans un pointeur FILE.
- Lisez le contenu du fichier en utilisant l'une de ces fonctions fgetc(), fgets(), fscanf() ou fread().
- Fichier fermez le fichier à l'aide de la fonction fclose().
Commençons par discuter de chacune de ces fonctions en détail.
fgetc()
fgetc() lit les caractères pointés par le pointeur de fonction à ce moment-là. À chaque lecture réussie, il renvoie le caractère (valeur ASCII) lu dans le flux et avance la position de lecture au caractère suivant. Cette fonction renvoie un EOF constant (-1) lorsqu'il n'y a pas de contenu à lire ou une lecture échouée.
Syntaxe:
int fgetc(FICHIER *ptr);
Approche:
- Ce programme lit tout le contenu du fichier, en utilisant cette fonction en lisant les caractères un par un.
- La boucle Do-While sera utilisée pour lire le caractère jusqu'à ce qu'il atteigne la fin du fichier.
- Lorsqu'il atteint la fin, il renvoie le caractère EOF (-1).
Utilisation d'EOF :
Vous trouverez ci-dessous le programme C pour mettre en œuvre l'approche ci-dessus.
C
// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> > FILE> * ptr;> > char> ch;> > // Opening file in reading mode> > ptr => fopen> (> 'test.txt'> ,> 'r'> );> > if> (NULL == ptr) {> > printf> (> 'file can't be opened
'> );> > }> > printf> (> 'content of this file are
'> );> > // Printing what is written in file> > // character by character using loop.> > do> {> > ch => fgetc> (ptr);> > printf> (> '%c'> , ch);> > // Checking if character is not EOF.> > // If it is EOF stop reading.> > }> while> (ch != EOF);> > // Closing the file> > fclose> (ptr);> > return> 0;> }> |
Fichier d'entrée :
techcodeview.com | A computer science portal for geeks
Sortir:
Dans le code ci-dessus, l'approche consiste à lire un caractère du fichier et à vérifier s'il ne s'agit pas d'EOF, si ce n'est pas le cas, imprimez-le et si c'est le cas, arrêtez la lecture.
En utilisant feof() :
La fonction feof() prend le pointeur de fichier comme argument et renvoie vrai si le pointeur atteint la fin du fichier.
Syntaxe:
int feof(FILE *ptr);
Approche:
- Dans cette approche, un caractère est lu à l'aide de fgetc().
- En utilisant la fonction feof(), vérifiez la fin du fichier. puisque feof() renvoie true après avoir atteint la fin.
- Utilisez l'opérateur NON logique (!) De sorte que lorsqu'il atteint la condition de fin, il devienne faux et la boucle s'arrête.
Vous trouverez ci-dessous le programme C pour mettre en œuvre l'approche ci-dessus :
C
// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> > FILE> * ptr;> > char> ch;> > ptr => fopen> (> 'test.txt'> ,> 'r'> );> > if> (NULL == ptr) {> > printf> (> 'file can't be opened
'> );> > }> > printf> (> 'content of this file are
'> );> > while> (!> feof> (ptr)) {> > ch => fgetc> (ptr);> > printf> (> '%c'> , ch);> > }> > fclose> (ptr);> > return> 0;> }> |
Fichier d'entrée :
techcodeview.com | A computer science portal for geeks
Sortir:
fgets()
fgets() lit une chaîne à la fois dans le fichier. fgets() renvoie une chaîne si elle est lue avec succès par la fonction ou renvoie NULL si elle ne peut pas être lue.
Syntaxe:
char * fgets(char *str, int size, FILE * ptr);
Ici,
str : C'est une chaîne dans laquelle fgets() stocke la chaîne après l'avoir lue à partir du fichier.
taille: Il s'agit du nombre maximum de caractères à lire à partir du flux.
point : C'est un pointeur de fichier.
Approche:
- Dans cette approche, le contenu du fichier est lu un caractère à la fois jusqu'à ce que nous atteignions la fin du fichier.
- Lorsque nous atteignons la fin du fichier, fgets() ne peut pas lire et renvoie NULL et le programme arrêtera de lire.
Vous trouverez ci-dessous le programme C pour mettre en œuvre l'approche ci-dessus :
C
// C program to implement> // the above approach> #include> #include> #include> // Driver code> int> main()> {> > FILE> * ptr;> > char> str[50];> > ptr => fopen> (> 'test.txt'> ,> 'a+'> );> > if> (NULL == ptr) {> > printf> (> 'file can't be opened
'> );> > }> > printf> (> 'content of this file are
'> );> > while> (> fgets> (str, 50, ptr) != NULL) {> > printf> (> '%s'> , str);> > }> > fclose> (ptr);> > return> 0;> }> |
Fichier d'entrée :
techcodeview.com | A computer science portal for geeks
Sortir:
fscanf()
fscanf() lit les entrées formatées d'un flux.
Syntaxe:
int fscanf(FILE *ptr, const char *format, …)
Approche:
- fscanf lit les données formatées des fichiers et les stocke dans des variables.
- Les données du tampon sont imprimées sur la console jusqu'à ce que la fin du fichier soit atteinte.
C++
// C program to implement> // the above approach> #include> // Driver code> int> main()> {> > FILE> * ptr => fopen> (> 'abc.txt'> ,> 'r'> );> > if> (ptr == NULL) {> > printf> (> 'no such file.'> );> > return> 0;> > }> > /* Assuming that test.txt has content> > in below format> > NAME AGE CITY> > abc 12 hyderbad> > bef 25 delhi> > cce 65 bangalore */> > char> buf[100];> > while> (> fscanf> (ptr,> '%*s %*s %s '> ,> > buf)> > == 1)> > printf> (> '%s
'> , buf);> > return> 0;> }> |
Sortir:
fread()
fread() facilite la lecture de blocs de données à partir d'un fichier. Par exemple, dans le cas de la lecture d'une structure à partir du fichier, cela devient un travail facile à lire en utilisant fread.
Syntaxe:
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream)
point : Il s'agit du pointeur vers un bloc de mémoire avec une taille minimale de size*nmemb octets.
taille: Il s'agit de la taille en octets de chaque élément à lire.
nmembre : Il s'agit du nombre d'éléments, chacun ayant une taille de taille octets.
flux: Il s'agit du pointeur vers un objet FILE qui spécifie un flux d'entrée.
Approche:
- Il lit d’abord le nombre d’objets, chacun avec une taille de taille en octets à partir du flux d’entrée donné.
- Le nombre total d'octets lus en cas de succès est de (taille*nombre).
- D'après le no. de caractères lus, la position du fichier indicateur est incrémentée.
- Si les objets lus ne sont pas trivialement copiables, alors le comportement n'est pas défini et si la valeur de size ou count est égale à zéro, alors ce programme renverra simplement 0.
C++
// C program to implement> // the above approach> #include> #include> #include> // Structure to store> // course details> struct> Course {> > char> cname[30];> > char> sdate[30];> };> // Driver code> int> main()> {> > FILE> * of;> > of => fopen> (> 'test.txt'> ,> 'w'> );> > if> (of == NULL) {> > fprintf> (stderr,> > '
Error to open the file
'> );> > exit> (1);> > }> > struct> Course inp1 = {> 'Algorithms'> ,> > '30OCT'> };> > struct> Course inp2 = {> 'DataStructures'> ,> > '28SEPT'> };> > struct> Course inp3 = {> 'Programming'> ,> > '1NOV'> };> > fwrite> (&inp1,> sizeof> (> struct> Course),> > 1, of);> > fwrite> (&inp2,> sizeof> (> struct> Course),> > 1, of);> > fwrite> (&inp3,> sizeof> (> struct> Course),> > 1, of);> > if> (> fwrite> != 0)> > printf> (> 'Contents to file written successfully !
'> );> > else> > printf> (> 'Error writing file !
'> );> > fclose> (of);> > // File pointer to read from file> > FILE> * inf;> > struct> Course inp;> > inf => fopen> (> 'test.txt'> ,> 'r'> );> > if> (inf == NULL) {> > fprintf> (stderr,> > '
Error to open the file
'> );> > exit> (1);> > }> > while> (> fread> (&inp,> sizeof> (> struct> Course),> > 1, inf))> > printf> (> 'Course Name = %s Started = %s
'> ,> > inp.cname, inp.sdate);> > fclose> (inf);> }> |
Sortir: