Frage

Wie kann ich eine diff Funktion implementieren, wie Stack-Überlauf Frage Revisionsgeschichte?

War es hilfreich?

Lösung

Sie haben hier einen JavaScript-Beispiel der Implementierung eines diff-Algorithmus.

Basierend auf:

P. Heckel, eine Technik für die Unterschiede zwischen Dateien Isolieren Comm. ACM, 21, (4), 264--268 (1978).

Die Implementierung selbst, hat zwei Funktionen, von denen eine für den Einsatz empfohlen:

diffString( String oldFile, String newFile )

Diese Methode nimmt zwei Strings und berechnet die Unterschiede in den einzelnen. Das Endergebnis ist die ‚newFile‘ markiert mit HTML (um beide Deletionen bedeuten aus der oldfile und Ergänzungen des newFile).

Andere Tipps

würde ich den Code für das FreeBSD Diff finden und dass als Basis verwenden. Es gibt keinen Punkt in neu zu erfinden Rädern, wenn die Lizenz für diese Art des Kopierens erlaubt.

Die meisten Algorithmen basieren auf LCS: längste gemeinsame Teilfolge . Es ist nicht klar, es auf eine effiziente Art und Weise zu implementieren. Sie werden wahrscheinlich verschiedene Implementierungen im Netz, für verschiedene Sprachen finden.

Ich denke, der einzige Weg, um jedes Zeichen bilden die zwei Zeichenfolgen zu vergleichen wäre. So etwas wie folgt aus:


void diff(String first,String second) {
   int biggest = (first.length() > second.length()) ? first.length() : second.length();
   for(int i = 0;i < biggest;i++) {
      //compare each char from the longest string with each char from the shorter
      // do something with them if they're not equal
   }
}

Das ist nur eine Skizze, wie ich es tun würde. Alles hängt davon ab, was Sie wollen mit den Daten zu tun.

Wenn das, was Sie wollen, ist die Versionshistorie, nicht neu erfinden das Rad nicht an diff starten. Werfen Sie einfach alles in der Versionskontrolle und verwendet seine diff und Protokollierungsmöglichkeiten. Für einfache, lineare Geschichte etwas so einfach wie RCS tun wird. Oder Sie können die neueste Kanone auf sie werfen und benutzen git .

Die meisten diff Dienstprogramme tun, um eine Zeile-für-Zeile diff. Stapelüberlauf hat ein Wort-für-Wort diff. Für die so etwas wie wdiff notwendig. Die meisten Versionskontrollsysteme können Sie in der Diff-Stecker. Aus dem Kasten heraus, kommt git diff --color-words bemerkenswert nahe, was hier getan wird. Mit einem wenig Gefummel mit den Einstellungen können Sie wahrscheinlich bekommen sie etwas ausspucken können Sie dann in eine hübsche Webseite machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top