我有一个 C++ 程序,它根据该行的索引从文件中读取该行。该指数在程序的其他地方计算。我的问题是:我可以打开一个文件(即 .txt)并读取其索引指定的行吗?
到目前为止,我有以下代码:
#include <iostream>
#include <fstream>
std::string getLineByIndex(int index, std::fstream file)
{
int file_index = 0;
std::string found_line;
for( std::string line; std::getline(file, line); )
{
if (index == file_index)
{
found_line = line;
break;
}
file_index++;
}
return found_line;
}
随着文件行数的增加,这种线性搜索的效率当然会降低。因此,是否有更有效的方法使用索引从文件中读取行?如果文件中每一行的长度完全相同,答案会改变吗?
文件没有索引。但还是有一些偏移。如果知道行长,就可以计算出查找到的行所在的偏移量,然后通过一次操作读取。
我非常怀疑长度是固定的。所以,可能没有其他办法了。
如果您经常从一个特定文件中提取行,我建议将文件整个读取到内存中,前提是文件不太大,然后将行放入向量中。
或者,如果文件很大,并且您需要经常访问它的行,我建议缓存每个获取操作。基本上 - 读取一个文件,得到一行 - 将它放在某个地方,如果你稍后需要它。