-1

我有一个带有如下数字的文本文件: num1 TAB num2 TAB.... num22 newline 。. .

我想阅读 num1 检查它是否等于 3,如果是,则将整行复制到一个新文件中。最快的方法是什么?该文件相当大80Mb +。此外,num 1 是重复的,即它以 0.001 的步长从 0 变为 3。所以我只需要阅读每一个这么多的步骤。我不确定如何告诉计算机先验跳过 x 行?

谢谢。

4

2 回答 2

1

伪代码可以如下所示:

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
    }

}
于 2012-08-29T00:02:21.693 回答
1

鉴于您已经说过运行时性能不是主要问题,那么以下内容清晰简洁:

#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;为简洁起见省略了错误处理。)

于 2012-08-29T00:23:04.840 回答