Diff-Werkzeug, das Fließkommaformate (aber keine Werte) im Text ignoriert?

8

Ich suche nach einem diff Tool, das auch Fließkommawerte (innerhalb einer Toleranz) in Textdateien vergleichen kann. Dies ist zusätzlich zu typischen Textvergleichs-Diff-Funktionen, mit Optionen zum Ignorieren von Leerzeichen, Ignorieren von Groß- und Kleinschreibung usw. Eine GUI (oder Vollbildschirm-Konsolen-Benutzeroberfläche) ist in Ordnung, aber ich würde eine Stream-orientierte (stdin / stdout) bevorzugen ) Werkzeug.

Hier ist ein extrem einfaches Beispiel, das das ideale Werkzeug charakterisiert. Es gibt 2 Versionen von foo.c:

foo_v1.c:

%Vor%

foo_v2.c:

%Vor%

Und hier ist die diff-Ausgabe, die ich erwarten würde:

%Vor%

Der zweite Unterschied (Zeile 8) ist der übliche Textunterschied; Das erste diff (Zeile 6) ist darauf zurückzuführen, dass die Zahlen außerhalb der angegebenen Toleranz liegen. (Der Exponent sollte 16, nicht 18, also ist es um 100.0X).

Beachten Sie, dass keine der anderen Gleitkommaänderungen als Diffs angezeigt werden. Obwohl sie Textänderungen sind, ändern sich die Gleitkommawerte nicht über die angegebene Toleranz hinaus.

Gibt es ein Diff-Tool, das das kann?

Wenn nicht, gibt es etwas in der Nähe, das ist Open-Source?

    
system PAUSE 15.09.2009, 16:21
quelle

4 Antworten

5

Da ist dieser, der sehr interessant aussieht. Ich versuche, es an meinem AIX zu betreiben, also habe ich es noch nicht in Aktion gesehen, aber ich glaube, das ist es, was du (und ich :-)

brauchst

Ссылка

    
Davide 28.09.2009, 20:08
quelle
7

Der, den ich kürzlich gefunden habe:

Ссылка

Es ist sehr intuitiv.

    
mfolusiak 27.02.2014 16:54
quelle
1

Siehe Smart-Differenzierer-Tools . Diese Tools vergleichen zwei Quellcodedateien entsprechend der Programmstruktur im Gegensatz zum Vergleichen von Textzeilen. Um dies zu tun, analysieren diese Tools die Quelldatei gemäß den Sprachregeln, erstellen einen AST und vergleichen Bäume. Die Ausgabe bezieht sich auf abstrakte Bearbeitungsänderungen (Einfügen, Löschen, Verschieben, Kopieren, Umbenennen) in Programmstrukturen (Bezeichner, Ausdrücke, Anweisungen, Blöcke, Methoden, ...).

Als Nebeneffekt werden die einzelnen Sprachlexeme, wie Zeichen-, Zeichenfolgen- und numerische Literale, in eine normale Form interner Repräsentation umgewandelt. Das Format von Literal wird ignoriert, daher behandelt es Fließkommawerte wie 00.001 und 1e-03 als identisch, 0xFF und 255 als identisch und "\ n" und "\ u000a" als identisch. Dies beinhaltet keine Toleranzfuzz für Fließkommazahlen, aber es ignoriert ihre Form. Das bedeutet, dass die SmartDifference-Tools zwei entsprechende, aber leicht unterschiedliche Nummern als unterschiedlich melden, aber nur die Zahlen selbst melden; Du wirst etwas wie

bekommen %Vor%

Der Matcher erlaubt derzeit die Unterscheidung von Bezeichnern und behandelt eine konsistente Bezeichnerumbenennung innerhalb eines Bereichs als einzelne Bearbeitung, statt als eine Reihe verschiedener Bearbeitungen. Die Idee, Fließkomma-Fuzz zu verwenden, um das Anpassen von Beinahe-Fp-Nummern zu ermöglichen, ist interessant; Ich füge es zur Liste der möglichen Funktionsanforderungen hinzu.

Diese Werkzeuge sind Produktion für Java, COBOL und C #. Wir haben Vorserienversionen für C ++ und C; Das Problem besteht darin, Programmstrukturen für Sprachen aufzugreifen, die eine beliebige Bearbeitung der Quelle durch Makros und Präprozessor-Bedingungen ermöglichen.

    
Ira Baxter 02.10.2009 21:23
quelle
0

Ich bin mir eines solchen Tools nicht bewusst, aber es wäre ziemlich einfach, ein Perl-Skript zu erstellen, das das für Sie erledigt, indem Sie einige reguläre Ausdrücke für Fließkommazahlen mit einer Reihe von Routinen kombinieren, um die regulären Gleitkommazahlen zu normalisieren. Ich kann wahrscheinlich einen Schlag darauf machen, wenn du Hilfe brauchst, aber es ist ein zeitraubendes Unternehmen, also werde ich ein gieriges Schwein sein und nach einer nützlichen Beute fragen.

    
DVK 15.09.2009 22:25
quelle

Tags und Links