![]() |
AW: File compare
Also nochmal aufgebohrt (aber immer noch nicht getestet^^):
Delphi-Quellcode:
function FilesEqual(const First, Second: TFilename; DiffList: TStrings): Boolean;
var s1, s2: TStringlist; i: integer; begin Assert(Assigned(DiffList)); Result := FileExists(First) and FileExists(Second); if Result then begin DiffList.BeginUpdate; try DiffList.Clear; s1 := TStringlist.Create; try s1.LoadFromFile(First); s2 := TStringlist.Create; try s2.LoadFromFile(Second); i := 0; while (i < s1.Count) and (i < s2.Count) do begin if s1[i] <> s2[i] then DiffList.AddObject(s1[i], TObject(i)); inc(i); end; finally s2.Free; end; finally s1.Free; end; finally DiffList.EndUpdate; end; Result := DiffList.Count = 0; end; end; |
AW: File compare
OK, bin halt eher unskilled, habs jetzt aber, zumindest funktionierts :)
Delphi-Quellcode:
aufruf:
function test(const First, Second: TFilename; out stringL: TStringlist): Boolean;
var s1, s2: TStringlist; i: integer; begin Result := FileExists(First) and FileExists(Second); if Result then begin s1 := TStringlist.Create; try s1.LoadFromFile(First); s2 := TStringlist.Create; try s2.LoadFromFile(Second); i := 0; while (i < s1.Count) and (i < s2.Count) do begin Result := s1[i] = s2[i]; if not Result then begin stringL.Add(s1[i]); //i := s1.Count; end; inc(i); end; finally s2.Free; end; finally s1.Free; end; end; end;
Delphi-Quellcode:
Könnte man hier etwas aussetzen ?
try
sl := TStringlist.Create; test_functions.test('C:\software.txt','C:\software2.txt',sl); Writeln(sl.Text); finally sl.Free; end; LG |
AW: File compare
Zitat:
|
AW: File compare
Da Deine Funktion nach dem ersten bemerkten Unterschied aussteigt, kannst Du auch auf die Stringliste verzichten und gleich einen String als Var-Parameter übergeben. Und ein Objekt als out-Paramter ist nicht das Wahre. Willst Du alle Unterschiede (zumindest die, die innerhalb der minimalen Zeilenanzahl beider Dateien liegen) auflisten, schau Dir einmal meine letzte Version an, die speichert auch die Zeilennummer mit (wenn auch etwas versteckt als TObject).
|
AW: File compare
Als Advocatus Diaboli ein Einwurf zum Nachdenken. Nicht an DeddyH's Lösung, sondern an das, was man erreichen will:
Wenn du 1000 Zeilen hast, in einer Datei aber eine neue Zeile an z.B. Stelle 3 eingefügt wurde, dann sind die Dateien bis auf diese eine Zeile gleich, du bekommst aber 997 Fehler. |
AW: File compare
Daran hatte ich auch schon gedacht, aber wie will man das verhindern?
[edit] Abgesehen davon kann das ja auch richtig sein, je nachdem, was man beabsichtigt. [/edit] |
AW: File compare
Ins unreine gedacht,
für jede Zeile einen Hash-wert erstellen und gleiche Zeilen/Hash-werte aus dem Topf entfernen. Was übrig bleibt ist nicht gleich. Gruß K-H |
AW: File compare
[edit]Bezieht sich auf #36, war zu lahm[/edit]
Kannste nicht verhindern. Man kann jetzt die Fuzzy-Pistole rausholen und Ähnlichkeitsanalysen machen usw. aber wie du schon sagst: Es hängt davon ab, was man damit machen will und vllt. ist es genauso schon beabsichtigt. |
AW: File compare
hm ihr habt recht... Die Idee von mir ist momentan zerstört :)
Der Plan war eigentlich mir alle installierten programme und windows patches auszulesen. Diese speichere ich in ein Textfile. anschließend starte ich das Programm neu und lese mir die programme erneut ein, dann werden die frisch eingelesenen mit dem vorhin abgelegten file verglichen. Sollte sich etwas geändert haben reagiere ich dementsprechend... Das File ändert sich NIE, habe dazu einen Pararmeter eingebaut der die Liste bei bedarf neu erstellt. Wie könnte ich das realisieren? Die Funktion zum auslesen der Programme über die Registry funktioniert eigentlich prima aber die compare geschichte zerbricht mir den Kopf! LG |
AW: File compare
Hallo value is NULL,
wenn's nur um den Abgleich zweier Listen geht, dann gehe doch einfach die zweite Liste durch und prüfe mit Liste1.IndexOf ab, ob der jeweilige Eintrag dort drin ist. Ggfs. das Gleiche andersrum (Liste1 gegen Liste 2), um gelöschte Einträge zu finden. Gruß blauweiss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz