Język programowania C obsługuje cztery predefiniowane funkcje do odczytu zawartości pliku, zdefiniowanej w pliku nagłówkowym stdio.h:
- fgetc() – Funkcja ta służy do odczytania pojedynczego znaku z pliku.
- fgets() – Funkcja ta służy do odczytywania ciągów znaków z plików.
- fscanf() – Ta funkcja służy do odczytywania sformatowanych danych wejściowych z pliku.
- strach() – Funkcja ta służy do odczytu bloku surowych bajtów z plików. Służy do odczytu plików binarnych.
Kroki, aby odczytać plik:
- Otwórz plik za pomocą funkcji fopen() i zapisz odwołanie do pliku we wskaźniku FILE.
- Przeczytaj zawartość pliku, używając dowolnej z tych funkcji fgetc(), fgets(), fscanf() lub fread().
- Plik zamknij plik za pomocą funkcji fclose().
Zacznijmy szczegółowo omawiać każdą z tych funkcji.
losowa kolejność sql
fgetc()
fgetc() odczytuje w tym momencie znaki wskazane przez wskaźnik funkcji. Po każdym pomyślnym odczycie zwraca znak (wartość ASCII) odczytany ze strumienia i przesuwa pozycję odczytu do następnego znaku. Ta funkcja zwraca stałą wartość EOF (-1), gdy nie ma treści do odczytania lub odczyt zakończył się niepowodzeniem.
Składnia:
int fgetc(PLIK *ptr);
Zbliżać się:
- Program ten wczytuje całą zawartość pliku, korzystając z tej funkcji, wczytując znaki jeden po drugim.
- Wykorzystana zostanie pętla Do-While, która będzie czytać znak aż do końca pliku.
- Kiedy osiągnie koniec, zwraca znak EOF (-1).
Korzystanie z EOF:
Poniżej znajduje się program C realizujący powyższe podejście-
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;> }> |
>
>
Plik wejściowy:
techcodeview.com | A computer science portal for geeks>
Wyjście:
W powyższym kodzie podejście polega na odczytaniu jednego znaku z pliku i sprawdzeniu, czy nie jest to EOF, jeśli nie, to wydrukowanie go, a jeśli jest, to zaprzestanie czytania.
Używanie feof():
Funkcja feof() przyjmuje wskaźnik pliku jako argument i zwraca wartość true, jeśli wskaźnik dotrze do końca pliku.
Składnia:
int feof(PLIK *ptr);
Zbliżać się:
- W tym podejściu znak jest odczytywany za pomocą fgetc().
- Użycie funkcji feof() sprawdza koniec pliku. ponieważ feof() zwraca wartość true po osiągnięciu końca.
- Użyj operatora logicznego NOT (!), aby po osiągnięciu warunku końcowego stał się fałszywy i pętla się zatrzymała.
Poniżej znajduje się program C realizujący powyższe podejście:
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;> }> |
>
>
Plik wejściowy:
techcodeview.com | A computer science portal for geeks>
Wyjście:
fgets()
fgets() odczytuje z pliku jeden ciąg znaków na raz. fgets() zwraca ciąg znaków, jeśli został pomyślnie odczytany przez funkcję lub zwraca NULL, jeśli nie można go odczytać.
Składnia:
char * fgets(char *str, int rozmiar, PLIK * ptr);
Tutaj,
str: Jest to ciąg znaków, w którym fgets() przechowuje ciąg znaków po odczytaniu go z pliku.
rozmiar: To maksymalna liczba znaków do odczytania ze strumienia.
pt: To jest wskaźnik pliku.
Zbliżać się:
- W tym podejściu zawartość pliku jest odczytywana po znaku, aż dotrzemy do końca pliku.
- Kiedy dotrzemy do końca pliku, fgets() nie może odczytać i zwraca NULL, a program przestanie czytać.
Poniżej znajduje się program C realizujący powyższe podejście:
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;> }> |
>
>
przykłady programowania w Pythonie
Plik wejściowy:
techcodeview.com | A computer science portal for geeks>
Wyjście:
fscanf()
fscanf() odczytuje sformatowane dane wejściowe ze strumienia.
Składnia:
int fscanf(PLIK *ptr, const char *format, …)
Zbliżać się:
- fscanf odczytuje sformatowane dane z plików i zapisuje je w zmiennych.
- Dane w buforze są drukowane na konsoli aż do osiągnięcia końca pliku.
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;> }> |
>
>
Wyjście:
strach()
fread() ułatwia odczytywanie bloków danych z pliku. Na przykład, w przypadku odczytu struktury z pliku, odczytanie struktury za pomocą freada staje się łatwym zadaniem.
Składnia:
size_t fread(void *ptr, size_t size, size_t nmemb, PLIK *stream)
pt: Jest to wskaźnik do bloku pamięci o minimalnym rozmiarze size*nmemb bajtów.
rozmiar: Jest to rozmiar w bajtach każdego elementu do odczytania.
nmemb: Jest to liczba elementów, z których każdy ma rozmiar w bajtach.
strumień: Jest to wskaźnik do obiektu FILE, który określa strumień wejściowy.
Zbliżać się:
- Najpierw odczytuje liczbę obiektów, każdy o rozmiarze size bajtów, z danego strumienia wejściowego.
- Całkowita ilość bajtów odczytanych w przypadku powodzenia wynosi (rozmiar*liczba).
- Według nr. odczytanych znaków, zwiększana jest pozycja pliku wskaźnika.
- Jeśli odczytanych obiektów nie można w trywialny sposób skopiować, wówczas zachowanie jest niezdefiniowane i jeśli wartość size lub count jest równa zero, wówczas program po prostu zwróci 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);> }> |
>
>
Wyjście: