Cpp 按索引获取文件行

问题描述 投票:0回答:1

我有一个 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;
}

随着文件行数的增加,这种线性搜索的效率当然会降低。因此,是否有更有效的方法使用索引从文件中读取行?如果文件中每一行的长度完全相同,答案会改变吗?

c++ fstream ifstream
1个回答
0
投票

文件没有索引。但还是有一些偏移。如果知道行长,就可以计算出查找到的行所在的偏移量,然后通过一次操作读取。

我非常怀疑长度是固定的。所以,可能没有其他办法了。

如果您经常从一个特定文件中提取行,我建议将文件整个读取到内存中,前提是文件不太大,然后将行放入向量中。

或者,如果文件很大,并且您需要经常访问它的行,我建议缓存每个获取操作。基本上 - 读取一个文件,得到一行 - 将它放在某个地方,如果你稍后需要它。

© www.soinside.com 2019 - 2024. All rights reserved.