1
File 1: 1356775 lines
File 2: 9516 lines

ファイル 2 には、ファイル 1 で一致した場合にそのファイルから削除する必要がある番号の行が含まれています。例:

ファイル 1

34234323432 some useless stuff
23423432342 more useless stuff
98989898329 foo bar blah
65367389473 one two three

ファイル 2

234234323
653673894

新しいファイル

34234323432 some useless stuff
98989898329 foo bar blah

今の私のアプローチは、

  1. file2 の内容全体を配列に読み込みます
  2. File1 の最初の行を取得し、最初の 8 つの数字を抽出します
  3. ステップ 1 の配列全体をループして、ステップ 1 の 8 つの数値が一致するかどうかを確認します
  4. 番号が一致しない場合は、ステップ 1 の行を新しいファイルに書き込みます
  5. それらが一致する場合は、ループから抜け出し、その行を新しいファイルに書き込まないでください
  6. ステップ 2 から読み取る行がなくなるまで続行します。

ただし、ファイルが非常に大きいため、file1 の各行に対して配列全体 (9516 要素) をループしているため、これを行うには膨大な時間がかかります。ファイルのレコードをDBテーブルに入れずに、このタイプのファイル操作を行う簡単な方法はありますか?

4

2 に答える 2

1

数値をキー、「true」を値として、ハッシュで file2 を読み取ります。ハッシュは、ルックアップが高速になるように設計されています。配列よりもはるかに高速です。

于 2012-02-09T15:27:37.970 に答える
0

多くのブロッキング IO を回避して、File1 のチャンクをメモリに読み込むことができます。

于 2012-02-09T15:21:02.803 に答える