我需要阅读一个大文本文件(超过10,000行)。
然而,想法是读取这个文本文件的一个块(可能是大约15行 - 块逐块),处理它,然后继续从我离开的地方读取下一个块。
我正在做的是跟踪我离开的地方的行号,我处理我的信息,然后我有一个函数将文件指针移动到我离开的地方,我做下一个块和等......
以下是用于跳过行的函数:
ifstream& SkipToLine(ifstream& file, unsigned int num) {
file.seekg(ios::beg);
for (unsigned int i = 0; i < num; ++i) {
file.ignore(numeric_limits<streamsize>::max(), '\n');
}
return file;
}
然后在另一个函数中我有这样的东西:
ifstream inputfile;
// Taking care of exceptions here...
inputfile.open(fileOBS);
while (!inputfile.eof()) {
SkipToLine(inputfile, LineNum);
getline(inputfile, line);
// Then a function for reading the block
// Then a function for processing the block
// Keeping track of the line number
LineNum = update;
// If reached end of block,
break;
}
我在另一个函数中调用上面的函数来循环遍历整个文件,条件是:
while(LineNum < FileLength){
// call function above
}
我发现这是低效的,因为如果块是朝向文本文件的末尾,我基本上调用一个函数从文件的第一行开始计数,直到我到达一个几乎可能在文件的结尾。
有没有办法可以主动跟踪我离开的文件指针?
感谢您的时间!