我有一个带有如下数字的文本文件: num1 TAB num2 TAB.... num22 newline 。. .
我想阅读 num1 检查它是否等于 3,如果是,则将整行复制到一个新文件中。最快的方法是什么?该文件相当大80Mb +。此外,num 1 是重复的,即它以 0.001 的步长从 0 变为 3。所以我只需要阅读每一个这么多的步骤。我不确定如何告诉计算机先验跳过 x 行?
谢谢。
伪代码可以如下所示:
while (not eof) {
fgets(...);
find TAB symbol or end of line
get string between two marks
cleain it from spaces and other unnecessary symbols
float fval = atof(...);
if (fval == 3) {
write the string into new file
}
}
鉴于您已经说过运行时性能不是主要问题,那么以下内容清晰简洁:
#include <string>
#include <fstream>
void foo(std::string const& in_fn, std::string const& out_fn)
{
std::ifstream is(in_fn);
std::ofstream os(out_fn);
std::string line;
while (std::getline(is, line))
if (line.size() && std::stoi(line) == 3)
os << line << '\n';
}
(假定支持 C++11;为简洁起见省略了错误处理。)