logo

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 :

  1. fgetc() Cette fonction est utilisée pour lire un seul caractère du fichier.
  2. fgets() Cette fonction est utilisée pour lire des chaînes à partir de fichiers.
  3. fscanf() Cette fonction est utilisée pour lire l'entrée formatée d'un fichier.
  4. 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.

États aux États-Unis

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;> }>

>

>

coquille bourne-à nouveau

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: