C programmēšanas valoda atbalsta četras iepriekš definētas funkcijas, lai nolasītu saturu no faila, kas definēts stdio.h galvenes failā:
- fgetc() – Šo funkciju izmanto, lai no faila nolasītu vienu rakstzīmi.
- fgets() – Šo funkciju izmanto, lai nolasītu virknes no failiem.
- fscanf() – Šī funkcija tiek izmantota, lai nolasītu formatētu ievadi no faila.
- fread () – Šo funkciju izmanto, lai no failiem nolasītu neapstrādātu baitu bloku. To izmanto bināro failu lasīšanai.
Faila lasīšanas darbības:
- Atveriet failu, izmantojot funkciju fopen(), un saglabājiet faila atsauci FILE rādītājā.
- Lasiet faila saturu, izmantojot jebkuru no šīm funkcijām fgetc(), fgets(), fscanf() vai fread().
- Fails aizveriet failu, izmantojot funkciju fclose().
Sāksim detalizēti apspriest katru no šīm funkcijām.
vairāku rindiņu komentāru powershell
fgetc()
fgetc() nolasa rakstzīmes, kuras tajā laikā norādīja funkcijas rādītājs. Katrā veiksmīgā lasīšanas reizē tas atgriež no straumes nolasīto rakstzīmi (ASCII vērtību) un pārceļ lasīšanas pozīciju uz nākamo rakstzīmi. Šī funkcija atgriež nemainīgu EOF (-1), ja nav lasāma satura vai lasīšana ir neveiksmīga.
Sintakse:
int fgetc(FILE *ptr);
Pieeja:
- Šī programma nolasa visu faila saturu, izmantojot šo funkciju, nolasot rakstzīmes pa vienai.
- Tiks izmantota Do-While cilpa, kas nolasīs rakstzīmi, līdz tā sasniegs faila beigas.
- Kad tas sasniedz beigas, tas atgriež EOF rakstzīmi (-1).
Izmantojot EOF:
Zemāk ir C programma, lai īstenotu iepriekš minēto pieeju.
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;> }> |
>
>
Ievades fails:
techcodeview.com | A computer science portal for geeks>
Izvade:
Iepriekš minētajā kodā pieeja ir nolasīt vienu rakstzīmi no faila un pārbaudīt, vai tā nav EOF, ja tā nav, tad izdrukājiet to un, ja tā ir, tad pārtrauciet lasīšanu.
Izmantojot feof():
Funkcija feof() izmanto faila rādītāju kā argumentu un atgriež true, ja rādītājs sasniedz faila beigas.
Sintakse:
int feof(FILE *ptr);
Pieeja:
- Šajā pieejā rakstzīme tiek nolasīta, izmantojot fgetc().
- Izmantojot funkciju feof () pārbaudiet faila beigas. jo feof() atgriež true, kad tas sasniedz beigas.
- Izmantojiet loģisko operatoru NOT (!), lai, sasniedzot beigu nosacījumu, kļūtu nepatiess un cilpa apstātos.
Zemāk ir C programma, lai īstenotu iepriekš minēto pieeju:
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;> }> |
>
>
Ievades fails:
techcodeview.com | A computer science portal for geeks>
Izvade:
fgets()
fgets() no faila nolasa vienu virkni vienlaikus. fgets() atgriež virkni, ja to veiksmīgi nolasa funkcija, vai atgriež NULL, ja nevar nolasīt.
Sintakse:
char * fgets(char * str, int izmērs, FILE * ptr);
Šeit,
str: Tā ir virkne, kurā fgets() saglabā virkni pēc tās nolasīšanas no faila.
Izmērs: No straumes var nolasīt maksimālo rakstzīmju skaitu.
ptr: Tas ir faila rādītājs.
Pieeja:
- Šajā pieejā faila saturs tiek lasīts pa vienai rakstzīmei, līdz mēs sasniedzam faila beigas.
- Kad mēs sasniedzam faila beigas, fgets() nevar lasīt un atgriež NULL, un programma pārtrauks lasīt.
Zemāk ir C programma, lai īstenotu iepriekš minēto pieeju:
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;> }> |
>
>
Ievades fails:
techcodeview.com | A computer science portal for geeks>
Izvade:
fscanf()
fscanf() nolasa formatētu ievadi no straumes.
Sintakse:
int fscanf (FILE *ptr, const char * formāts, …)
Pieeja:
- fscanf nolasa formatētus datus no failiem un saglabā tos mainīgajos.
- Buferī esošie dati tiek drukāti uz konsoles, līdz tiek sasniegts faila beigas.
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;> }> |
>
string.compareto c#
>
Izvade:
fread ()
fread() atvieglo datu bloku nolasīšanu no faila. Piemēram, ja tiek nolasīta struktūra no faila, to kļūst viegli lasīt, izmantojot Fread.
Sintakse:
size_t fread(tukšums *ptr, size_t izmērs, size_t nmemb, FILE *straume)
ptr: Šis ir rādītājs uz atmiņas bloku ar minimālo izmēru * nmemb baiti.
Izmērs: Tas ir katra nolasāmā elementa lielums baitos.
nmemb: Šis ir elementu skaits, katrs ar lielumu baitos.
straume: Šis ir rādītājs uz FILE objektu, kas norāda ievades straumi.
Pieeja:
- Pirmkārt, tas nolasa objektu skaitu, katrs ar lieluma baitu lielumu no dotās ievades straumes.
- Kopējais nolasāmo baitu daudzums, ja tas ir veiksmīgs, ir (izmērs*skaits).
- Saskaņā ar Nr. no lasītajām rakstzīmēm, indikatora faila pozīcija tiek palielināta.
- Ja nolasītie objekti nav triviāli kopējami, tad darbība nav definēta un, ja lieluma vai skaita vērtība ir vienāda ar nulli, šī programma vienkārši atgriezīs 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);> }> |
>
>
Izvade: