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