• ベストアンサー

ファイルの比較

ファイルの比較ツールを作りたいのですが 変更行の認識の仕方がわかりません。 どなたか知っている方がいらっしゃいましたら 教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#3の者です。補足を頂きお手数をお掛けしました。 プログラムソースであれば、(1)コボル等のようにソース・シーケンス番号が振ってあれば、それをキーとして比較できます。既にソート済みのはずです。挿入は下の桁の10(100)ずつスキップした番号の間を使って振っているはずです。(2)新たに振りなおしてしまっていると難しい。(3)シーケンス番号が振ってないときは、下記はどうですか。 まず変更前と変更後の両者の各行にシーケンス番号を独立に振る。変更前の一行のソースを1語と見たてて、変更後のソースをメモリーに大量に読みこみをして、文章中から指定語を検索する要領で、探す。スペースに付いてはメモリー上では取り除く等の工夫が良いかもしれない。 見つかれば対比をディスクに書き出し見つかったサイン(f)をセットする。またそのソースを変更前も変更後もメモリーから消し詰めて、最後に変更前に残ったソースが抹消(d)された分、変更後に残った分が追加(a)された分でサイン(d,a)をセットし,ディスクに書き出す。(f=Found,d=Delete,a=Addのつもり) それぞれアウトプットファイルをシーケンス番号でソートし、サイン(f,d,a)とともに印刷する。左右対比表に作るなら見やすいでしょう。 検索アルゴリズムとして色々定石があります。使ったことないですがボイヤー・ムーア法なんていうのもあるようです。調べてみてください。以上荒削りのロジックですが、出来そうな気がしてきました。 頑張ってください。

Ruyama
質問者

お礼

色々とありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

昔の時代(画像が記録しづらかった一昔前)の文字・数字・記号をデータとしている時代は、(特に文系ビジネスデータには)そのデータレコードには、キー(データの主体、何についてデータを採ったか)がありました。そしてフィールドが位置固定されていることが多かった。その場合は2つのファイル(File1が先に出来たファイル)をキーでソートして比較し、File1=File2の時内容を比較。全く同じ時以外は変更があり。File1<File2の時削除あり。File1>File2の時は追加されたと判別しました。時刻ぐらいしか手がかりのない画像データ・ビット列ならビット列のパターンマッチングのロジックが確立しないとトータルに比べて変わったと言うことだけ判っても、それ以上どこで 変わったとか、変更か削除か割り出せないのではと思います。問題にしているファイルはどう言う内容ですか。

Ruyama
質問者

補足

すいません、説明不足でした。 比較対象ファイルは、プログラムソースファイルです。 ちなみに、最初にコメントと空白行を取り除きます。

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

まず最初にそのファイルに改行が何個あるのかを カウントするのがいいと思います。 次に比較ですが、より厳密に比較するためにはBinaryで 読み込んではどうでしょうか? その行が削除されたのか変更されたのかの判定ですが 相当難しいロジックになると思います。 人間からみても、全3行のファイルが2行削除されて 1行追加された場合 どう判定していいのか苦しむと思います。 それは1行削除されて、1行変更が加わったともみることが 可能だからです。

Ruyama
質問者

お礼

私も同意見です。 どうもありがとうございました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

両方のファイルを1行ずつString型の変数に読み込んで、If文で比較じゃだめなんですか?

Ruyama
質問者

補足

すいません、質問が足りませんでした。 追加行数&削除行数&変更行数を抽出したいのです。 比較元ファイルから見て、比較先ファイルに存在しない行は削除行OR変更行です。 色々なパターンで試したんですが、 結局削除と変更の区別がつきませんでした。 これは、コンピュータにはわからない世界ですかね?

関連するQ&A