C programovací jazyk podporuje štyri preddefinované funkcie na čítanie obsahu zo súboru, definované v hlavičkovom súbore stdio.h:
- fgetc() – Táto funkcia sa používa na čítanie jedného znaku zo súboru.
- fgets() – Táto funkcia sa používa na čítanie reťazcov zo súborov.
- fscanf() – Táto funkcia sa používa na čítanie formátovaného vstupu zo súboru.
- 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: