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

[C++] Odczytywanie pliku od danego miejsca - tellg ();

Ostatnio zmodyfikowano 2014-04-22 12:16
Autor Wiadomość
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.

C/C++
#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 ] );
   
    // Jakieś tam operacje....
   
    odczyt( x, napis[ 1 ] );
   
    // Jakieś tam operacje....
   
    odczyt( x, napis[ 2 ] );
   
    // Jakieś tam operacje....
}

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"
P-108498
alixir
» 2014-04-22 12:11:46
Ogólnie brakuje
#include <string>
 i zamiast przekazywać pozycję jako argument funkcji napisałbym raczej tak

C/C++
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();
}
P-108500
maly
» 2014-04-22 12:16:56
plik.open( "tekst.txt", ifstream::in | ifstream::binary );
Pytanie po co otwierać i zamykać plik?
P-108501
« 1 »
  Strona 1 z 1