Mit so einem TextDiff wirst du nicht wirklich weiter kommen.
Zunächst musst du festlegen woran du erkennst, dass eine Zeile die gleiche Bedeutung hat wie eine andere Zeile (Identität). Daran kannst du dann feststellen, welche Zeilen fehlen (gelöscht) oder neu sind (hinzugefügt).
Erstelle dir eine Klasse, die den Inhalt einer Zeile aufnimmt und die Identitätsgleichheit prüfen kann
Delphi-Quellcode:
TDataItem = class
private
FData : string;
function GetIdentity : string;
public
constructor Create( const Data : string );
property Data : string read FData;
function SameIdentityAs( Other : TDataItem ) : Boolean;
function Equals( Obj : TObject ) : Boolean; {ab Delphi ?} override;
function ToString : string; {ab Delphi ?} override;
end;
function TDataItem.Equals( Obj : TObject ) : Boolean;
begin
if Self = Obj then Exit( true );
if ( Obj = nil ) or ( Self.ClassType <> Obj.ClassType ) then Exit( False );
Result := SameIdentityAs( Obj as TDataItem );
end;
function TDataItem.SameIdentityAs( Other : TDataItem );
begin
Result := Assigned( Other ) and ( Self.GetIdentity = Other.GetIdentity );
end;
function TDataItem.GetIdentity : string;
begin
Result := {Identitätsteil aus FData zurückgeben}
end;
function TDataItem.ToString : string;
begin
Result := FDataStr;
end;
Jetzt erzeugst du dir eine Instanz von
TObjectList
und liest alle Zeilen aus der ersten Datei ein, machst aus jeder Zeile so ein
TDataItem
und ab in die Liste.
Eine weitere Instanz von einer
TObjectList
erzeugen und nun von der anderen Datei für jede Zeile eine
TDataItem
Instanz erstellen.
Diese Instanz prüft man nun gegen die Einträge der ersten Liste.
Findet man einen Identitätsgleichen Eintrag (mit der
Equals
Methode), dann den Eintrag aus der ersten Liste herausnehmen. Ein Vergleich mit der Data-Eigenschaft zeigt ob der Eintrag geändert wurde oder unverändert ist. Den aktuellen Wert an die zweite Liste hängen.
Findet man keinen Eintrag in der ersten Liste, dann ist der Eintrag neu und auch an die zweite Liste hängen.
Sind alle Zeilen der Datei bearbeitet, dann finden sich in der ersten Liste alle Einträge, die gelöscht wurden