Programski jezik C podpira štiri vnaprej določene funkcije za branje vsebine iz datoteke, definirane v datoteki glave stdio.h:
- fgetc() – Ta funkcija se uporablja za branje enega znaka iz datoteke.
- fgets() – Ta funkcija se uporablja za branje nizov iz datotek.
- fscanf() – Ta funkcija se uporablja za branje oblikovanega vnosa iz datoteke.
- fread() – Ta funkcija se uporablja za branje bloka neobdelanih bajtov iz datotek. To se uporablja za branje binarnih datotek.
Koraki za branje datoteke:
- Odprite datoteko s funkcijo fopen() in shranite referenco datoteke v kazalec FILE.
- Preberite vsebino datoteke s katero koli od teh funkcij fgetc(), fgets(), fscanf() ali fread().
- Datoteka zapre datoteko s funkcijo fclose().
Začnimo podrobneje razpravljati o vsaki od teh funkcij.
oblikovati datum v niz
fgetc()
fgetc() prebere znake, na katere takrat kaže funkcijski kazalec. Ob vsakem uspešnem branju vrne znak (vrednost ASCII), prebran iz toka, in položaj branja premakne na naslednji znak. Ta funkcija vrne konstanten EOF (-1), če ni vsebine za branje ali je branje neuspešno.
Sintaksa:
int fgetc(DATOTEKA *ptr);
Pristop:
- Ta program prebere celotno vsebino datoteke in s to funkcijo bere znake enega za drugim.
- Uporabljena bo zanka Do-While, ki bo prebrala znak, dokler ne doseže konca datoteke.
- Ko doseže konec, vrne znak EOF (-1).
Uporaba EOF:
Spodaj je program C za izvajanje zgornjega pristopa-
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;> }> |
>
>
Vhodna datoteka:
techcodeview.com | A computer science portal for geeks>
Izhod:
V zgornji kodi je pristop tak, da preberete en znak iz datoteke in preverite, ali ni EOF, če ni, ga nato natisnete in če je, prenehate z branjem.
Uporaba feof():
funkcija feof() vzame kazalec datoteke kot argument in vrne vrednost true, če kazalec doseže konec datoteke.
Sintaksa:
int feof(DATOTEKA *ptr);
Pristop:
- Pri tem pristopu se znak prebere s funkcijo fgetc().
- S funkcijo feof() preverite konec datoteke. ker feof() vrne true, ko doseže konec.
- Uporabite logični operator NOT(!), tako da, ko doseže končni pogoj, postane false in se zanka ustavi.
Spodaj je program C za izvajanje zgornjega pristopa:
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;> }> |
>
>
Vhodna datoteka:
techcodeview.com | A computer science portal for geeks>
Izhod:
fgets()
fgets() bere en niz iz datoteke. fgets() vrne niz, če ga funkcija uspešno prebere, ali vrne NULL, če ga ni mogoče prebrati.
Sintaksa:
char * fgets(char *str, int size, FILE * ptr);
tukaj,
str: To je niz, v katerega fgets() shrani niz, potem ko ga prebere iz datoteke.
velikost: Iz toka lahko preberete največje število znakov.
ptr: To je kazalec datoteke.
Pristop:
- Pri tem pristopu se vsebina datoteke bere en znak naenkrat, dokler ne pridemo do konca datoteke.
- Ko pridemo do konca datoteke, fgets() ne more brati in vrne NULL in program bo nehal brati.
Spodaj je program C za izvajanje zgornjega pristopa:
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;> }> |
>
>
Vhodna datoteka:
techcodeview.com | A computer science portal for geeks>
Izhod:
fscanf()
fscanf() prebere formatiran vnos iz toka.
Sintaksa:
int fscanf(DATOTEKA *ptr, const char *format, …)
Pristop:
- fscanf prebere formatirane podatke iz datotek in jih shrani v spremenljivke.
- Podatki v medpomnilniku se izpisujejo na konzoli, dokler ni dosežen konec datoteke.
C++
polje v metodah java
// 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;> }> |
>
>
Izhod:
fread()
fread() olajša branje blokov podatkov iz datoteke. Na primer, v primeru branja strukture iz datoteke postane enostavno branje s fread.
Sintaksa:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: To je kazalec na blok pomnilnika z najmanjšo velikostjo size*nmemb bajtov.
velikost: To je velikost v bajtih vsakega elementa za branje.
nmemb: To je število elementov, od katerih ima vsak velikost velikosti bajtov.
tok: To je kazalec na objekt FILE, ki določa vhodni tok.
Pristop:
- Najprej prebere štetje objektov, od katerih ima vsak velikost velikosti bajtov iz danega vhodnega toka.
- Skupna količina branja bajtov, če je uspešno, je (velikost*štetje).
- Glede na št. prebranih znakov se položaj datoteke indikatorja poveča.
- Če prebranih objektov ni mogoče trivialno kopirati, je vedenje nedefinirano in če je vrednost velikosti ali števila enaka nič, bo ta program preprosto vrnil 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);> }> |
>
>
Izhod: