logo

C Ohjelma lukea koko tiedoston sisältöä

C-ohjelmointikieli tukee neljää ennalta määritettyä toimintoa sisällön lukemiseksi tiedostosta, jotka on määritelty stdio.h-otsikkotiedostossa:

  1. fgetc() Tätä toimintoa käytetään yhden merkin lukemiseen tiedostosta.
  2. fgets() Tätä toimintoa käytetään merkkijonojen lukemiseen tiedostoista.
  3. fscanf() Tätä toimintoa käytetään muotoiltujen syötteiden lukemiseen tiedostosta.
  4. fread() Tätä toimintoa käytetään lukemaan raakatavujen lohko tiedostoista. Tätä käytetään binääritiedostojen lukemiseen.

Tiedoston lukemisen vaiheet:



  • Avaa tiedosto funktiolla fopen() ja tallenna tiedoston viite FILE-osoittimeen.
  • Lue tiedoston sisältö millä tahansa näistä funktioista fgetc(), fgets(), fscanf() tai fread().
  • Tiedosto sulje tiedosto funktiolla fclose().

Aloitetaan keskustelemaan jokaisesta näistä toiminnoista yksityiskohtaisesti.

javascriptin pudotusvalikosta

fgetc()

fgetc() lukee funktioosoittimen tuolloin osoittamat merkit. Jokaisella onnistuneella lukukerralla se palauttaa virrasta luetun merkin (ASCII-arvon) ja siirtää lukukohdan seuraavaan merkkiin. Tämä funktio palauttaa vakion EOF:n (-1), kun luettavaa sisältöä ei ole tai luku epäonnistuu.



Syntaksi:

int fgetc(TIEDOSTO *ptr);

Lähestyä:



  • Tämä ohjelma lukee tiedoston koko sisällön käyttämällä tätä toimintoa lukemalla merkkejä yksitellen.
  • Käytetään Do-While-silmukkaa, joka lukee merkkiä, kunnes se saavuttaa tiedoston loppuun.
  • Kun se saavuttaa lopun, se palauttaa EOF-merkin (-1).

EOF:n käyttö:
Alla on C-ohjelma yllä olevan lähestymistavan toteuttamiseksi -

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;> }>

>

>

Syöttötiedosto:

techcodeview.com | A computer science portal for geeks>

Lähtö:

Yllä olevassa koodissa lähestymistapa on lukea tiedostosta yksi merkki ja tarkistaa, onko se EOF, jos se ei ole, tulosta se ja jos se on, lopeta lukeminen.

Feof():
feof()-funktio ottaa tiedostoosoittimen argumenttina ja palauttaa tosi, jos osoitin saavuttaa tiedoston loppuun.

Syntaksi:

int feof(TIEDOSTO *ptr);

Lähestyä:

  • Tässä lähestymistavassa merkki luetaan komennolla fgetc().
  • Tarkista tiedoston loppu käyttämällä feof()-funktiota. koska feof() palauttaa arvon tosi saavutettuaan lopun.
  • Käytä loogista NOT-operaattoria(!), jotta sen saavuttaessa lopun ehdosta tulee epätosi ja silmukka pysähtyy.

Alla on C-ohjelma yllä olevan lähestymistavan toteuttamiseksi:

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;> }>

>

>

Syöttötiedosto:

techcodeview.com | A computer science portal for geeks>

Lähtö:

fgets()

fgets() lukee tiedostosta merkkijonon kerrallaan. fgets() palauttaa merkkijonon, jos funktio on lukenut sen onnistuneesti, tai palauttaa NULL-arvon, jos sitä ei voida lukea.

Syntaksi:

char * fgets(char * str, int size, FILE * ptr);

Tässä,
str: Se on merkkijono, johon fgets() tallentaa merkkijonon luettuaan sen tiedostosta.
koko: Virrasta voi lukea enintään merkkiä.
ptr: Se on tiedostoosoitin.

Lähestyä:

  • Tässä lähestymistavassa tiedoston sisältöä luetaan merkki kerrallaan, kunnes saavutamme tiedoston loppuun.
  • Kun saavutamme tiedoston loppuun, fgets() ei voi lukea ja palauttaa NULL:n ja ohjelma lopettaa lukemisen.

Alla on C-ohjelma yllä olevan lähestymistavan toteuttamiseksi:

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;> }>

>

>

Syöttötiedosto:

techcodeview.com | A computer science portal for geeks>

Lähtö:

fscanf()

fscanf() lukee muotoillun syötteen virrasta.

Syntaksi:

int fscanf(TIEDOSTO *ptr, const char *muoto,…)

Lähestyä:

  • fscanf lukee muotoiltuja tietoja tiedostoista ja tallentaa ne muuttujiin.
  • Puskurissa olevat tiedot tulostuvat konsoliin, kunnes tiedoston loppu on saavutettu.

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;> }>

>

>

Lähtö:

fread()

fread() helpottaa tietolohkojen lukemista tiedostosta. Jos esimerkiksi luetaan rakenne tiedostosta, se on helppo lukea freadilla.

Syntaksi:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

ptr: Tämä on osoitin muistilohkoon, jonka vähimmäiskoko on size*nmemb tavua.
koko: Tämä on kunkin luettavan elementin koko tavuina.
nmemb: Tämä on elementtien lukumäärä, joista jokaisen koko on tavua.
stream: Tämä on osoitin FILE-objektiin, joka määrittää syöttövirran.

Lähestyä:

  • Ensin se lukee objektien lukumäärän, joista jokaisella on tavua annetusta syöttövirrasta.
  • Tavujen kokonaismäärä, jos se onnistuu, on (koko*määrä).
  • No. luettua merkkiä, ilmaisintiedoston sijainti kasvaa.
  • Jos luetut objektit eivät ole triviaalisti kopioitavissa, käyttäytyminen on määrittelemätön ja jos koon tai määrän arvo on nolla, tämä ohjelma palauttaa yksinkertaisesti 0:n.

C++




postimyynti läpikulku binääripuu

// 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);> }>

>

>

Lähtö: