ファイル比較

KDE diffツールKompare

コンピューティングにおいて、ファイル比較とは、通常はソース コードなどのテキスト ファイルなどのデータ オブジェクト間の相違点と類似点を計算して表示することです。

これらのメソッド、実装、および結果は、通常、Unixユーティリティにちなんでdiff [ 1 ]呼ばます出力はグラフィカルユーザーインターフェースで表示されるほか、ネットワークファイルシステムリビジョン管理などの大規模なタスクの一部として使用されることもあります。 diff

広く使用されているファイル比較プログラムとしては、diffcmpFileMergeWinMergeBeyond CompareFile Compareなどがあります。

多くのテキスト エディターワード プロセッサは、ファイルまたはドキュメントの変更点を強調表示するためにファイルの比較を実行します。

メソッドの種類

ほとんどのファイル比較ツールは、 2つのファイル間の最長共通部分列を検出します。最長共通部分列に含まれないデータは、変更、挿入、または削除として表示されます。

1978年、ポール・ヘッケルは、最も移動の多いテキストブロックを識別するアルゴリズムを発表しました。[ 2 ]これはIBM History Flowツールで使用されています。[ 3 ]他のファイル比較プログラムはブロックの移動を検出します。

いくつかの特殊なファイル比較ツールは、 2つのファイル間の最長の増加部分列を見つけます。[ 4 ] rsyncプロトコルはローリングハッシュ関数を使用して、通信オーバーヘッドを低く抑えながら、離れた2台のコンピュータ上の2つのファイルを比較します。

ワードプロセッサにおけるファイル比較は通常、ワードレベルで行われますが、ほとんどのプログラミングツールにおける比較は行レベルで行われます。バイトレベルまたは文字レベルの比較は、一部の特殊なアプリケーションで役立ちます。

画面

ファイル比較の表示方法は様々ですが、主な方法は2つのファイルを並べて表示するか、1つのファイルのみを表示し、一方のファイルからもう一方のファイルへの変更点をマークアップで示す方法です。どちらの場合も、特に並べて表示する場合は、コード折りたたみテキスト折りたたみを使用して、ファイルの変更されていない部分を非表示にし、変更された部分のみを表示することができます。

推論

比較ツールは様々な理由で使用されます。バイナリファイルを比較したい場合は、バイトレベルが最適でしょう。しかし、テキストファイルコンピュータプログラムを比較したい場合は、通常、横並びの視覚的な比較が最適です。[ 5 ]これにより、ユーザーはどちらのファイルを保持するか、すべての差異を含む1つのファイルを作成するためにファイルを結合するか、[ 6 ]あるいは、何らかの「バージョン管理」機能を使用して、両方のファイルをそのまま保存して後で参照できるようにするかを選択できます。

ファイル比較は、ファイル同期バックアップにおいて重要かつ不可欠な要素です。バックアップ手法において、データ破損の問題は重要な問題です。破損は予告なく、またユーザーが気付かないうちに発生し、少なくとも通常は、失われた部分を回復するには手遅れになるまで発生します。通常、ファイルが破損しているかどうかを確実に知る唯一の方法は、次にそのファイルを使用するか開いたときです。それができない場合は、比較ツールを使用して、少なくとも差異が発生したことを認識する必要があります。したがって、ファイル同期またはバックアッププログラムが実際に有用で信頼できるものであるためには、ファイル比較機能が組み込まれている必要があります。[ 7 ]

歴史的な用途

ファイル比較が登場する以前には、磁気テープやパンチカードを比較する機械が存在していました。IBM 519カード再生装置は、パンチカードの組が同一かどうかを判定することができました。1957年、ジョン・ヴァン・ガードナーは、IBM 704上でコンパイル時の問題をデバッグするために、ロードされたFortranプログラムのセクションのチェックサムを比較するシステムを開発しました。[ 8 ]

参照

参考文献

  1. ^ "diff"、The Jargon File
  2. ^ Heckel, Paul (1978)、「ファイル間の差異を分離するための手法」(PDF)Communications of the ACM21(4):264– 268、doi10.1145/359460.359467S2CID  207683976 、 2011年12月4日取得
  3. ^ Viégas, Fernanda B.; Wattenberg, Martin; Kushal, Kushal Dave (2004), Studying Cooperation and Conflict between Authors with history flow Visualizations (PDF) , vol. 6, Vienna: CHI, pp.  575– 582 , 2011年12月1日閲覧
  4. ^ Liwei Ren、Jinsheng Gu、Luosheng Peng (2006年4月18日). 「ソフトウェアバイナリファイルのブロックレベルコードアライメントアルゴリズム」 . Google Patents . USPTO . 2019年5月10日閲覧
  5. ^マッケンジー、デイビッド、エガート、リチャード・ストールマン (2003). Gnu DiffとPatchによるファイルの比較とマージ. ネットワーク理論. ISBN 978-0-9541617-5-0
  6. ^ 「ファイル比較ソフトウェア:vc-dwimとvc-chlog」 . www.gnu.org . 2023年4月16日閲覧
  7. ^ 「SystemRescue - System Rescueホームページ」www.system-rescue.org . 2023年4月16日閲覧
  8. ^ John Van Gardner. 「FortranとInterceptプロジェクトの起源」(PDF) . 2011年12月6日閲覧