C++ OD PODSTAW DO MATURY

Odczyt pliku z danymi i zapis wyniku do pliku

Praktycznie wszystkie zadania maturalne dotyczące programowania wymagają wczytania do programu danych z dostarczonego pliku tekstowego. Z kolei wyniki działania programu mają być zapisane do pliku tekstowego z odpowiedziami. Stąd umiejętność wczytania danych z zewnętrznego pliku oraz zapis wyniku do pliku tekstowego jest podstawową umiejętnością, bez której niemożliwe jest rozwiązanie zadań maturalnych.

Odczyt danych z zewnętrznego pliku tekstowego

Samo wczytanie danych nie jest operacją skomplikowaną. Należy jednak struktury poleceń nauczyć się na pamięć. Pracując z plikami zewnętrznymi, należy skorzystać z dodatkowej biblioteki:

#include <fstream>

Pierwszym krokiem jest utworzenie „zaczepu”, zmiennej typu plik, nazwy w programie, za pomocą której będziemy odwoływali się do danych z pliku (poniżej nazwa zaczepu – plik).

fstream plik;

Wskazujemy programowi ścieżkę do pliku oraz jego nazwę. Jeżeli plik znajduje się w tym samym folderze, w którym przechowywany jest kod źródłowy oraz plik wynikowy, wystarczy podać tylko nazwę pliku. Funkcja open oznacza otwarcie pliku do dalszych czynności. Drugim parametrem tej funkcji jest sposób otwarcia, może to być otwarcie pliku do zapisu, albo tylko do przeczytania.

Aby móc odczytywać dane z pliku tekstowego, należy go otworzyć z parametrem ios::in.

plik.open(„test.txt”, ios::in)

Ponieważ jednak może nastąpić sytuacja, gdy próbujemy otworzyć plik, który nie istnieje, np. w wyniku literówki w jego nazwie, dobrze jest przygotować program na taką ewentualność i nie wykonywać kolejnych operacji na danych pochodzących z nieistniejącego pliku. Do tego sprawdzenia wykorzystamy instrukcję warunkową oraz funkcję good(). Wykorzystana funkcja exit() powoduje zatrzymanie programu w sytuacji, jeśli nie uda się potwierdzić poprawnych danych dotyczących pliku zewnętrznego.

if(!plik.good()) {

cout<<”Brak pliku”;

exit();

}

Jeżeli nie wiemy, jak długi jest plik z danymi, można posłużyć się funkcją eof(). Zwraca ona prawdę, gdy w pliku nie ma już więcej danych do przeczytania.

Po zakończeniu pracy z plikiem należy go zamknąć.

plik.close();

W programie przedstawionym na Rysunku 1 zostaną wyświetlone wszystkie liczby całkowite przechowywane w pliku o nazwie liczby.txt, który znajduje się w tym samym folderze, co plik wynikowy (plik z kodem).

W praktyce maturalnej należy zwrócić uwagę na to, że najczęściej pliki z danymi zawierają ostatni pusty wiersz. Za pomocą opisanej wyżej metody zostaje wczytany również ten pusty wiersz, co w niektórych zadaniach spowoduje zwrócenie błędnych wyników.

Najczęściej w zadaniach maturalnych podana jest liczba danych do wczytania. Można więc funkcję eof() zastąpić zwykłą pętlą for (Rysunek 2).

Rysunek 1 - przykład programu wczytującego wszystkie dane liczbowe z pliku.

Rysunek 2 - odczyt danych z pliku z użyciem pętli for

Odczyt danych z zewnętrznego pliku tekstowego

W przypadku zapisywania danych do pliku tekstowego, należy otworzyć plik z prawami do zapisu, co umożliwia parametr funkcji o pen() ios::out. Jeżeli plik o podanej nazwie nie istnieje w folderze, w którym znajduje się plik kodu programu (cpp), zostanie on utworzony. Jeżeli taki już istnieje, zostanie nadpisana jego zawartość (zostanie usunięte to, co do tej pory w nim się znajdowało i zapisana zostanie nowa treść).

plik.open("liczby.txt", ios::out);

Można również posłużyć się krótszym zapisem (jeżeli kompilator na to zezwoli)

Teraz możemy wpisać wartość do pliku. Dzieje się to podobnie, jak w przypadku wysłania wartości zmiennej na ekran do konsoli. Zamiast polecenia cout używamy nazwy zaczepu (zmiennej typu plik)

plik<<name<<endl;

Program zapisujący wartości przechowywane w tablicy może wyglądać następująco.


Powyższe treści znajdziesz opisane na następujących stronach:

Zdjęcie w nagłówku przedstawia Londyn

Źródło: https://www.pexels.com/pl-pl/zdjecie/47648/ (publikacja na wolnych licencjach)