web-dev-qa-db-ja.com

実際に空白を完全に無視する差分

2つのファイルを比較し、実際にはすべての空白を無視するアプリケーションを探しています。たとえば、次のようになります。

class foo { 
  bar
  spaz 
}

と同等に同等です

class foo{bar spaz}

または、同様に

classfoo { 
  barspaz}

だがしかし

classfoo { 
  spazspaz
}

つまり、前の例のspazが他の例のbarの代わりになっていることがわかります。 2つのファイルを比較するだけで済みます。

  • Windowsまたはlinux/unix/posix互換のユーティリティにすることができます
  • Lin/unixを試しましたdiff -wコマンド、違い行ごとが空白の場合にのみ空白を無視します。 完全に空白を無視するオプションが表示されません。
  • また、Windows用の無料ではない比較ユーティリティであるUECompareまたはUltracompareも試しました。
4
A.B. Carroll

trコマンドのようなものをお探しですか?これが manpages です。私の知る限り、msysgitcygwin、およびgnuwin32 toolsに含まれています。

したがって、次のような操作を行うことで、差分をとる前にすべての空白を削除できます。

tr --delete '[:space:]' <filename.txt

次に、そのコマンドの出力をdiffにフィードして、空白なしで機能させることができます。

たとえば、HelloWorldApp.Javaという名前のファイルがあります。 trがどのように処理するかをお見せしましょう。

C:\temp>cat HelloWorldApp.Java
class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}
C:\temp>tr -d '[:space:]' <HelloWorldApp.Java
classHelloWorldApp{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");//Displaythestring.}}
5

行指向であるにもかかわらず、diff could要求されていることを実行するように作成されます。大まかに言って、diff -wを実行してから、diff出力を後処理することができます。 diff出力を調べ、さまざまな行のペアを結合して、それらが(現在)他のファイルの行と一致するかどうかを確認できます。

O(n ^ 2)または他の厄介なもののようですが、それ自体を(たとえば)結合なし、2行の結合、ファイル1の3行の結合X結合なし、結合に制限すると、非常に役立ちます。 2行、diff出力の移動する「ウィンドウ」でファイル2の3行を結合します。 (Xは〜「外積」です)

実際、Perlのdiff出力後処理スクリプトが数時間の作業で実行できる仕事のようです((Perl)プログラミングスキルによって異なります)

たぶん、仕事でやりたくない仕事があるときは... :-)

0
Peter Hackett