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.
la stringa sostituisce tutto Java
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
Codici di errore di Linux
// 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: