Czytanie pliku

powrót

Otwarcie pliku w trybie do odczytu

Wszystkie funkcje (metody) oraz zmienne (atrybuty) zdefiniowane są w klasie o nazwie $$ifstream$$, na podstawie której musimy utworzyć obiekt. Czytanie zawartości pliku można utożsamić z czytaniem danych z klawiatury. Należy tylko zmienić standardowe wejście z klawiatury na plik. Popatrzmy jeszcze raz, w jaki sposób czytamy dane z klawiatury:

          cin>>zmienna; 

 

gdzie $$cin$$ jest obiektem, który ma zdefiniowane niezbędne metody i atrybuty potrzebne do czytania z klawiatury. Czytanie pliku działa na takiej samej zasadzie. Różnica jest taka, że zamiast nazwy $$cin$$ wpisujemy własną, którą tworzymy w następujący sposób:

          ifstream jakas_nazwa; //zamiast cin bedzie jakas_nazwa
          jakas_nazwa.open("ścieżka do pliku (względna lub bezwzględna)");

 

Klasa $$ifsteram$$ ma zdefiniowane wszystkie elementy pozwalające czytać plik.

Jak mamy już obiekt, to możemy skorzystać z pierwszej jego funkcji, która określa fizyczny plik na dysku. W cudzysłowie podajemy ścieżkę do niego bezwzględną lub względną: bezwzględna ścieżka to cały adres do pliku np.: c:/dane/dane.txt, względna, to taka, która określa położenie pliku względem programu, np. jeśli program i plik z danymi znajdują się w tym samym miejscu, to wystarczy zapisać 

          jakas_nazwa.open("dane.txt"); 

 

Plik, który chcemy czytać, możemy zdefiniować od razu przy tworzeniu obiektu i pomijamy w tej sytuacji funkcję $$open$$:

          ifstream jakas_nazwa("ścieżka do pliku");

 

 Teraz, dane wczytujemy za pomocą konstrukcji:

          jakas_nazwa>>zmienna; 

 

Przykład.

Załóżmy, że mamy utworzony plik tekstowy dane.txt z zapisanymi w nim dwiema liczbami np. 23 12. Chcemy odczytać te liczby i wykonać na nich działanie dodawania. Dodatkowo, nasz program wykonywalny jest w tym samym folderze co plik dane.txt.

 

#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	int a, b;
	ifstream odczyt("dane.txt");
	
	odczyt>>a>>b;
	
	cout<<"Suma wczytanych liczb wynosi: "<<a+b;
	
	cin.get();
	
	odczyt.close(); //zamknięcie pliku
	
	return 0;
}
 

 

Do zamykania pliku służy funkcja $$close();$$.

Pamiętajmy, że jeśli jakiś plik otwieramy, to po zakończonej pracy musimy go zamknąć!!

Czytanie całego pliku

Cały plik możemy przeczytać na kilka sposobów.

  • Pierwszy sposób to czytanie pliku znak po znaku:
#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	int a, b;
	ifstream odczyt("dane.txt");
	
	if(odczyt.is_open())
	{
		char znak;
		while(odczyt>>znak) //dopóki jest co czytać
		{
			cout<<znak; //wypisz to co wczytałes z pliku
			//lub wykonaj inną operację
		}
	}
	else
		cout<<"Nie udało się otworzyć pliku";
	
	cin.get();
	
	return 0;
}
 
  •  drugi sposób to czytanie wyraz po wyrazie:
#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	int a, b;
	ifstream odczyt("dane.txt");
	
	if(odczyt.is_open())
	{
		char wyraz[100];//maksymalnie 99 znaków
		while(odczyt>>wyraz) //dopóki jest co czytać
		{
			cout<<wyraz<<" "; //wypisz to co wczytałes z pliku
			//lub wykonaj inną operację
		}
	}
	else
		cout<<"Nie udało się otworzyć pliku";
	
	cin.get();
	
	return 0;
}
  •  i trzeci sposób wiersz po wierszu:
#include<iostream>
#include<fstream>

using namespace std;

int main()
{
	int a, b;
	ifstream odczyt("dane.txt");
	
	if(odczyt.is_open())
	{
		char wiersz[10000];//maksymalnie 9999 znaków w wierszu
		while(odczyt.getline(wiersz,10000)) //dopóki jest co czytać
		{
			cout<<wiersz<<endl; //wypisz to co wczytałes z pliku
			//lub wykonaj inną operację
		}
	}
	else
		cout<<"Nie udało się otworzyć pliku";
	
	cin.get();
	
	return 0;
}