[C++] Odczytywanie pliku od danego miejsca - tellg ();
Ostatnio zmodyfikowano 2014-04-22 12:16
Mahtar Temat założony przez niniejszego użytkownika |
[C++] Odczytywanie pliku od danego miejsca - tellg (); » 2014-04-22 11:32:41 Witam. Mam program, który odczytuje w funkcji linię z pliku. Następnie program coś tam robi i znowu odwołuje się do funkcji, aby odczytać kolejną linię. Tutaj pojawia się problem. Gdy odczytuje funkcje po raz n-ty to plik jest otwierany i wczytuje linię pierwszą. Próbowałem zrobić to instrukcjami seekg oraz tellg, tzn. Przy końcu funkcji zwracam aktualną pozycję za pomocą tellg(), a przy następnym uruchomieniu funkcji, pobieram tą pozycję, ale zamiast wczytywać od tego miejsca, wczytuje od zupełnie innego. #include <iostream> #include <fstream>
using namespace std;
void odczyt( streamoff & x, string & napis );
int main() { streamoff x = 0; string napis[ 6 ]; odczyt( x, napis[ 0 ] ); odczyt( x, napis[ 1 ] ); odczyt( x, napis[ 2 ] ); }
void odczyt( streamoff & x, string & napis ) { ifstream plik; plik.open( "tekst.txt" ); plik.seekg( x ); getline( plik, napis ); x = plik.tellg(); plik.close(); }
Jeżeli założymy, że w pliku tekstowym mamy trzy następujące linie: "Ala ma kota kot ma Ale Panie Janie" Pierwsze wywołanie funkcji powinno wczytać pierwszą linie - wczytuje poprawnie. Drugie wywołanie funkcji powinno wczytać drugą linię - wczytuje aby: "ma Ale" Trzecie wywołanie funkcji powinno wczytać trzecią linię - wczytuje aby: "ie Janie" |
|
alixir |
» 2014-04-22 12:11:46 Ogólnie brakuje #include <string> i zamiast przekazywać pozycję jako argument funkcji napisałbym raczej tak void odczyt( string & napis ) { static streamoff x = ios::beg; ifstream plik; plik.open( "tekst.txt" ); plik.seekg( x ); getline( plik, napis ); x = plik.tellg(); plik.close(); } |
|
maly |
» 2014-04-22 12:16:56 plik.open( "tekst.txt", ifstream::in | ifstream::binary ); Pytanie po co otwierać i zamykać plik? |
|
« 1 » |