Pliki tekstowe odczyt i zapis


Plik tekstowy może zawierac liczby albo teksty albo łaczyć i liczby i teksty.
Pierwszy przypadek, który rozpatrzymy będzie zawiera tylko litery (słowa , badź zdania). Otworzymy plik i całe wiersze zapamiętamy jako zmienne typu string. Plik otworzymy używając nagłówka biblioteki <fstream> oraz wykorzystując zmienną fstream. Ponieważ tylko wczytujemy tekst z pliku moglibyśmy użyć biblioteki <ifstream>. Nazwy pochodzą od języka angielskiego:

  • ifstream = in file stream = wczytywanie plików
  • ofstream = out file stream = zapisywania plików
  • fstream = połączenie obu powyższych

    
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <string>
     
    using namespace std;
     
    int main()
    {
        string linia; // deklaracja zmiennej, która będzie przechowywała całą linię z pliku txt
        fstream plik; // zmienna plikowa - to na tej zmienne będą wykonywane operacjae otwarcia i zamknięcia
     
        plik.open("plik.txt", ios::in);  //otwarcie pliku do odczytu
        if(plik.good() == true)  // jeśli plik istnieje i można go otworzyć
        {
            while(!plik.eof())  // pętla odczytujaca wiersz po wierszu aż do końca pliku
            {
                getline(plik, linia);
                cout << linia << endl; //wyświetlenie linii
            }
            plik.close();
        }
     
            return(0);
    }
      
    
    

    Dane można oczywiście wczytywać do tablicy typu string

    
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <string>
     
    using namespace std;
     
    int main()
    {
        string T[100]; // tablica typu string o 100 wierszach (max 100 wierszy w piku txt
        fstream plik; // zmienna plikowa - to na tej zmienne będą wykonywane operacjae otwarcia i zamknięcia
     
        plik.open("plik.txt", ios::in);  //otwarcie pliku do odczytu
        if(plik.good() == true)  // jeśli plik istnieje i można go otworzyć
        {
            int i = 0;
    		while(!plik.eof())  // pętla odczytujaca wiersz po wierszu aż do końca pliku
            {
                getline(plik, T[i]);
                cout << T[i] << endl; //wyświetlenie linii
    			i++;
            }
            plik.close();
        }
     
            return(0);
    }
      
    
    

    Jeżeli w pliku tekstowym mamy liczby (1 2 3 ...) i w każdym wierszu są one rozdzielane spacjami i liczb w każdym wierszu jest zawsze tyle samo np.:

    11 22 33
    44 55 66
    itd..
    to możesz użyć strumienia:

    
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    
    
    using namespace std;
    
    int main()
    {
    fstream plik;
    int liczba1, liczba2, liczba3;
    
    plik.open( "dane.txt", ios::in | ios::out );
    if( plik.good() == true )
    	{
    		while (!(plik.eof()))
    			{
    				plik >> liczba1 >>liczba2 >> liczba3;
    				cout << liczba1 << endl; 
    				cout << liczba2 << endl; 
    				cout << liczba3 << endl; 
    			} 
    		plik.close(); 
    	} 
    return(0); 
    }
    
    

    Należy być ostrożnym używając strumienia. Wszytko może się rozsypać jeżeli jedna linijka będzie miała np. 4 wyrazy a pozostałe 3. Funkcji wbudowanej do rozdzielania tekstu po określonych znakach niestety nie ma.


    Wróć do spisu tematów