C++, Matura z informatyki - nauka i materiały., Programowanie

Odczyt i zapis danych z pliku C++

Odczyt i zapis danych z pliku C++

Nie kojarzę żadnego maturalnego zadania, na którym nie wymagano by stworzenia programu pracującego na danych z pliku tekstowego. Jeśli nie potrafisz tego zrobić to nie łudź się, że zdobędziesz jakiekolwiek punkty z zadania na program. W tym wpisie pokażę jak zrobić odczyt i zapis danych z pliku w języku C++.

Odczyt danych z pliku tekstowego

W celu odczytania danych z pliku tekstowego posługiwać będziemy się obiektami klasy fstream i jej metodami. Zakres wiedzy wymaganej na maturze z informatyki nie zahacza właściwie o programowanie obiektowe, więc dla uproszczenia powiedzmy sobie, że będziemy używać zmiennych plikowych i przypisanych im funkcji.

W pierwszej kolejności tworzymy zmienną plikową, postępując analogicznie do deklarowania zmiennej typu int, double itd. Następnie na rzecz nowo utworzonej zmiennej korzystamy z metody open(). Metoda przyjmuje dwa argumenty. Pierwszym jest nazwa pliku wraz z rozszerzeniem .txt podana jako łańcuch znaków, a drugim tryb otwarcia pliku. W tym przypadku jest to tryb input (ang. wejście – w sensie do pliku źródłowego) w postaci ios::in. Aby wszystko działało niezbędne jest dodanie do pliku biblioteki fstream za pomocą dyrektywy preprocesora #include <fstream>.

Następnie należałoby sprawdzić, czy w ogóle udało się otworzyć plik. Jest kilka możliwości. Pierwszą z nich jest:

Jeżeli ten warunek zwraca prawdę to znaczy, że możemy śmiało działać na pliku. Jeżeli warunek zwraca fałsz to znaczy, że coś po drodze poszło nie tak. Być może nazwa pliku lub ścieżka do neigo jest błędna.

Metod sprawdzania poprawności otworzenia pliku jest jeszcze kilka, ale ja nie będę się rozdrabniał i pokażę wam czego sam używam.

Zmienna plikowa po poprawnym otwarciu pliku w domyśle zwróci prawdę, jeżeli ją zanegujemy otrzymamy fałsz więc warunek się nie spełni, także zawartośc bloku if nie wykona się. Jeżeli jednak pliku nie udało się otworzyć to zmienna zwróci fałsz i po negacji uzyskamy prawdę, więc wszystko po if’ie się wykona.

Czytanie zawartości pliku

Z pliku tekstowego w C++ zazwyczaj czytamy w ten sposób, że pobieramy każdą kolejną wartość oddzieloną białymi znakami. To znaczy, że nieważne, czy wartości będą oddzielone enterem, tabulatorem, kilkoma spacjami i tak odczytana zostanie ta wartość po białych znakach. No dobra ale jak to zrobić? Otóż wystarczy stworzyć zmienną typu string, int itd (w zależności od potrzeb) i zadziałać tak samo jak przy obiekcie cin, tzn.:

Program pobierze z pliku daną wartość i zapisze ją do naszej zmiennej.

Jeżeli do odczytania mamy więcej niż jedną daną to możemy użyć pętli. Najwygodniejsza według mnie będzie w tym przypadku pętla while.

W tym przypadku program będzie wypisywał każdą kolejną daną z pliku, aż do jego końca.

Zapis danych do pliku

Na początku postepujemy podobnie jak to miało miejsce w przypadku odczytu danych z pliku. Załączamy bibliotekę, tworzymy zmienną plikową i korzystamy z open(). Jednakże tym razem zamiast trybu input użyjemy trybu output (ang. wyjście, w sensie z pliku źródłowego).

Natomiast zapisywać do pliku będziemy tak samo jak to robimy w przypadku wypisywania w konsoli. Z tą malutką różnicą, że zamiast cout wpisujemy nazwę zmiennej plikowej.

 

Zamykanie pliku

Zarówno w przypadku odczytywania danych, jak i zapisywania należy pamiętać o zamknięciu pliku, jeżeli nie mamy w nim nic więcej do roboty. Dzięki temu ustrzeżemy się problemów. Plik zamykamy w następujący sposób:

 

Odczyt i zapis danych z pliku C++

Pozwoliłem stworzyć sobie krótkie zadanie, na którym przedstawię całą wiedzę zawartą powyżej. Mamy stworzyć program, który wypisze zarobki pana Z w poszczególnych miesiącach podane w pliku zarobki.txt oraz zsumuje je i zapisze w nowym pliku.

Tutaj macie link z danymi i kodem źródłowym.