-1

次のような番号のテキスト ファイルがあります: num1 TAB num2 TAB.... num22 newline 。. .

num1 チェックを読み取って 3 に等しいかどうかを確認し、そうであれば行全体を新しいファイルにコピーしたいと思います。これを行う最速の方法は何ですか? ファイルはかなり大きい 80Mb+ です。また、num 1 は反復的です。つまり、0 から 3 まで 0.001 のステップで進みます。だから私は非常に多くのステップごとに読む必要があります. 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 に答える