Ż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ć.