C++ Program wczytujący rekordy z pliku

0

Witam, mam problem z programem, który ma pobierać dane z pliku, dane w pliku wejściowym są zapisane w postaci:

 
imię nazwisko l1 l2 l3 l4 l5 l6 l7 l8 l9 l10
imię2 nazwisko2 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10
...
itd.
aż do 12 osoby (l1 = liczba1)

Chcę wczytywać te dane kolejno na:

 
string imie;
string nazwisko;
int liczba;

Nie wiem jak efektywnie wczytać dane z pliku do podanych zmiennych, na razie napisałem coś takiego, ale nie wiem jak mam przejść do wczytywania kolejnej linii z pliku:

 
#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    fstream plik;
    string napis;
    string imie, nazwisko;
    int liczby[10]; 
    plik.open( "dane14.txt", ios::in | ios::out );
        if( plik.good() == true )
        {
            cout << "Uzyskano dostep do pliku!" << endl;
                for (int i=0 ; i<12 ; i++)
                {
                    getline( plik, napis );
                    //cout << napis << endl;
                    plik.seekg(0, ios_base::beg);
                    plik>>nazwisko;
                    plik.seekg(nazwisko.length(), ios_base::beg);
                    plik>>imie;
                    plik.seekg( (imie.length() + nazwisko.length(), ios_base::beg);
                         for (int j = 0; j<10 ;j++)
                         {
                              plik>>liczba[j];
                         }
                }                       
        } else cout << "Dostep do pliku zostal zabroniony!" << endl;
system("pause");
return 0;
}
0
unnamed2 napisał(a)

Witam, mam problem z programem, który ma pobierać dane z pliku, dane w pliku wejściowym są zapisane w postaci:

imię nazwisko l1 l2 l3 l4 l5 l6 l7 l8 l9 l10
imię2 nazwisko2 l1 l2 l3 l4 l5 l6 l7 l8 l9 l10
...
itd.
aż do 12 osoby (l1 = liczba1)

> Chcę wczytywać te dane kolejno na:
> <code> 
string imie;
string nazwisko;
int liczby[10];

Nie wiem jak efektywnie wczytać dane z pliku do podanych zmiennych, na razie napisałem coś takiego, ale nie wiem jak mam przejść do wczytywania kolejnej linii z pliku:

 
#include<iostream>
#include<fstream>
using namespace std;

int main()
{
    fstream plik;
    string napis;
    string imie, nazwisko;
    int liczby[10]; 
    plik.open( "dane14.txt", ios::in | ios::out );
        if( plik.good() == true )
        {
            cout << "Uzyskano dostep do pliku!" << endl;
                for (int i=0 ; i<12 ; i++)
                {
                    getline( plik, napis );
                    //cout << napis << endl;
                    plik.seekg(0, ios_base::beg);
                    plik>>nazwisko;
                    plik.seekg(nazwisko.length(), ios_base::beg);
                    plik>>imie;
                    plik.seekg( (imie.length() + nazwisko.length() ), ios_base::beg);
                         for (int j = 0; j<10 ;j++)
                         {
                              plik>>liczby[j];
                         }
                }                       
        } else cout << "Dostep do pliku zostal zabroniony!" << endl;
system("pause");
return 0;
}

Wkradły się literówki powyżej już poprawiony kod.

0

Wywal wszystkie wywołania seekg - przecież nie chcesz za każdym razem wracać do początku pliku.
Zdecyduj się czy używasz getline i wczytujesz cały wiersz, a potem go parsujesz, czy czytasz elementy po kolei i wrzucasz do odpowiednich zmiennych.
Potrzebujesz 12 zestawów zmiennych imie, nazwisko i liczby[10] - aż się prosi, żeby zrobić z tego strukturę, a nawet klasę i przeciążyć operator >>

0
for (int i=0 ; i<12 ; i++)
{
    string napis;
    getline( plik, napis );
    stringstream slinia(napis);
    slinia >> nazwisko >> imie;
    for (int j = 0; j<10 ;j++) {
        slinia>>liczby[j];
    }
    // przetwarzanie pojedynczego rekordu (zapamiętywanie go)
}
0
MarekR22 napisał(a)
for (int i=0 ; i<12 ; i++)
{
    string napis;
    getline( plik, napis );
  ->stringstream slinia(napis);<-
    slinia >> nazwisko >> imie;
    for (int j = 0; j<10 ;j++) {
        slinia>>liczby[j];
    }
    // przetwarzanie pojedynczego rekordu (zapamiętywanie go)
}

ERROR: variable `std::stringstream slinia' has initializer but incomplete type

1 użytkowników online, w tym zalogowanych: 0, gości: 1