C Program for å lese innholdet i hele filen

C programmeringsspråk støtter fire forhåndsdefinerte funksjoner for å lese innhold fra en fil, definert i stdio.h header-fil:

  1. fgetc() Denne funksjonen brukes til å lese et enkelt tegn fra filen.
  2. fgets() Denne funksjonen brukes til å lese strenger fra filer.
  3. fscanf() Denne funksjonen brukes til å lese formatert inndata fra en fil.
  4. 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.

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




// 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: