C ++有效地跳过多行

时间:2014-08-04 13:33:48

标签: c++ file-io getline

我有代码读取每四行并用它做一些事情

ifstream in(inputFile, ios::in);
string zeile;
for (int z = 0; z < numberOfSequences; z++) {
    getline(in,zeile); // skip 3 lines
    getline(in,zeile); // skip 3 lines
    getline(in,zeile); // skip 3 lines
    getline(in,zeile);
    // do something with zeile
}

我的问题是,ASCII文件有超过250 000 000行。所以我对跳过3行最有效的方式感兴趣。 getline是否对字符串执行某种类型的解析in或这是最有效的方法吗?我不想浪费时间跳绳。

1 个答案:

答案 0 :(得分:3)

这几乎是 最有效的方式;唯一的解析&#34;发生的事情是搜索您需要的行尾。

你唯一可以改进的就是不要不必要地存储比你实际要处理的行多四倍的行。您可以使用std::basic_istream::ignore

执行此操作
std::ifstream in(inputFile, std::ios::in);
for (int z = 0; in && z < numberOfSequences; z++) {

   // Skip three lines
   for (int i = 0; i < 3; i++)
      in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

   // Read the fourth line...
   std::string zeile;
   if (std::getline(in, zeile))
      foo(zeile);
}