Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Genauer Zeilenvergleich zweier Textdateien - wie ? (https://www.delphipraxis.net/107560-genauer-zeilenvergleich-zweier-textdateien-wie.html)

tomsson74 29. Jan 2008 19:49


Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Hallo,

ich suche einen schnellen Algorithmus (falls es überhaupt einen gibt) mit dem man Unterschiede in zwei Dateien farblich markieren kann - im Prinzip ein FileCompare für Textdateien.

Habe schon die Suche hier bemüht, bin aber nicht wirklich erfolgreich gewesen.

Zur Veranschaulichung meines Anliegens ein kleines Beispiel. Ich gehe von 2 Dateien aus. Beide sind am Anfang identisch - Datei 2 ist eine Kopie von Datei 1.

Code:
Datei 1:     Datei 2:

Zeile 1       Zeile 1
Zeile 2       Zeile 2
Zeile 3       Zeile 3
Zeile 4       Zeile 4
Zeile 5       Zeile 5
Zeile 6       Zeile 6
Nun werden an der Datei 2 folgende Änderungen vorgenommen:

1. Hinter "Zeile 1" wurde eine neue Zeile hinzugefügt
2. "Zeile 3" wurde in "Zeilee 3" geändert
3. Zeilen 4 und 5 wurden gelöscht

Das Ergebnis sieht dann so aus

Code:
Datei 1:     Datei 2:

Zeile 1       Zeile 1
Zeile 2       Neue Zeile eingefügt
Zeile 3       Zeile 2
Zeile 4       Zeilee 3
Zeile 5       Zeile 6
Zeile 6
Jetzt möchte ich diese beiden Dateien miteinander vergleichen um zu sehen was ich in der Datei 2 gegenüber der Datei 1 verändert hat. Was ich nun als Ergebnis bräuchte wäre in etwas sowas:

Code:
Datei 1:     Datei 2:

Zeile 1       Zeile 1
              Neue Zeile eingefügt (in grün - steht für "neu hinzugekommen")
Zeile 2       Zeile 2
Zeile 3       Zeilee 3 (in blau - steht für "modifiziert")
Zeile 4       Zeile 4  (in rot - steht für "gelöscht")
Zeile 5       Zeile 5  (in rot - steht für "gelöscht")
Zeile 6       Zeile 6
Hat jemand evtl. sowas schon gemacht und kann mir ein paar Tipps geben ?

Grüße
Thomas

omata 29. Jan 2008 20:30

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Schau doch mal hier.

Aber vermutlich willst du das selber programmieren, dann sorry für meine Antwort.

Edit: Das kommt dir vermutlich besser entgegen.

Gruss
Thorsten

Flocke 29. Jan 2008 22:41

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Ich hab' mal eine Diff-Unit zu einem Thread von Sharky geschrieben, den Sourcecode findest du auf meiner Seite (mit "Zurück zur Übersicht" auch einen ZIP-Download mit einem Testprogramm).

grenzgaenger 29. Jan 2008 23:36

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
sorry, mal eine unbedeutende frage, wie willst du wissen ob eine zeile eingefügt wurde oder ob die selbe zeile neu geschrieben wurde? hier kannst du nur mit wahrscheinlichkeiten mit einem blick in die kristallkugel hantieren. sicher kannst du das nie sagen. du kannst höchstens versuchen voraus- und zurückschauend zu analysieren und dann über bestimmete wahrscheinlichkeiten ausagen treffen... aber das ist nix halbes und nix ganzes ... als einfaches hilfsmittel könnte das noch genügen... aber zuverlässig ist das nicht...

... für was brauchste das?

omata 29. Jan 2008 23:49

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Kennst du solche Tools nicht?
Mein angegebener Link auf KDiff3 ist, wie ich finde, ein sehr schönes Beispiel. Das Tool einfach nur genial.

Und das hat rein gar nichts mit Wahrscheinlichkeiten zu tun...

tomsson74 30. Jan 2008 08:29

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Hallo,

danke für die bisherigen Antworten - das hilft mir schon weiter. Ich werde mir die Beschreibungen zu Gemüte ziehen. Das ist zwar schwere Kost aber ich möchte das auch verstehen und nicht nur anwenden :D

Zitat:

Zitat von grenzgaenger
sorry, mal eine unbedeutende frage, wie willst du wissen ob eine zeile eingefügt wurde oder ob die selbe zeile neu geschrieben wurde? hier kannst du nur mit wahrscheinlichkeiten mit einem blick in die kristallkugel hantieren.

Das hat nichts mit Wahrscheinlichkeiten zu tun, diese Tools funktionieren wirklich - und das sehr zuverlässig :)

Grüße
Thomas

OregonGhost 30. Jan 2008 09:28

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Zitat:

Zitat von tomsson74
Zitat:

Zitat von grenzgaenger
sorry, mal eine unbedeutende frage, wie willst du wissen ob eine zeile eingefügt wurde oder ob die selbe zeile neu geschrieben wurde? hier kannst du nur mit wahrscheinlichkeiten mit einem blick in die kristallkugel hantieren.

Das hat nichts mit Wahrscheinlichkeiten zu tun, diese Tools funktionieren wirklich - und das sehr zuverlässig :)

Das ist nicht ganz richtig, ein Tool kann nicht wissen, ob eine Zeile eingefügt oder neu geschrieben wurde. Aber die Frage an sich ist schon falsch. Es macht keinen Unterschied, ob eine Zeile neu geschrieben oder eingefügt wurde. Sie war vorher nicht da und jetzt ist sie da.
Hach, wie schön, wenn man den Tag mit etwas Haarspalterei beginnen kann.

Jedenfalls wollte ich nochmal Kompare und das Diff-Tool von TortoiseSVN in den Raum werfen. Ersteres ist definitiv eins der hübschesten, beide sind im Quellcode erhältlich und das zweite ist für Windows. Ich halte es zwar nur für begrenzt sinnvoll, sich ein neues Tool dafür zu bauen, wenn es schon genug gibt, aber diese zwei sind sicherlich ein guter Anlaufpunkt, um sich die Algorithmen mal näher anzuschauen. Kompare markiert auch einzelne Änderungen innerhalb einer Zeile, so dass man die Änderung leichter findet.

Und zur Frage, wozu man so etwas braucht - für professionelle Quellcode-Versionsverwaltung sind solche Tools absolut unverzichtbar.

taaktaak 30. Jan 2008 10:33

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Moin, Moin.
Um die Haarspalterei weiter zu führen: Es ist ja nicht nur die Frage, ob eine Zeile in der einen Datei neu eingefügt oder eine bestehende Zeile verändert wurde. Es kann ja auch in der "anderen" Datei eine Zeile gelöscht worden sein, dann wurde in der betrachteten Datei weder etwas eingefügt, noch verändert. Trotzdem sind die Dateien dann unterschiedlich. Um diese Veränderung korrekt zu verfolgen - und zu benennen - müsste m.E. eine Historie der Vergleiche gespeichert werden.
Gruß Ralph

OregonGhost 30. Jan 2008 10:49

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Wenn in der zweiten Datei eine Zeile gelöscht wurde, wird sie in der ersten Datei als gelöscht markiert. Dazu braucht man noch keine Historie.

taaktaak 30. Jan 2008 10:53

Re: Genauer Zeilenvergleich zweier Textdateien - wie ?
 
Ähhh, habe ich da jetzt was übersehen? Wenn ich mit einem beliebigen Programm in einer beliebigen Datei eine Zeile lösche, wie kann dann in einer zweiten (unbekannten) Datei eine Löschmarkierung gesetzt werden?
Gruß Ralph


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:23 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz