Llenguatge de programació C Admet quatre funcions predefinides per llegir el contingut d'un fitxer, definides al fitxer de capçalera stdio.h :
- fgetc() – Aquesta funció s'utilitza per llegir un sol caràcter del fitxer.
- fgets() – Aquesta funció s'utilitza per llegir cadenes dels fitxers.
- fscanf() – Aquesta funció s'utilitza per llegir l'entrada amb format d'un fitxer.
- fread () – Aquesta funció s'utilitza per llegir el bloc de bytes en brut dels fitxers. S'utilitza per llegir fitxers binaris.
Passos per llegir un fitxer:
- Obriu un fitxer amb la funció fopen() i emmagatzemeu la referència del fitxer en un punter FILE.
- Llegiu el contingut del fitxer utilitzant qualsevol d'aquestes funcions fgetc(), fgets(), fscanf() o fread().
- Fitxer tanqueu el fitxer amb la funció fclose().
Comencem a parlar de cadascuna d'aquestes funcions en detall.
tutorial java jfx
fgetc()
fgetc() llegeix caràcters apuntats pel punter de funció en aquell moment. En cada lectura correcta, retorna el caràcter (valor ASCII) llegit del flux i avança la posició de lectura al següent caràcter. Aquesta funció retorna un EOF constant (-1) quan no hi ha contingut per llegir o una lectura sense èxit.
Sintaxi:
int fgetc(FITXER *ptr);
Enfocament:
- Aquest programa llegeix tot el contingut del fitxer, utilitzant aquesta funció llegint els caràcters un per un.
- S'utilitzarà el bucle Do-While que llegirà el caràcter fins que arribi al final del fitxer.
- Quan arriba al final, retorna el caràcter EOF (-1).
Utilitzant EOF:
A continuació es mostra el programa C per implementar l'enfocament anterior:
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;> }> |
>
>
Fitxer d'entrada:
techcodeview.com | A computer science portal for geeks>
Sortida:
Al codi anterior, l'enfocament és llegir un caràcter del fitxer i comprovar si no és EOF, si no ho és, imprimir-lo i deixar de llegir si ho és.
Utilitzant feof():
La funció feof() pren el punter del fitxer com a argument i retorna cert si el punter arriba al final del fitxer.
Sintaxi:
int feof(FITXER *ptr);
Enfocament:
- En aquest enfocament, un caràcter es llegeix utilitzant fgetc().
- Utilitzant la funció feof() comprova el final del fitxer. ja que feof() retorna cert després d'arribar al final.
- Utilitzeu l'operador NOT lògic (!) perquè quan arribi a la condició final es converteixi en fals i el bucle s'aturi.
A continuació es mostra el programa C per implementar l'enfocament anterior:
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;> }> |
>
>
Fitxer d'entrada:
techcodeview.com | A computer science portal for geeks>
Sortida:
fgets()
fgets() llegeix una cadena a la vegada del fitxer. fgets() retorna una cadena si la funció llegeix correctament o retorna NULL si no es pot llegir.
Sintaxi:
char * fgets (char *str, mida int, FITXER * ptr);
Aquí,
str: És una cadena en què fgets() emmagatzema una cadena després de llegir-la des del fitxer.
mida: És el màxim de caràcters per llegir del flux.
ptr: És un punter de fitxer.
Enfocament:
- En aquest enfocament, el contingut del fitxer es llegeix un caràcter a la vegada fins que arribem al final del fitxer.
- Quan arribem al final del fitxer fgets() no pot llegir i retorna NULL i el programa deixarà de llegir.
A continuació es mostra el programa C per implementar l'enfocament anterior:
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;> }> |
>
>
Fitxer d'entrada:
techcodeview.com | A computer science portal for geeks>
Sortida:
fscanf()
fscanf() llegeix l'entrada amb format d'un flux.
Sintaxi:
int fscanf(FILE *ptr, const char *format, …)
Enfocament:
- fscanf llegeix les dades amb format dels fitxers i les emmagatzema en variables.
- Les dades del buffer s'imprimeixen a la consola fins que s'arriba al final del fitxer.
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;> }> |
>
>
Sortida:
fread ()
fread() facilita la lectura de blocs de dades d'un fitxer. Per exemple, en el cas de llegir una estructura des del fitxer, es converteix en una feina fàcil de llegir amb fread.
llistes css
Sintaxi:
size_t fread (void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: Aquest és el punter a un bloc de memòria amb una mida mínima de bytes size*nmemb.
mida: Aquesta és la mida en bytes de cada element a llegir.
nmemb: Aquest és el nombre d'elements, cadascun amb una mida de bytes de mida.
corrent: Aquest és el punter a un objecte FILE que especifica un flux d'entrada.
Enfocament:
- En primer lloc, llegeix el nombre de recompte d'objectes, cadascun amb una mida de bytes de mida del flux d'entrada donat.
- La quantitat total de bytes que es llegeixen en cas d'èxit és (mida*nombre).
- Segons el núm. de caràcters llegits, la posició del fitxer indicador s'incrementa.
- Si els objectes llegits no es poden copiar de manera trivial, aleshores el comportament no està definit i si el valor de la mida o el nombre és igual a zero, aquest programa simplement retornarà 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);> }> |
>
>
Sortida: