C programovací jazyk podporuje čtyři předdefinované funkce pro čtení obsahu ze souboru, definované v záhlaví souboru stdio.h:
- fgetc() – Tato funkce se používá ke čtení jednoho znaku ze souboru.
- fgets() – Tato funkce se používá ke čtení řetězců ze souborů.
- fscanf() – Tato funkce se používá ke čtení formátovaného vstupu ze souboru.
- fread() – Tato funkce se používá ke čtení bloku nezpracovaných bajtů ze souborů. To se používá ke čtení binárních souborů.
Kroky ke čtení souboru:
- Otevřete soubor pomocí funkce fopen() a uložte odkaz na soubor do ukazatele FILE.
- Čtěte obsah souboru pomocí kterékoli z těchto funkcí fgetc(), fgets(), fscanf() nebo fread().
- Soubor zavřete soubor pomocí funkce fclose().
Začněme podrobně diskutovat o každé z těchto funkcí.
jak velká je obrazovka mého monitoru
fgetc()
fgetc() čte znaky, na které v daný okamžik ukazuje ukazatel funkce. Při každém úspěšném čtení vrátí znak (hodnotu ASCII) přečtený z proudu a posune čtenou pozici na další znak. Tato funkce vrací konstantní EOF (-1), když není žádný obsah ke čtení nebo je čtení neúspěšné.
Syntax:
int fgetc(SOUBOR *ptr);
Přístup:
- Tento program čte celý obsah souboru pomocí této funkce čtením znaků jeden po druhém.
- Použije se smyčka Do-While, která bude číst znak, dokud nedosáhne konce souboru.
- Když dosáhne konce, vrátí znak EOF (-1).
Použití EOF:
Níže je uveden program C pro implementaci výše uvedeného pří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;> }> |
>
>
Vložte soubor:
techcodeview.com | A computer science portal for geeks>
Výstup:
Ve výše uvedeném kódu je přístup číst jeden znak ze souboru a zkontrolovat, zda to není EOF, pokud není, vytisknout jej a pokud je přestat číst.
Použití feof():
Funkce feof() vezme ukazatel na soubor jako argument a vrátí hodnotu true, pokud ukazatel dosáhne konce souboru.
Syntax:
int feof(FILE *ptr);
Přístup:
- V tomto přístupu se znak čte pomocí fgetc().
- Pomocí funkce feof() zkontrolujte konec souboru. protože feof() vrátí true poté, co dosáhne konce.
- Použijte logický operátor NOT(!), aby se při dosažení koncové podmínky stal false a smyčka se zastavila.
Níže je uveden program C pro implementaci výše uvedeného pří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;> }> |
>
>
Vložte soubor:
techcodeview.com | A computer science portal for geeks>
Výstup:
fgets()
fgets() čte ze souboru jeden řetězec po druhém. fgets() vrátí řetězec, pokud je úspěšně přečten funkcí, nebo vrátí NULL, pokud nelze číst.
Syntax:
char * fgets(char *str, velikost int, FILE * ptr);
Tady,
str: Je to řetězec, do kterého fgets() ukládá řetězec po jeho načtení ze souboru.
velikost: Je to maximální počet znaků ke čtení ze streamu.
ptr: Je to ukazatel souboru.
Přístup:
- V tomto přístupu se obsah souboru čte jeden znak po druhém, dokud nedosáhneme konce souboru.
- Když se dostaneme na konec souboru, fgets() nemůže číst a vrátí NULL a program přestane číst.
Níže je uveden program C pro implementaci výše uvedeného pří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;> }> |
>
>
Vložte soubor:
program java ahoj
techcodeview.com | A computer science portal for geeks>
Výstup:
fscanf()
fscanf() čte formátovaný vstup ze streamu.
Syntax:
int fscanf(FILE *ptr, const char *formát, …)
Přístup:
- fscanf čte formátovaná data ze souborů a ukládá je do proměnných.
- Data ve vyrovnávací paměti se tisknou na konzoli, dokud není dosaženo konce souboru.
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ýstup:
fread()
fread() usnadňuje čtení bloků dat ze souboru. Například v případě čtení struktury ze souboru se stává snadno čitelná pomocí fread.
Syntax:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: Toto je ukazatel na blok paměti s minimální velikostí size*nmemb bajtů.
velikost: Toto je velikost v bajtech každého prvku, který se má číst.
nmemb: Toto je počet prvků, z nichž každý má velikost bajtů.
proud: Toto je ukazatel na objekt FILE, který určuje vstupní proud.
Přístup:
- Nejprve načte počet objektů, každý o velikosti bajtů z daného vstupního proudu.
- Celkový počet přečtených bajtů v případě úspěchu je (velikost*počet).
- Podle ne. přečtených znaků, pozice indikátorového souboru se zvýší.
- Pokud čtené objekty nejsou triviálně kopírovatelné, pak je chování nedefinované a pokud je hodnota velikosti nebo počtu rovna nule, pak tento program jednoduše vrátí 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ýstup: