0

私はCに取り組んでいます。特定の行(または複数の行)をファイルで検索するための最良の方法は何ですか?誰かが私に例を教えてもらえますか?2つのファイルがあり、この2つのファイルが80%同一であるかどうかを確認したいと思います。私は、ファイルの1つで、他のファイルから特定の行を検索することを考えました。どうも

Cコードの例が必要です。ここに小さな例があります

int compareFile(FILE* file_compared, FILE* file_checked)
{
    bool diff = 0;
    int N = 65536;
    char* b1 = (char*) calloc (1, N+1);
    char* b2 = (char*) calloc (1, N+1);
    size_t s1, s2;

    do {
        s1 = fread(b1, 1, N, file_compared);
        s2 = fread(b2, 1, N, file_checked);

        if (s1 != s2 || memcmp(b1, b2, s1)) {
            diff = 1;
            break;
        }
      } while (!feof(file_compared) || !feof(file_checked));

    free(b1);
    free(b2);

    if (diff) return 0;
    else return 1;
}

同一の行のパーセンテージを返す方法は?

4

2 に答える 2

0

http://www.text-compare.com/はもう試しましたか? これは、2 つのファイルを比較して違いを見つける簡単な方法です。

C での実装が本当に必要な場合は、2 つのファイル ハンドラーを用意し、改行ごとに文字列を読み取り、両方の文字列を比較し、一致する場合は保持し、一致しない場合は、文字を調べて違いを見つけてください。

または、マスター ファイルをロードし、比較ファイルをマスター ファイルのすべての行と比較して、75% 以上一致する行があるかどうかを確認し、変更を表示することもできます。

今までやってきたことを見せてもらえますか?

于 2012-09-12T07:49:52.283 に答える
0

差分アルゴリズムの本当の問題は、単純に行ごとに比較できないことです。ファイルは実質的に同じですが、1 つのファイルにはファイルの先頭に追加の行があるとします。素朴な(行memcmpごとの)実装では、100%の違いが生じます...

あなたはおそらくやるべきことがたくさんあります。上記のリンクが出発点となる場合があります。

繰り返しになりますが、宿題や車輪の再発明スタイルの課題を検討していない場合は、既存の課題に基づいて構築することをお勧めします。diff -y --suppress-common-lines | wc -l同様に、と plainで2 つのファイルを実行し、wc -lこれら 2 つの呼び出しの出力を収集して、パーセンテージを計算します。はい、これは大雑把に見えますが、独自の diff アルゴリズムを作成するよりもはるかに簡単で高速です。diffまた、メンテナーがこの作業にすべての時間を費やしているツールの将来の改善の恩恵を受けることもできます。

繰り返しますが、これは C ではなく bash で行います。;)

于 2012-09-12T08:55:06.870 に答える