logo

C Program na čítanie obsahu celého súboru

C programovací jazyk podporuje štyri preddefinované funkcie na čítanie obsahu zo súboru, definované v hlavičkovom súbore stdio.h:

  1. fgetc() Táto funkcia sa používa na čítanie jedného znaku zo súboru.
  2. fgets() Táto funkcia sa používa na čítanie reťazcov zo súborov.
  3. fscanf() Táto funkcia sa používa na čítanie formátovaného vstupu zo súboru.
  4. fread() Táto funkcia sa používa na čítanie bloku nespracovaných bajtov zo súborov. Používa sa na čítanie binárnych súborov.

Kroky na čítanie súboru:



  • Otvorte súbor pomocou funkcie fopen() a uložte odkaz na súbor do ukazovateľa FILE.
  • Prečítajte si obsah súboru pomocou ktorejkoľvek z týchto funkcií fgetc(), fgets(), fscanf() alebo fread().
  • Súbor zatvorte súbor pomocou funkcie fclose().

Začnime podrobne diskutovať o každej z týchto funkcií.

zreťaziť java reťazec

fgetc()

fgetc() číta znaky, na ktoré v tom čase ukazuje ukazovateľ funkcie. Pri každom úspešnom prečítaní vráti znak (hodnotu ASCII) prečítaný z prúdu a posunie čítanú pozíciu na ďalší znak. Táto funkcia vracia konštantný EOF (-1), keď nie je k dispozícii žiadny obsah na čítanie alebo je čítanie neúspešné.



Syntax:

int fgetc(SÚBOR *ptr);

Prístup:



  • Tento program načíta celý obsah súboru pomocou tejto funkcie čítaním znakov jeden po druhom.
  • Použije sa slučka Do-While, ktorá bude čítať znak, kým nedosiahne koniec súboru.
  • Keď dosiahne koniec, vráti znak EOF (-1).

Použitie EOF:
Nižšie je uvedený program C na implementáciu vyššie uvedeného prístupu -

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

>

>

Vstupný súbor:

techcodeview.com | A computer science portal for geeks>

Výkon:

Vo vyššie uvedenom kóde je prístup čítať jeden znak zo súboru a skontrolovať, či to nie je EOF, ak nie je, potom ho vytlačiť a ak je, potom prestať čítať.

Použitie feof():
Funkcia feof() berie ukazovateľ súboru ako argument a vráti hodnotu true, ak ukazovateľ dosiahne koniec súboru.

Syntax:

int feof(FILE *ptr);

Prístup:

  • V tomto prístupe sa znak číta pomocou fgetc().
  • Pomocou funkcie feof() skontrolujte koniec súboru. pretože feof() po dosiahnutí konca vráti hodnotu true.
  • Použite logický operátor NOT(!), aby sa po dosiahnutí koncovej podmienky stal nepravdivým a slučka sa zastavila.

Nižšie je uvedený program C na implementáciu vyššie uvedeného prístupu:

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

>

>

Vstupný súbor:

techcodeview.com | A computer science portal for geeks>

Výkon:

fgets()

fgets() číta zo súboru po jednom reťazci. fgets() vráti reťazec, ak ho funkcia úspešne načíta, alebo vráti NULL, ak sa nedá čítať.

Syntax:

char * fgets(char *str, int velkost, FILE * ptr);

Tu,
str: Je to reťazec, do ktorého fgets() ukladá reťazec po jeho načítaní zo súboru.
veľkosť: Je to maximálny počet znakov na čítanie zo streamu.
ptr: Je to ukazovateľ súboru.

Prístup:

  • V tomto prístupe sa obsah súboru číta jeden znak po druhom, až kým sa nedostaneme na koniec súboru.
  • Keď sa dostaneme na koniec súboru, fgets() nemôže čítať a vráti NULL a program prestane čítať.

Nižšie je uvedený program C na implementáciu vyššie uvedeného prístupu:

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

>

>

Vstupný súbor:

techcodeview.com | A computer science portal for geeks>

Výkon:

fscanf()

fscanf() číta formátovaný vstup z prúdu.

Syntax:

int fscanf(FILE *ptr, const char *formát, ...)

Prístup:

stromová mapa
  • fscanf číta naformátované údaje zo súborov a ukladá ich do premenných.
  • Údaje vo vyrovnávacej pamäti sa tlačia na konzole, kým sa nedosiahne koniec súboru.

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

>

>

Výkon:

fread()

fread() uľahčuje čítanie blokov údajov zo súboru. Napríklad v prípade čítania štruktúry zo súboru sa stáva jednoduchou úlohou čítať pomocou fread.

Syntax:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

ptr: Toto je ukazovateľ na blok pamäte s minimálnou veľkosťou size*nmemb bajtov.
veľkosť: Toto je veľkosť v bajtoch každého prvku, ktorý sa má prečítať.
nmemb: Toto je počet prvkov, z ktorých každý má veľkosť bajtov.
Prúd: Toto je ukazovateľ na objekt FILE, ktorý špecifikuje vstupný tok.

Prístup:

  • Najprv načíta počet objektov, každý s veľkosťou bajtov z daného vstupného toku.
  • Celkový počet prečítaných bajtov v prípade úspechu je (veľkosť*počet).
  • Podľa č. prečítaných znakov sa pozícia súboru indikátora zvýši.
  • Ak načítané objekty nie je možné triviálne kopírovať, potom je správanie nedefinované a ak sa hodnota veľkosti alebo počtu rovná nule, tento program jednoducho vráti 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);> }>

>

>

Výkon: