limbaj de programare C acceptă patru funcții predefinite pentru a citi conținutul dintr-un fișier, definite în fișierul antet stdio.h :
- fgetc() – Această funcție este folosită pentru a citi un singur caracter din fișier.
- fgets() – Această funcție este folosită pentru a citi șiruri din fișiere.
- fscanf() – Această funcție este utilizată pentru a citi intrarea formatată dintr-un fișier.
- friad() – Această funcție este folosită pentru a citi blocul de octeți bruti din fișiere. Acesta este folosit pentru a citi fișiere binare.
Pași pentru a citi un fișier:
- Deschideți un fișier folosind funcția fopen() și stocați referința fișierului într-un pointer FILE.
- Citiți conținutul fișierului folosind oricare dintre aceste funcții fgetc(), fgets(), fscanf() sau fread().
- Fișier închide fișierul folosind funcția fclose().
Să începem să discutăm în detaliu fiecare dintre aceste funcții.
șir înlocuiește toate java
fgetc()
fgetc() citește caracterele indicate de indicatorul funcției în acel moment. La fiecare citire cu succes, returnează caracterul (valoarea ASCII) citită din flux și avansează poziția de citire la următorul caracter. Această funcție returnează un EOF constant (-1) atunci când nu există conținut de citit sau o citire nereușită.
Sintaxă:
int fgetc(FIȘIER *ptr);
Abordare:
- Acest program citește întregul conținut al fișierului, folosind această funcție citind caracterele unul câte unul.
- Va fi folosită bucla Do-While care va citi caracterul până când ajunge la sfârșitul fișierului.
- Când ajunge la sfârșit, returnează caracterul EOF (-1).
Folosind EOF:
Mai jos este programul C pentru a implementa abordarea de mai sus-
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;> }> |
>
>
Fișier de intrare:
techcodeview.com | A computer science portal for geeks>
Ieșire:
În codul de mai sus, abordarea este de a citi un caracter din fișier și de a verifica dacă nu este EOF, dacă nu este, apoi tipăriți-l și dacă este apoi opriți citirea.
Folosind feof():
Funcția feof() ia indicatorul fișierului ca argument și returnează adevărat dacă pointerul ajunge la sfârșitul fișierului.
Sintaxă:
int feof(FILE *ptr);
Abordare:
- În această abordare, un caracter este citit folosind fgetc().
- Folosind feof() funcția de verificare pentru sfârșitul fișierului. deoarece feof() returnează adevărat după ce ajunge la sfârșit.
- Utilizați operatorul logic NOT(!), astfel încât atunci când ajunge la condiția finală, să devină fals și să se oprească bucla.
Mai jos este programul C pentru a implementa abordarea de mai sus:
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;> }> |
>
>
Fișier de intrare:
techcodeview.com | A computer science portal for geeks>
Ieșire:
fgets()
fgets() citește câte un șir din fișier. fgets() returnează un șir dacă este citit cu succes de funcție sau returnează NULL dacă nu poate citi.
Sintaxă:
char * fgets(char *str, int size, FILE * ptr);
Aici,
str: Este un șir în care fgets() stochează șirul după ce îl citește din fișier.
mărimea: Este numărul maxim de caractere de citit din flux.
ptr: Este un indicator de fișier.
Abordare:
- În această abordare, conținutul fișierului este citit câte un caracter până ajungem la sfârșitul fișierului.
- Când ajungem la sfârșitul fișierului fgets() nu poate citi și returnează NULL și programul se va opri din citit.
Mai jos este programul C pentru a implementa abordarea de mai sus:
C
forme normale
// 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;> }> |
>
>
Fișier de intrare:
techcodeview.com | A computer science portal for geeks>
Ieșire:
fscanf()
fscanf() citește intrarea formatată dintr-un flux.
Sintaxă:
int fscanf(FILE *ptr, const char *format, …)
Abordare:
- fscanf citește datele formatate din fișiere și le stochează în variabile.
- Datele din buffer sunt tipărite pe consolă până la sfârșitul fișierului.
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;> }> |
>
>
Ieșire:
friad()
fread() facilitează citirea blocurilor de date dintr-un fișier. De exemplu, în cazul citirii unei structuri din fișier, devine o muncă ușor de citit folosind fread.
Sintaxă:
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr: Acesta este indicatorul către un bloc de memorie cu o dimensiune minimă de dimensiune*nmemb octeți.
mărimea: Aceasta este dimensiunea în octeți a fiecărui element de citit.
nmemb: Acesta este numărul de elemente, fiecare având o dimensiune de octeți de dimensiune.
curent: Acesta este indicatorul către un obiect FILE care specifică un flux de intrare.
Abordare:
- Mai întâi, citește numărul de obiecte, fiecare cu o dimensiune de octeți de dimensiune din fluxul de intrare dat.
- Cantitatea totală de octeți citiți dacă reușiți este (dimensiune*număr).
- Conform nr. de caractere citite, poziția fișierului indicator este incrementată.
- Dacă obiectele citite nu pot fi copiate în mod trivial, atunci comportamentul este nedefinit și dacă valoarea mărimii sau numărului este egală cu zero, atunci acest program va returna pur și simplu 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);> }> |
>
>
Ieșire: