Das wird mit Mustererkennung und maximalen Abständen gehen.
Eine Zeile wurde eingefügt, wenn das folgende Muster in der anderen Datei wiedererkannt wird. Dabei kann man Zeichen- oder Zeilenweise vorgehen.
Hier mal eine Möglichkeit, das zeilenweise zu machen.
Die Algorithmen versuchen jeweils, durch fiktive Einfüge- und Löschoperationen D1 und D2 grob zu synchronisieren. Es spielt zunächst auch keine Rolle, ob die 'synchronen' Zeilen identisch sind, es reicht, wenn sie ähnlich sind (Levenshtein).
Der Algorithmus versucht, bei Ungleichkeit zweier Zeilen
den Folgetext in der jeweils anderen Datei an einer späteren Stelle wiederzufinden.
Im Beispiel ist es so:
In Datei 2 wurde 'Neue Zeile eingefügt' sowie 'Zeile 4' und 'Zeile 5' gelöscht, eben weil 'Neue Zeile...' in D1 nicht, aber 'Zeile 6' (kommt nach der Z4 und Z5) in D2 sehr wohl.
Nun kann man die beiden dateien schon etwas besser vergleichen
Code:
Datei 1: Datei 2:
Zeile 1 Zeile 1
----- Neue Zeile eingefügt
Zeile 2 Zeile 2
Zeile 3 Zeilee 3
Zeile 4 ---
Zeile 5 ---
Zeile 6 Zeile 6
Die 3.Zeilen sind zwar nicht identisch, aber ähnlich. Der o.g. Algorithmus auf Zeichen statt Zeilen angewandt zeigt, das das 'e' eingefügt wurde.
Es ist doch völlig wurscht, ob D2 durch die o.g. Operationen (Einfügen, Löschen, Ändern) oder durch ein völliges Neuschreiben entstanden sind. Es sollen die UNTERSCHIEDE gezeigt werden, und nicht, was der Bearbeiter vielleicht alles eingetippt hat.