Moldis Opublikowano 27 Maja 2008 Udostępnij Opublikowano 27 Maja 2008 Otóż zająłem się dziś obsługą plików .txt w c++.. i wszystko niby pięknie ładnie.. ale nie wiem jak wczytać wybraną linie pliku.. np. w pierwszej lini mam: Daniel w drugiej 17 a w trzeciej Krakow.. jak mam wczytać np. drugą czy trzecią linię.. ifstream plik("D:\\tekst.txt"); plik >> pytanie; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pablo834 Opublikowano 31 Maja 2008 Udostępnij Opublikowano 31 Maja 2008 Żeby przeskakiwać o linijkę do przodu możesz zrobić sobie taką funkcje(nowsza wersja xD): void nextLine(ifstream& plik) { char c; do{ plik.read(&c, 1); } while(c != '\n'); //dopóki c nie jest końcem linii idź dalej } żeby przejść np. do 5 linii możesz zrobić: plik.seekg(0, ios_base::beg); //powrót do początku pliku for(int i =0; i < 5; i++) nextLine(plik); edit: Posiedziałem nad tym trochę i zrobiłem taką klasę: class FileReader { public: FileReader(const char* name) : file(name), line(0) { } template <typename T> void operator >>(T& v) { file >> v; } void move(int t) { if(line + t < 0) { line = 0; file.seekg(0, std::ios_base::beg); return; } line += t; if(t > 0) //jeśli jest większe niż zero to idziemy do przodu { for(; t > 0; t--) { char c; do{ file.read(&c, 1); } while(c != '\n'); } return; } if(t < 0) //jeśli jest mniejsze to idzemy do tyłu { for(; t > 0; t--) { while(file.peek() != '\n') { file.seekg(-1, std::ios_base::cur); } //cofamy do początku tej linii file.seekg(-1, std::ios_base::cur); //przeskakujemy znak końca linii while(file.peek() != '\n') { file.seekg(-1, std::ios_base::cur); } //cofamy się do początku poprzedniej linii file.seekg(1, std::ios_base::cur); //przeskakujemy znak końca linii } } } void goTo(unsigned int l) { move(l - line); //idzemy do tej linii line = l; } unsigned int getLine() { return line; } std::ifstream* getFile() { return &file; } private: unsigned int line; std::ifstream file; }; Nie sprawdzałem jej bo nie mam teraz kompilatora, ale powinna działać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Moldis Opublikowano 31 Maja 2008 Autor Udostępnij Opublikowano 31 Maja 2008 ie.. nie wiem czemu ale mam jakiś problem z funkcją ; d nie wiem do końca jak ją mam zdefiniować.. void nextLine(plik); bo jak zrobie tak to wywala stos błędów, a jak nie podam argumentu to wywala jeden o tym że funkcja nie zajmuje jednego argumentu o,o 1>.\helo1.cpp(33) : error C2660: 'nextLine' : function does not take 1 arguments Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się