C programmeringsspråk støtter fire forhåndsdefinerte funksjoner for å lese innhold fra en fil, definert i stdio.h header-fil:
- fgetc() – Denne funksjonen brukes til å lese et enkelt tegn fra filen.
- fgets() – Denne funksjonen brukes til å lese strenger fra filer.
- fscanf() – Denne funksjonen brukes til å lese formatert inndata fra en fil.
- fread() – Denne funksjonen brukes til å lese blokken med råbyte fra filer. Dette brukes til å lese binære filer.
Trinn for å lese en fil:
- Åpne en fil med funksjonen fopen() og lagre referansen til filen i en FIL-peker.
- Les innholdet i filen ved å bruke en av disse funksjonene fgetc(), fgets(), fscanf() eller fread().
- Fil lukk filen med funksjonen fclose().
La oss begynne å diskutere hver av disse funksjonene i detalj.
hvor er innsettingsnøkkelen på laptoptastaturet
fgetc()
fgetc() leser tegn pekt av funksjonspekeren på det tidspunktet. Ved hver vellykket lesing returnerer den tegnet (ASCII-verdi) lest fra strømmen og flytter leseposisjonen til neste tegn. Denne funksjonen returnerer en konstant EOF (-1) når det ikke er noe innhold å lese eller en mislykket lesing.
Syntaks:
int fgetc(FIL *ptr);
Nærme seg:
- Dette programmet leser hele innholdet i filen ved å bruke denne funksjonen ved å lese tegn én etter én.
- Do-While-løkke vil bli brukt som vil lese karakter til den når slutten av filen.
- Når den når slutten, returnerer den EOF-tegn (-1).
Bruker EOF:
Nedenfor er C-programmet for å implementere tilnærmingen ovenfor-
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;> }> |
>
>
Inndatafil:
techcodeview.com | A computer science portal for geeks>
Produksjon:
I koden ovenfor er tilnærmingen å lese ett tegn fra filen og sjekke om det ikke er EOF, hvis det ikke er det, så skriv det ut og om det er så stopp å lese.
Bruker feof():
feof()-funksjonen tar filpekeren som argument og returnerer true hvis pekeren når slutten av filen.
Syntaks:
int feof(FIL *ptr);
Nærme seg:
- I denne tilnærmingen leses et tegn ved å bruke fgetc().
- Bruk funksjonen feof() for å se etter slutten av filen. siden feof() returnerer sant etter at den når slutten.
- Bruk logisk NOT-operator(!) slik at når den når slutttilstanden blir falsk og sløyfestopp.
Nedenfor er C-programmet for å implementere tilnærmingen ovenfor:
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;> }> |
>
>
Inndatafil:
techcodeview.com | A computer science portal for geeks>
Produksjon:
fgets()
fgets() leser én streng om gangen fra filen. fgets() returnerer en streng hvis den er vellykket lest av funksjon eller returnerer NULL hvis den ikke kan leses.
Syntaks:
char * fgets(char *str, int størrelse, FIL * ptr);
Her,
str: Det er streng som fgets() lagrer streng etter å ha lest den fra fil.
størrelse: Det er maksimalt antall tegn å lese fra stream.
ptr: Det er filpeker.
Nærme seg:
- I denne tilnærmingen leses innholdet i filen ett tegn om gangen til vi når slutten av filen.
- Når vi kommer til slutten av filen kan fgets() ikke lese og returnerer NULL og programmet vil slutte å lese.
Nedenfor er C-programmet for å implementere tilnærmingen ovenfor:
C
lenge til int java
// 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;> }> |
>
>
Inndatafil:
techcodeview.com | A computer science portal for geeks>
Produksjon:
fscanf()
fscanf() leser formatert input fra en strøm.
Syntaks:
int fscanf(FIL *ptr, const char *format, …)
Nærme seg:
- fscanf leser formaterte data fra filene og lagrer dem i variabler.
- Dataene i bufferen skrives ut på konsollen til slutten av filen er nådd.
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;> }> |
>
>
Produksjon:
fread()
fread() gjør det lettere å lese blokker med data fra en fil. For eksempel, i tilfelle av å lese en struktur fra filen, blir det en enkel jobb å lese ved å bruke fread.
Syntaks:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: Dette er pekeren til en minneblokk med en minimumsstørrelse på størrelse*nmemb byte.
størrelse: Dette er størrelsen i byte for hvert element som skal leses.
nmemb: Dette er antall elementer, hver med en størrelse på størrelse byte.
strøm: Dette er pekeren til et FILE-objekt som spesifiserer en inngangsstrøm.
Nærme seg:
- Den leser først antall objekter, hver med en størrelse på størrelse byte fra den gitte inngangsstrømmen.
- Den totale mengden byte som leses hvis vellykket er (størrelse*antall).
- I følge nr. av leste tegn, økes indikatorfilposisjonen.
- Hvis de leste objektene ikke er trivielt kopierbare, er oppførselen udefinert, og hvis verdien av størrelse eller antall er lik null, vil dette programmet ganske enkelt returnere 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);> }> |
>
>
Produksjon: