logo

C Programma om de inhoud van het hele bestand te lezen

C-programmeertaal ondersteunt vier vooraf gedefinieerde functies om de inhoud van een bestand te lezen, gedefinieerd in het stdio.h-headerbestand:

  1. fgetc() Deze functie wordt gebruikt om één teken uit het bestand te lezen.
  2. fgets() Deze functie wordt gebruikt om strings uit bestanden te lezen.
  3. fscanf() Deze functie wordt gebruikt om geformatteerde invoer uit een bestand te lezen.
  4. angst() Deze functie wordt gebruikt om het blok onbewerkte bytes uit bestanden te lezen. Dit wordt gebruikt om binaire bestanden te lezen.

Stappen om een ​​bestand te lezen:



  • Open een bestand met de functie fopen() en sla de referentie van het bestand op in een FILE-pointer.
  • Lees de inhoud van het bestand met behulp van een van deze functies fgetc(), fgets(), fscanf() of fread().
  • Bestand sluit het bestand met de functie fclose().

Laten we beginnen elk van deze functies in detail te bespreken.

aaneenschakeling van Java-tekenreeks

fgetc()

fgetc() leest tekens die op dat moment door de functieaanwijzer worden aangewezen. Bij elke succesvolle lezing retourneert het het gelezen teken (ASCII-waarde) uit de stream en gaat de leespositie door naar het volgende teken. Deze functie retourneert een constante EOF (-1) wanneer er geen inhoud is om te lezen of een mislukte leesbewerking.



Syntaxis:

int fgetc(BESTAND *ptr);

Benadering:



  • Dit programma leest de volledige inhoud van het bestand en gebruikt deze functie door tekens één voor één te lezen.
  • Er wordt een Do-While-lus gebruikt die het teken leest totdat het het einde van het bestand bereikt.
  • Wanneer het einde bereikt wordt, retourneert het het EOF-teken (-1).

EOF gebruiken:
Hieronder vindt u het C-programma om de bovenstaande aanpak te implementeren:

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

>

>

Invoer bestand:

techcodeview.com | A computer science portal for geeks>

Uitgang:

In de bovenstaande code is de aanpak om één teken uit het bestand te lezen en te controleren of het geen EOF is, als dit niet het geval is, druk het dan af en stop dan met lezen.

Feof(): gebruiken
De functie feof() neemt de bestandsaanwijzer als argument en retourneert true als de aanwijzer het einde van het bestand bereikt.

Syntaxis:

int feof(BESTAND *ptr);

Benadering:

  • Bij deze benadering wordt een teken gelezen met behulp van fgetc().
  • Gebruik de functie feof() om het einde van het bestand te controleren. omdat feof() true retourneert nadat het het einde heeft bereikt.
  • Gebruik de logische NOT-operator(!) zodat de voorwaarde bij het bereiken van het einde onwaar wordt en de lus stopt.

Hieronder vindt u het C-programma om de bovenstaande aanpak te implementeren:

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

>

>

Invoer bestand:

techcodeview.com | A computer science portal for geeks>

Uitgang:

fgets()

fgets() leest één string tegelijk uit het bestand. fgets() retourneert een string als deze met succes is gelezen door de functie of retourneert NULL als deze niet kan worden gelezen.

Syntaxis:

char * fgets(char *str, int-grootte, BESTAND * ptr);

Hier,
str: Het is een string waarin fgets() de string opslaat nadat deze uit een bestand is gelezen.
maat: Er mogen maximaal tekens uit de stream worden gelezen.
ptr: Het is een bestandsaanwijzer.

Benadering:

  • Bij deze aanpak wordt de inhoud van het bestand teken voor teken gelezen totdat we het einde van het bestand bereiken.
  • Wanneer we het einde van het bestand bereiken, kan fgets() niet lezen en retourneert NULL en het programma stopt met lezen.

Hieronder vindt u het C-programma om de bovenstaande aanpak te implementeren:

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

>

>

Invoer bestand:

techcodeview.com | A computer science portal for geeks>

Uitgang:

fscanf()

fscanf() leest geformatteerde invoer van een stream.

Syntaxis:

int fscanf(BESTAND *ptr, const char *format, …)

Benadering:

  • fscanf leest geformatteerde gegevens uit de bestanden en slaat deze op in variabelen.
  • De gegevens in de buffer worden op de console afgedrukt totdat het einde van het bestand is bereikt.

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

>

>

Uitgang:

angst()

fread() maakt het gemakkelijker om gegevensblokken uit een bestand te lezen. Als u bijvoorbeeld een structuur uit het bestand leest, wordt het lezen met behulp van fread een gemakkelijke taak.

Syntaxis:

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

ptr: Dit is de verwijzing naar een geheugenblok met een minimale grootte van *nmemb bytes.
maat: Dit is de grootte in bytes van elk te lezen element.
nmemb: Dit is het aantal elementen, elk met een grootte van bytes.
stroom: Dit is de verwijzing naar een FILE-object dat een invoerstroom specificeert.

Benadering:

  • Eerst wordt het aantal objecten gelezen, elk met een grootte van bytes uit de gegeven invoerstroom.
  • Het totale aantal bytes dat wordt gelezen, indien succesvol, is (grootte*aantal).
  • Volgens het nr. aantal gelezen tekens wordt de positie van het indicatorbestand verhoogd.
  • Als de gelezen objecten niet triviaal kopieerbaar zijn, is het gedrag ongedefinieerd en als de waarde van size of count gelijk is aan nul, retourneert dit programma eenvoudigweg 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);> }>

tekenreeks naar char java

>

>

Uitgang: