Ifstream如何使用c++从特定行开始读行

ifstream how to start read line from a particular line using c++

本文关键字:开始 何使用 c++ Ifstream      更新时间:2023-10-16

我使用ifstream来解析c++代码中的文件。我不能使用seekg()tellg()在代码的特定行中跳转。

特别地,我想用getLine方法从文件的特定位置读取一行。在先前迭代中保存的位置。

您只需跳过所需的行数。最好的方法是使用std::istream::ignore

忽略字符串。
for (int currLineNumber = 0; currLineNumber < startLineNumber; ++currLineNumber){
    if (addressesFile.ignore(numeric_limits<streamsize>::max(), addressesFile.widen('n'))){
        //just skipping the line
    } else {
        // todo: handle the error
    }
}

第一个参数是要提取的最大字符数。如果正好是numeric_limits::max(),则没有限制。

您应该使用is而不是std::getline,因为性能更好。

似乎没有特定的c++函数,如"seekline",以满足您的需求,我看到两种方法来解决这个任务:

  1. 初值你可以用空格展开文本文件中的每一行,以达到定长L。然后,要查找所需行N,只需使用seekg L * N偏移
  2. 这种方法比较复杂。您可以创建一个辅助二进制文件文件,它的每个字节将保持源代码的每行长度文件。这个辅助文件是一种数据库。接下来,你必须在初始化阶段将这个二进制文件加载到程序的数组中。a的偏移量textfile中的所需行应计算为第一个N数组的和元素。当然,需要同时更新辅助文件和源文件。

如果文本文件符合其大小要求,则第一种情况更有效。第二种情况对于长文本文件和稀有的编辑操作具有最佳性能。

相关文章: