Если я открываю текстовый файл, используя fstream, есть простой способ перехода к определенной строке, такой как строка 8?
В С++ есть ли способ перейти к определенной строке в текстовом файле?
Ответ 1
Проложите свой путь там.
#include <fstream>
#include <limits>
std::fstream& GotoLine(std::fstream& file, unsigned int num){
file.seekg(std::ios::beg);
for(int i=0; i < num - 1; ++i){
file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
}
return file;
}
Устанавливает указатель поиска file
в начало строки num
.
Тестирование файла со следующим содержимым:
1
2
3
4
5
6
7
8
9
10
Testprogram:
int main(){
using namespace std;
fstream file("bla.txt");
GotoLine(file, 8);
string line8;
file >> line8;
cout << line8;
cin.get();
return 0;
}
Выход: 8
Ответ 2
Если каждая строка имеет одинаковую длину, вы можете использовать istream:: seekg(), чтобы перейти к месту и прочитать оттуда.
Ответ 3
Вот пример работы с std::getline()
, если строки имеют одинаковую длину:
#include <iostream>
#include <fstream>
#include <string>
const int LINE = 4;
int main() {
std::ifstream f("FILE.txt");
std::string s;
for (int i = 1; i <= LINE; i++)
std::getline(f, s);
std::cout << s;
return 0;
}
Ответ 4
В общем, нет, вам нужно спуститься, используя стратегию, похожую на то, что Xeo показывает.
Если в качестве netrom говорит, вы знаете, что строки имеют фиксированную длину, да.
И даже если длины строк неизвестны заранее, но (1) вам захочется много прыгать и (2) вы можете гарантировать, что никто не возится с вашим файлом, в то время как вы может сделать один проход, чтобы сформировать индекс, и использовать его после этого.