Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Wczytywanie danych liczbowych i tekstowych z pliku tekstowego

Ostatnio zmodyfikowano 2014-06-04 19:52
Autor Wiadomość
marek252
Temat założony przez niniejszego użytkownika
[C++] Wczytywanie danych liczbowych i tekstowych z pliku tekstowego
» 2014-06-04 19:00:52
Witam.
Powiedzmy, że w pliku mam zapisywane dane tak, że jedna dana w jednym wierszu. Są to dane typu int, bool i string. Teraz chcę wczytać te dane i nadać odpowiednim zmiennym odpowiednie wartości z tego pliku. Czy ogólny zarys może być taki jak zrobiłem? W pierwszym wierszu w pliku jest liczba ma to być wartość zmiennej typu int liczba_1, dlatego wczytuję cały wiersz do strumienia, później robię konwersję z string na int i następnie przypisuję tej zmiennej liczba_1 wartość jaka jest w strumieniu. Dla zmiennej liczba_2 tak samo. 3 wiersz w pliku to string, tutaj bez konwersji po prostu przyrównuję zmienną string imie do bufora. Czy tak może być? Jak natomiast wczytać (w pliku mam 0 lub 1) dane do zmiennej typu bool? Mógłby mi ktoś dodać ten kawałek kodu?
C/C++
fstream plik;
string wiersz;
int liczba_1, liczba_2;
bool zadowolony, smutny;
string imie;

plik.open( "D:\\info.txt", ios::in );
if( plik.good() == true )
{
    cout << "Uzyskano dostep do pliku!" << endl;
   
    getline( plik, wiersz );
    istringstream witalnosc( wiersz );
    witalnosc >> liczba_1;
    cout << liczba_1 << endl;
   
    getline( plik, wiersz );
    istringstream sila( wiersz );
    sila >> liczba_2;
    cout << liczba_2 << endl;
   
   
    getline( plik, wiersz );
    imie = wiersz;
    cout << "To imie to: " << imie << endl;
   
    plik.close();
}
else
     cout << "Dostep do pliku zostal zabroniony!" << endl;

Pozdrawiam
edit: jeszcze jedno pytanie. Czy plik.close() musi być w tym miejscu gdzie jest czy może być na samym końcu czy po if else, tzn. czy zamykamy ten strumień tylko wtedy jeśli udało się poprawnie otworzyć plik czy niezależnie od tego czy się udało otworzyć plik czy nie to i tak musimy zamknąć strumień?
P-111423
Monika90
» 2014-06-04 19:42:01
Dlaczego taki skomplikowany sposób? Na ogół wystarczy to:
C/C++
plik >> liczba_1 >> liczba_2 >> imie >> zadowolony;
if( plik )
{
    cout << "OK: " << liczba_1 << liczba_2 << imie << zadowolony << '\n';
}

jeżeli imie zawiera spacje to jest trochę gorzej, bodajże tak:
C/C++
plik >> liczba_1 >> liczba_2;
plik.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
getline( plik, imie );
plik >> zadowolony;

if( plik )
{
    cout << "OK: " << liczba_1 << liczba_2 << imie << zadowolony << '\n';
}

Nie musisz zamykać strumienia, sam się zamknie, gdy sterowanie wyjdzie z zkaresu zmiennej plik.
P-111427
marek252
Temat założony przez niniejszego użytkownika
» 2014-06-04 19:52:31
Rzeczywiście ten sposób działa i jest łatwiejszy. Myślałem, że koniecznie trzeba przekonwertować to co pobieramy, bo to string na taki typ danej do jakiej chcemy przyrównać odczytywaną wartość, ale widocznie to się jakoś samo robi. Dzięki.
P-111429
« 1 »
  Strona 1 z 1