Dwukrotny odczyt do końca pliku

Dwukrotny odczyt do końca pliku
Gracu
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Białystok
0

Witam, mam taki problem ponieważ chcę znaleźć pewną daną w pliku tekstowym więc czytam go do końca

Kopiuj
//pseudokod
while(!odczyt.eof())
getline(odczyt, linia);
if(linia == szukanaLinia)
{
nrLinii = licznik;
}
licznik++;
 

następnie mając nrLinii która ma powiedzmy pseudonim, chcę wyświetlić linijkę wyżej w której jest imię oraz 5 kolejny linijek.

Kopiuj

while(!odczyt.eof())
{
getline(odczyt, linia2);
if(j == nrLinii)
 for(int i = 0; i < 5; i++)
  getline(odczyt, linia2);

j++;
}
 

dlaczego to nie działa? Próbowałem ustawiać przed drugą pętla wskaźnik na początek pliku używająć seekg(0), również zamykałem plik i też nie działa. Jak to rozwiązać?

JU
Pokaż prawdziwy kod.
fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

jezeli to nie jest duzy plik (powiedzmy nie ma 100 000 linii) wczytaj sobie go do std::vector.
Znajdz to co potrzebujesz za pomoca vector.find
http://stackoverflow.com/questions/571394/how-to-find-an-item-in-a-stdvector
i po prostu wyjdz o jedna linijke wyzej (czyli o jeden obiekt wyzej)

Gracu
a co w przypadku kiedy jest kilka takich samych danych w vector? i ja potrzebuje wypisać wszystkie? no i ta funkcja find to bool :/
fasadin
zwraca bool. Jezeli potrzebujesz kilka to robisz petle i zapisujesz aktualny iterator vectora. Jezeli cos znajdzie to masz ten iterator. Wiec wystarczy ze zamiast vector.begin() zaczniesz od tego vectora
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
2
Kopiuj
while(getline(odczyt, linia))
    vecto.push_back(linia);

Proszę poczytać dokumentację eof() i zastanowić się na czym polega problem.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.