複数ファイルのファイル間の重複削除


ますだおかだ  2003-11-30 10:55:32  No: 5841

二つのテキスト間の処理でFile1に書き込んであるもののなかからFile2に書いてないもののみをテキストファイルとして出力したいと思っております。
できるだけ高速に処理するにはどのような方法がありますでしょうか?


にしの  2003-12-01 03:01:07  No: 5842

「書き込んであるもの」が抽象的で、どの程度の量を言っているのでしょうか。
たとえば、
次のような場合。
File1の内容
---ここから
ABC
DEF
GHI
---ここまで
このファイルと、

File2の内容
---ここから
ABC
DEG
HIJ
---ここまで
このファイルの場合、

F
と出力すれば良いのでしょうか。
それとも、

DEF
GHI
と出力するのでしょうか。

簡単にするのであれば、File2にかかれているものを、File1から検索して削除、とすれば良いかと。

高速に処理することを考える前に、どのような処理をするかは考えてありますか?
まず、ざっと処理を作成し、どこが一番時間のかかる箇所かを確認して、そこを重点的に早く処理できるようにしていけばよろしいかと思います。
遅くなると考えられる箇所は、検索ロジックと、ファイル入出力ロジックですが、他にもあるかもしれません。

文字列検索ロジックは、結構たくさんの方法があります。文字列の長さによって、単純法・KMP法・BM法と切り替える手もあります。
テキストの比較が、たとえば改行毎などであれば、文字列検索ロジックを用いずB木などの構造でデータを持ち、その中を検索すれば早くなるかもしれません。

テキストが大きくなければ、ファイル入出力は、1入力1出力としたほうが早いです。遅いのは、メモリに展開せずにファイル内部を何度もシークしながら読み込む方法です。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加