Na wstępie warto zaznaczyć, że obsługa plików w programie jest umiejętnością konieczną do napisania programu na maturze. Jeśli prześledzimy zadania z egzaminów z ostatnich kilkunastu lat, na każdym była potrzeba użycia poniższych rozwiązań.
Najprostsza metodą obsługi plików polecaną przez nas na maturę, jest użycie klasy ifstream oraz biblioteki fstream.
Przeanalizujmy poniższy przykład:
Mamy plik dane.txt, zawierający 5 linii tekstu. W każdym wierszu, mamy jedno słowo, np:
mama
dom
drzewo
kwiat
matura
Chcemy kolejno odczytać każdy z wyrazów, pobierając go do zmiennej o nazwie wyraz (typ zmiennej: string) a następnie wyświetlić na ekranie.
Kod realizujący to zadanie może wyglądać następująco:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
// deklaracja zmiennej o nazwie wyraz
string wyraz;
ifstream odczyt; // użycie klasy ifstream oraz utworzenie strumienia o nazwie odczyt
odczyt.open("dane.txt"); // odniesienie do pliku dane.txt - plik musi byc w tym samym katalogu co nasz program
odczyt >> wyraz; // odczytanie wyrazu z pliku i zapisanie do zmiennej wyraz
cout << wyraz << endl; // wyswietlenie pobranego wyrazu na ekranie
odczyt.close(); // zamknięcie strumienia
return 0;
}
Oczywiście tak zapisany program pozwoli nam na odczytanie tylko pierwszego wyrazu z pliku. W celu odczytania wszystkich wyrazów (jeden po drugim) musimy w naszym kodzie umieścić pętlę.
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
// deklaracja zmiennej o nazwie wyraz
string wyraz;
ifstream odczyt; // użycie klasy ifstream oraz utworzenie strumienia o nazwie odczyt
odczyt.open("dane.txt"); // odniesienie do pliku dane.txt - plik musi byc w tym samym katalogu co nasz program
if(odczyt.good()==true){ //warunek, ktory sprawdza istnienie i poprawnosc pliku dane.txt - funkcja good()
while(odczyt.good()==true){ // otwqarcie petli, ktora zczyta po kolei wszystkie wiersze
odczyt >> wyraz; // odczytanie wyrazu z pliku i zapisanie do zmiennej wyraz
cout << wyraz << endl; // wyswietlenie pobranego wyrazu na ekranie
}
}
else
{
cout << "Blad pliku!" << endl; // jeżeli pliku brak lub jest uszkodzony pojawia sie ten komunikat
}
odczyt.close(); // zamknięcie strumienia
return 0;
}
Kod został powiększony o warunek (linia 12), dzięki któremu, w przypadku gdy zapomnimy umieścić plik w katalogu z zadaniem, zostanie wyświetlony błąd, zapisany w linii nr 20.
Oczywiście to nie jest jedyny sposób na odczytanie zawartości pliku, ale jeden z możliwych, który jest dość czytelny i prosty w zastosowaniu.