Merge Algorithmen gesucht

port29

deus.Server
Hallo,

ich suche gerade einen Merge Algorithmus, kann mir von euch da jemand helfen? Der Algorithmus soll quasi sowas machen, wie CSV auch.

Ich habe zwei Textdateien, beide stammen ursprünglich aus einer Datei. Und nun sollen aus diesen beiden Dateien eine Datei werden. Was benutzt man da am besten für einen Algo?
 
Um den kleinst möglichen Unterschied zweier Texte zu erhalten, kannst du z. B. den Levenshtein nehmen => http://de.wikipedia.org/wiki/Levenshtein-Distanz . Speziell für dein Vorhaben gibts aber bestimmt bessere Algoirthmen (von denen ich leider keine Ahnung habe, da noch nie gemacht), aber das ist schon mal ein Anfang.

Die Levenshtein Distanz bringt hier nichts. Ich möchte ja aus zwei Texten (bzw. drei - wenn man den Ausgangstext mitzählt) einen machen.
 
Hallo,

wenn es innerhalb der Zeilen keine Unterschiede gibt und "nur" zwischendurch die ein oder andere Zeile fehlt gibts u.a. folgende Möglichkeit.

Sorge dafür das beide Zeilen sortiert sind. Anschließend läufst du mit zwei Zeigern über die beiden Textdateien drüber welche auf die jeweils aktuellen Zeilen zeigen. Solange die Zeilen gleich sind kannst du einfach eine davon in eine neue dritte (Ziel) Textdatei raus schreiben. Wenn die aktuelle Zeile der linken Seite "größer" ist als die aktuelle Zeile auf der rechte Seite heißt das, dass
auf der rechten Seite noch Zeilen sind, die (von der Sortierung her) noch vor die aktuelle Zeile auf der linken Seite gehören. Also schreibt man nun so lange Zeilen von der rechten Seite in die Zieldatei bis die Bedingung: aktuelle Zeile auf der rechten Seite <= aktuelle Zeile auf der linken Seite nicht mehr gilt. Dabei bleibt der Zeiger auf der linken Seite stehen, wir laufen nur auf der rechten Seite weiter.

Wenn nun die aktuelle Zeile auf der rechten Seite "größer" ist als auf der linken wiederholt sich das obige mit vertauschten seiten (also diesmal von Links in die Zieldatei statt von rechts).
Bis keine Zeilen mehr da sind.

Gruß Tom
 
Achso, du willst die Dateien praktisch ineinander mergen ... Sorry, dann hab ich dich falsch verstanden. Dachte du willst etwas synchronisieren.
 
Hallo Thomas,

danke für deinen Lösungsansatz. Eine ähnliche Idee hatte ich auch. Doch leider gibt es noch ein paar Kleinigkeiten, wieso das Verfahren nicht funktionieren wird.

Das erste Problem taucht beim Einfügen einer Zeile am Anfang der Datei auf.
Und wenn ich Zeilen lösche, dann scheitert das Verfahren auch.

Das Problem ist eben, dass die Original Version nicht berücksichtigt wird.

Soweit ich weiß, wird bei SVN / CSV und co. zuerst ein diff zwischen der Original Version und der aktuellen erstellt und aus den beiden diffs und dem Original wird dann eine Merge Datei erstellt. Doch momentan fällt mir nicht ein, wie ich so etwas implementieren könnte.
 
Zurück