C-ohjelmointikieli tukee neljää ennalta määritettyä toimintoa sisällön lukemiseksi tiedostosta, jotka on määritelty stdio.h-otsikkotiedostossa:
- fgetc() – Tätä toimintoa käytetään yhden merkin lukemiseen tiedostosta.
- fgets() – Tätä toimintoa käytetään merkkijonojen lukemiseen tiedostoista.
- fscanf() – Tätä toimintoa käytetään muotoiltujen syötteiden lukemiseen tiedostosta.
- 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ö: