C Programma per leggere il contenuto dell'intero file
Linguaggio di programmazione C supporta quattro funzioni predefinite per leggere il contenuto di un file, definite nel file di intestazione stdio.h:
- fgetc() – Questa funzione viene utilizzata per leggere un singolo carattere dal file.
- fget() – Questa funzione viene utilizzata per leggere stringhe da file.
- fscanf() – Questa funzione viene utilizzata per leggere l'input formattato da un file.
- paura() – Questa funzione viene utilizzata per leggere il blocco di byte grezzi dai file. Viene utilizzato per leggere file binari.
Passaggi per leggere un file:
- Apri un file utilizzando la funzione fopen() e memorizza il riferimento del file in un puntatore FILE.
- Leggere il contenuto del file utilizzando una qualsiasi di queste funzioni fgetc(), fgets(), fscanf() o fread().
- File chiudere il file utilizzando la funzione fclose().
Iniziamo a discutere ciascuna di queste funzioni in dettaglio.
fgetc()
fgetc() legge i caratteri puntati dal puntatore alla funzione in quel momento. Ad ogni lettura riuscita, restituisce il carattere (valore ASCII) letto dallo stream e fa avanzare la posizione di lettura al carattere successivo. Questa funzione restituisce un EOF costante (-1) quando non c'è contenuto da leggere o una lettura non riuscita.
Sintassi:
int fgetc(FILE *ptr);
Approccio:
- Questo programma legge l'intero contenuto del file, utilizzando questa funzione leggendo i caratteri uno per uno.
- Verrà utilizzato il ciclo Do-While che leggerà il carattere fino a raggiungere la fine del file.
- Quando raggiunge la fine restituisce il carattere EOF (-1).
Utilizzando EOF:
Di seguito è riportato il programma C per implementare l'approccio di cui sopra:
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;> }> |
File di input:
techcodeview.com | A computer science portal for geeks
Produzione:
Nel codice sopra, l'approccio è leggere un carattere dal file e controllare se non è EOF, se non lo è stamparlo e se lo è interrompere la lettura.
Utilizzando feof():
La funzione feof() accetta il puntatore del file come argomento e restituisce true se il puntatore raggiunge la fine del file.
Sintassi:
int feof(FILE *ptr);
Approccio:
- In questo approccio, un carattere viene letto utilizzando fgetc().
- Usando la funzione feof() controlla la fine del file. poiché feof() restituisce true dopo aver raggiunto la fine.
- Utilizzare l'operatore NOT logico (!) in modo che quando raggiunge la fine la condizione diventi falsa e il ciclo si interrompa.
Di seguito è riportato il programma C per implementare l'approccio di cui sopra:
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;> }> |
File di input:
techcodeview.com | A computer science portal for geeks
Produzione:
fget()
fgets() legge una stringa alla volta dal file. fgets() restituisce una stringa se viene letta correttamente dalla funzione o restituisce NULL se non può leggere.
Sintassi:
char * fgets(char *str, int size, FILE * ptr);
Qui,
stringa: È una stringa in cui fgets() memorizza la stringa dopo averla letta dal file.
misurare: È il numero massimo di caratteri da leggere dallo stream.
ptr: È un puntatore al file.
Approccio:
- In questo approccio, il contenuto del file viene letto un carattere alla volta fino a raggiungere la fine del file.
- Quando raggiungiamo la fine del file fgets() non può leggere e restituisce NULL e il programma smetterà di leggere.
Di seguito è riportato il programma C per implementare l'approccio di cui sopra:
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;> }> |
File di input:
techcodeview.com | A computer science portal for geeks
Produzione:
fscanf()
fscanf() legge l'input formattato da un flusso.
Sintassi:
int fscanf(FILE *ptr, const char *formato, …)
Approccio:
- fscanf legge i dati formattati dai file e li memorizza in variabili.
- I dati nel buffer vengono stampati sulla console fino al raggiungimento della fine del file.
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;> }> |
Produzione:
paura()
fread() semplifica la lettura di blocchi di dati da un file. Ad esempio, nel caso di leggere una struttura dal file, diventa un lavoro facile da leggere usando fread.
Sintassi:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: Questo è il puntatore a un blocco di memoria con una dimensione minima di size*nmemb byte.
misurare: Questa è la dimensione in byte di ciascun elemento da leggere.
nome: Questo è il numero di elementi, ciascuno con una dimensione di size byte.
flusso: Questo è il puntatore a un oggetto FILE che specifica un flusso di input.
Approccio:
- Per prima cosa legge il numero di oggetti, ciascuno con una dimensione di size byte, dal flusso di input specificato.
- La quantità totale di byte letti in caso di successo è (dimensione*conteggio).
- Secondo il n. di caratteri letti, la posizione del file indicatore viene incrementata.
- Se gli oggetti letti non sono banalmente copiabili, allora il comportamento non è definito e se il valore di size o count è uguale a zero, allora questo programma restituirà semplicemente 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);> }> |
Produzione: