Der Unterschied besteht darin, Leerzeichen tatsächlich völlig zu ignorieren

Der Unterschied besteht darin, Leerzeichen tatsächlich völlig zu ignorieren

Ich suche nach einer Anwendung, die zwei Dateien vergleicht und dabei alle Leerzeichen ignoriert, also zum Beispiel:

class foo { 
  bar
  spaz 
}

ist gleichbedeutend mit

class foo{bar spaz}

oder auch

classfoo { 
  barspaz}

aber nicht

classfoo { 
  spazspaz
}

d. h. es würde mir zeigen, dass spazim vorherigen Beispiel der Platz von barin einem der anderen Beispiele eingenommen wurde. Es müssen nur 2 Dateien verglichen werden.

  • Es kann ein Windows- oder Linux/Unix/Posix-kompatibles Dienstprogramm sein
  • Ich habe den Lin/Unix diff -w-Befehl ausprobiert, er ignoriert Leerzeichen nur, wenn der Unterschiedpro Zeileist Leerzeichen. Ich sehe keine Möglichkeit,totalLeerzeichen ignorieren.
  • Ich habe auch UECompare oder Ultracompare ausprobiert, ein kostenpflichtiges Vergleichsprogramm für Windows.

Antwort1

Suchen Sie nach etwas wie dem trBefehl? Hier sind diemanpages. Soweit ich das beurteilen kann, ist es in msysgit, cygwin, und enthalten.gnuwin32 tools

Sie können alle Leerzeichen vor dem Differenzieren entfernen, indem Sie etwa Folgendes tun:

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

Sie können dann die Ausgabe dieses Befehls weiterleiten diffund ihn ohne Leerzeichen ausführen lassen.

Ich habe beispielsweise eine Datei mit dem Namen HelloWorldApp.java. Ich zeige Ihnen, wie trsie verarbeitet wird:

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.}}

Antwort2

Obwohl linienorientiert, diffkönntedazu gebracht werden, das zu tun, was verlangt wird. Grob gesagt könnten Sie diff -w ausführen und dann die Diff-Ausgabe nachbearbeiten. Es könnte sich die Diff-Ausgabe ansehen und verschiedene Zeilenpaare zusammenfügen, um zu sehen, ob sie (jetzt) ​​mit der Zeile in der anderen Datei übereinstimmen.

Scheint, als wäre es O(n^2) oder etwas anderes Unangenehmes, aber es wäre trotzdem sehr hilfreich, wenn es sich selbst auf (sagen wir) kein Join, Join von 2 Zeilen, Join von 3 Zeilen in Datei 1 X kein Join, Join von 2 Zeilen, Join von 3 Zeilen in Datei 2 in einem gleitenden „Fenster“ der Diff-Ausgabe beschränken würde. (wobei X ~ „Kreuzprodukt“ ist)

Tatsächlich scheint es sich um eine Aufgabe zu handeln, die ein Perl-Diff-Ausgabe-Nachbearbeitungsskript in wenigen Stunden Arbeit erledigen könnte (abhängig von Ihren (Perl-)Programmierkenntnissen).

Vielleicht, wenn ich bei der Arbeit eine Aufgabe habe, die ich eigentlich nicht machen möchte ... :-)

verwandte Informationen