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.
É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: