Przeczytaj plik do tablicy w C ++

Przeczytaj plik do tablicy w C ++
Czytanie całego pliku w tablicy nie jest tak trudne, jak może się wydawać. Plik, niezależnie od tego, czy tekst lub inny, składa się z bajtów od początku do końca. Bajty można odczytać jako postacie. Postacie można odczytać jeden po drugim do tablicy.

W tym artykule wyjaśniono, jak odczytać cały plik w tablicy. Nagłówek C ++ (biblioteka) fstream, ma klasę ifstream. Klasa ifStream ma przeciążone funkcje członka. Dwie z tych przeciążonych funkcji członka można użyć do odczytania całego pliku do tablicy. Program do takiego czytania powinien rozpocząć się od:

#włączać
#włączać
za pomocą przestrzeni nazw Std;

Pierwsze dwa wiersze to dyrektywy, a nie stwierdzenia. Pierwszy zawiera bibliotekę fstream dla funkcji get (). Drugi zawiera bibliotekę iostream do drukowania na terminalu (konsolę) i odbierania znaków z klawiatury. Trzeci wiersz jest stwierdzeniem. Nalega, aby każda nazwa nie poprzedzona przez „std ::” jest standardową przestrzenią nazw.

Istnieje niewielki problem z funkcjami get (), długość tablicy musi być oszacowana, aby być co najmniej jedną znakiem więcej niż liczba znaków w pliku. Chodzi o to, aby mieć „\ 0” włączone tuż po ostatnim przeczytaniu postaci w tablicy, tworząc jeden długi ciąg.

Jeśli długości tablicy nie można oszacować jako takiej, wówczas cały plik należy odczytać w innym obiekcie, takim jak obiekt ciągów (klasy ciągu). Ponieważ celem tego artykułu jest wyjaśnienie, jak odczytać w tablicy, należy oszacować rozmiar tablicy.

Przez resztę tego artykułu zakłada się, że nazwa pliku, którego treść ma być odczytana, jest txtFile.TXT, w katalogu, DIR1, w katalogu domowym/użytkownika.

Treść artykułu

- Czytanie całego pliku znak po charakterze

- Czytanie całego pliku z jedną funkcją członka

- Wniosek

Czytanie całego pliku znak po charakterze

Składnia funkcji ifstream przeciążona get (), w tym celu:

Basic_istream& Get (char_type i c);

Segment kodu programu do odczytania następnego znaku w pliku jest:

Char C;
Char ARR [100];
int i = 0;
While (ifs.get (c))
arr [i] = c;
i ++;

Pierwsze stwierdzenie deklaruje zmienną, C odbędzie każdy z znaków. Drugie oświadczenie deklaruje tablicę, która otrzyma wszystkie znaki, jeden po drugim. Trzeci wiersz deklaruje wskaźnik tablicy, zaczynając od zera do rozwiązania wszystkich elementów tablicy, które otrzymają postać. Przy takim podejściu można dodać „\ 0” po tym, jak ostatni znak pliku został włączony do tablicy.

Nawiązki w pobycie,

ifs.Get (c)

gdzie IFS jest nazwą obiektu ifstream. Kolejna postać pliku jest otrzymywana przez funkcję BET Member i przypisuje się do C. Następnie wewnętrzny wskaźnik obiektu ifstream wskazywałby na postać po przeczytaniu. Po osiągnięciu końca pliku wyrażenie „IFS.Get (c) ”staje się fałszywy zamiast prawdziwych, więc kończy się pętla w pobycie.

Poniższy program przeczyta wszystkie znaki pliku i wydrukuje wszystkie treści do terminalu:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

ifStream IFS = ifStream ("Dir1/txtFile.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char C; int i = 0; Char ARR [100];
While (ifs.get (c))
arr [i] = c;
i ++;

ifs.zamknąć(); arr [i] = '\ 0'; Cout<
w przeciwnym razie
Cout<< "File could not be open!" <powrót 0;

ifStream zgodnie z kodem, otwiera plik do odczytu.

Czytanie całego pliku z jedną funkcją członka

Funkcja członka ifstream przeciążona get () do odczytania całego pliku, bez pętli, jest:

Basic_istream& Get (Char_Type* S, strumień N, Char_Type DeLim);

Nadal odczytuje cały znak po znaku, ale nie jest to już biznes programisty C ++. Ponadto ta funkcja dodaje znak zerowy „\ 0” w imieniu programisty, zakładając, że n jest co najmniej jeden znak dłuższy niż zawartość pliku.

Pierwszym argumentem tej przeciążonej funkcji get () jest tablica z tymi samymi ograniczeniami (w tym oszacowaniem), co powyższa tablica, aby otrzymać wszystkie znaki pliku. Drugi argument, n, typu strumienia, jest oszacowanie liczby znaków w pliku. Wskazane jest, aby rozmiar tablicy i n, to samo. Nie ma potrzeby pewnej pętli z tą funkcją członka.

Teraz wiersz w pliku tekstowym kończy się sekwencją ucieczki, „\ n”. Jeśli trzeci argument to „\ n”, to tylko pierwszy wiersz pliku zostanie odczytany. Tak więc funkcja musi zostać oszukana z dowolną postacią, która prawdopodobnie nie zostanie znaleziona w treści pliku. Dobrym kandydatem na trzeci argument jest „\ 0”. Dzięki tej przeciążonej funkcji członka programista musi mieć pewną wiedzę na temat możliwych znaków w pliku, aby nie używać postaci, która jest częścią treści pliku.

Poniższy program odczytuje wszystkie znaki pliku z jedną instrukcją i wydrukuje całą zawartość do terminala:

#włączać
#włączać
za pomocą przestrzeni nazw Std;
int main ()

ifStream IFS = ifStream ("Dir1/txtFile.txt ", ios_base :: in);
if (ifs.is_open () == true)
Char ARR [100];
ifs.get (ARR, 100, „\ 0”);
ifs.zamknąć(); Cout<
w przeciwnym razie
Cout<< "File could not be open!" <powrót 0;

Wniosek

Cały plik można odczytać w tablicy. To przede wszystkim potrzebuje klasy C ++ ifstream biblioteki fstream. Plik musi zostać otwarty do odczytania. Aby odczytać wszystkie znaki (bajty) pliku (jeden po drugim) do tablicy, użyj funkcji członka ifStream,

Basic_istream& Get (char_type i c)

jako warunek w pętli. Aby odczytać wszystkie znaki (bajty) pliku, do tablicy za pomocą jednej funkcji członka ifstream bez pętli, funkcją członka ifStream powinna być:

Basic_istream& Get (Char_Type* S, strumień N, Char_Type DeLim);

Nie zapomnij oszukać funkcji na trzecim argumencie. Dzięki tej funkcji programista musi mieć pewną wiedzę na temat możliwych znaków w pliku.