Odczyt danych z pliku

Jeśli możemy zapisać dane z konsoli do pliku to także możemy je wyświetlić na konsolę. Przeanalizuj poniższy program.

35.cpp


1: #include<iostream>
2: #include<conio.h>
3: #include<fstream>
4: #include<widnows.h>
5:
6: using namespace std;
7:
8: int main()
9: {
10:      fstream plik;
11:
12:      plik.open("plik1.txt");
13:      if(plik.good())
14:      {
15:           while(!plik.eof())
16:           {
17:                string Zdanie;
18:                getline(plik, Zdanie);
19:                cout<<Zdanie<<endl;
20:           }
21:      }
22:      plik.close();
23:
24: getch();
25: }


Program wyświetli na konsoli zawartość pliku plik1.txt.

Przenalizujmy składnię.
Użyłem w 10. linijce fstream plik; czyli stworzyłem zmienną plikową o nazwie plik.

Następnie poleceniem plik.open("plik1.txt"); otwieramy nasz plik.

Oba polecenia można zastąpić jednym znanym nam już ofstream. Każdy teraz może się zdecydować na dowolny format składni.

W linijce 13. sprawdzamy czy nasz plik istnieje. Funkcja good() sprawdza, czy ten plik istnieje w miejscu do którego się odwołujemy, jeśli nie, żadna czynność nie zostanie wykonana. Jeśli jesteśmy pewni, że plik istnieje, możemy pominąć tą instrukcję, lecz ucierpi na tym nasza funkcjonalność (Ktoś może nasz plik usunąć, a wtedy program się „wysypie”).

W bloku if, pętla while pozwala nam odczytać kolejne linie z pliku. Eof() – end of file. Pętla while działa dopóki wartości są różne (!) od ostatniej linii.

Następnie zmienna typu string przechwytuje linię tekstu pobraną z pliku i wyświetla ją na konsoli.

W linijce 22. zamykamy dostęp do pliku.

Zadania
35. Napisz program, który wpisze do pliku średnie miesięczne temperatury powietrza roku poprzedniego. Następnie wyczyści konsolę i wyświetli owe temperatury z pliku na konsolę.


UWAGA!
Nazwę pliku możemy także podać przez konsolę. Wtedy zmienna typu string musi zostać wpisana w miejsce, gdzie normalnie podajemy ścieżkę. W ten sposób program zyskuje na funkcjonalności, gdyż możemy podać dowolny plik poprzez ścieżkę bezwzględną.


Pobieranie po jednym znaku z pliku

Sprawdzimy teraz czy nasz znak pobrany z pliku jest cyfrą, jeśli tak zwiększymy licznik. W ten sposób policzymy ilość cyfr w pliku

  • get() – pobiera jeden znak;
  • isalnum(x) przyjmuje wartość prawda, jeśli x jest cyfrą lub liczbą;
  • isdigit(x) przyjmuje wartość prawda, jeżeli x jest cyfrą;
  • isalpha(x) przyjmuje wartość prawda, jeżeli x jest literą;

36.cpp


1: #include<iostream>
2: #include<conio.h>
3: #include<fstream>
4: #include<widnows.h>
5:
6: using namespace std;
7:
8: int main()
9: {
10:      int iLicznik = 0;
11:      fstream plik;
12:      plik.open("plik1.txt");
13:
14:      if(plik.good())
15:      {
16:           while(!plik.eof())
17:           {
18:                char a;
19:                plik.get(a);
20:                if(isdigit(a)) iLicznik += 1;
21:           }
22:      }
23:      plik.close();
24:      cout<<"W naszym pliku jest "<<iLicznik<<" cyfr."<<endl;
25:
26: getch();
27: }


Wpisz dane do tego pliku ręcznie lub poprzednim programem. Program policzy ile jest cyfr w całym pliku.

Program powinien zwrócić ilość cyfr w pliku np.
W naszym pliku jest 5 cyfr.

© Mateusz Ratajczak         www.commitcode.pl