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:
- 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.
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++
// 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ö: