2 Textdateien vergleichen und Änderung in Datei1 auswechslen

  • Hallo Forum,

    das Thema wurde ja schon des öftern erklärt, aber ich habe noch keine Lösung für mein Problem gefunden.

    Ich habe zwei Textdateien:

    Datei1 ist die Orignaldatei:
    1|007 Die Welt ist nicht genug|dvd|ja
    2|007 Feuerball|dvd|ja
    3|007 Goldfinger|dvd|ja
    4|007 Im Geheimdienst Ihrer Majestät|dvd|ja
    5|007 James Bond jagt Dr.No|vhs|ja
    ...
    63|Der kleine Eisbär Teil 1|vhs|ja
    64|Der kleine Eisbär Teil 2|dvd|ja
    ...

    und Datei2:
    1|007 Die Welt ist nicht genug|kopie|ja
    2|007 Feuerball 123|kopie|ja
    3|007 Goldfinger|kopie|ja
    4|007 Im Geheimdienst Ihrer Majestät|kopie|ja
    5|007 James Bond jagt Dr.No|kopie|ja

    Nun soll der Inhalt von Datei2, hier die Änderung, z.B.
    2|007 Feuerball 123|kopie|ja
    in Datei1 ausgewechselt werden.

    Bitte um Hilfe, da ich nicht weiterkomme.
    Danke

  • Da mußt du schon genaue Regeln aufstellen, denn alle Zeilen in Datei 2 enthalten das Wort Kopie anstelle DVD in Datei 1. Warum muß also genau Zeile 2 ausgetauscht werden und nicht alle? Letzeres wäre die einfachste Lösung einfach Datei 2 über Datei 1 kopieren.
    Du siehst also solange du deine Änderungswünsche nicht in exakte Regeln fassen kannst, kann dir auch niemand helfen.

  • Hallo,

    ich habe einen Schreibfehler begangen.

    In Datei2 heissen die Wörter Kopie natürlich auch dvd oder vhs so wie in Datei1.

    Also man kann die Datei2 einfach über Datei1 kopien, wie Du vorgeschlagen hast.
    In meine Fall würde dann aus Datei 2 die Zeilen 1-5 in Datei1 überschrieben werden und der Rest in Datei1 bleibt so.
    Ich glaube jetzt habe ich es richtig erklärt.
    Vielleicht kannst Du mir helfen.

    Gruß

  • Also man kann die Datei2 einfach über Datei1 kopien, wie Du vorgeschlagen hast.

    Überkopieren kannst du schon, du hast dann eine 1:1 Kopie. Das ganze ist mehr als Ironie zu verstehen, denn außer dem Wort Kopie konnte ich keine anderen Abweichungen zwischen 1 und 2 erkennen. Wenn also die 2. Zeile in Datei 1 geschrieben werden soll, warum dann nicht alle? Mittlerweile sehe ich das in der 2. Datei zusätzlich 123 am Ende des Titels steht. Somit wird es möglich, einzelne Zeilen auszutauschen. Wenn aber

    In Datei2 heissen die Wörter Kopie natürlich auch dvd oder vhs so wie in Datei1.

    unterscheidet sich Datei 1 von Datei 2 nach dieser Aktion nur noch im Namen (einmal Datei 1 das andere mal Datei 2), die unterschiedlichen Inhalte in 1 wurden ja mit denen von 2 überschrieben.

  • Hallo,

    in Datei 1 steht erst:

    2|007 Feuerball|dvd|ja
    3|007 Goldfinger|dvd|ja
    4|007 Im Geheimdienst Ihrer Majestät|dvd|ja
    5|007 James Bond jagt Dr.No|vhs|ja
    usw..
    Die Datei hat über 500 Einträge.

    in Datei 2 steht:
    2|007 Feuerball 123|dvd|ja
    3|007 Goldfinger|dvd|ja
    4|007 Im Geheimdienst Ihrer Majestät|dvd|ja
    5|007 James Bond jagt Dr.No|vhs|ja
    mehr aber nicht!

    Hier hat sich tatsächlich nur das Wort Feuerball 123 geändert

    Nun suche ich ein Script, das mir diesen geänderten Wert aus Datei 2 in Datei 1 schreibt/ersetzt und die restlichen Einträge in Datei 1 beibehält.

  • Die Zuordnung gleicher Titel über die Spalte 0 ist gewährleistet?

    Wenn ja, ist es ganz einfach:

    Die neue geänderte Datei befindet heißt Datei1.Neu. Benutzt habe ich Datei1.txt und Datei2.txt. Als Regel habe ich genommen: wenn ein Eintrag in Datei2 Spalte 1 (genannt Titel) sich von dem über Spalte 0 (genannt ID) korrespondierenden Eintrag in Datei1 unterscheidet wird der Titel der 2. Datei genommen. Bedingung für diese Vorgehensweise ist jedoch die 100% Sicherheit gleiche ID bedeutet gleicher Film auf gleichem Medium. Sollen Spalten 2 (Medium) und Spalte 3 (jugendfrei Ja/Nein?) auch übernommen werden mußt du dies noch ergänzen. Die Spaltenbenennung ist willkürlich und passt evtl. bei der letzten Spalte nicht. Da sie aber nur dem Zweck dient über die gleiche Spalte zu reden ist dies aber egal.

    4 Mal editiert, zuletzt von autoBert (18. Mai 2016 um 13:49)

    • Offizieller Beitrag

    @autoBert hatte bereits gefragt, aber du scheinst das geflissentlich zu ignorieren:
    Welches sind die REGELN nach denen die Unterscheidung stattfinden soll?!

    • Wann steht ein Eintrag in beiden Dateien?
    • Welche Bedingung gilt?
    • Welche Änderungen in Datei 2 müssen auf Einträge in Datei 1 angewendet werden?
  • Hallo autoBert und BugFix,

    die Zuordnung gleicher Titel (Nr.) über die 1. Spalte ist gewährleistet.
    Die Filme fangen bei 1 an und hören zur Zeit bei 515 auf in der Hauptdatei Datei 1.

    Vielleicht noch einmal zur Erklärung.

    Ich habe eine Hauptdatei Datei 1 mit 515 Filmen.
    1|007 Die Welt ist nicht genug|dvd|ja
    2|007 Feuerball|dvd|ja
    3|007 Goldfinger|dvd|ja
    ...
    71|Die Feuerzangenbowle|dvd|ja
    113|Harry Potter Teil 4 und der Feuerkelch|dvd|ja
    ...
    514|Ein Mann will nach oben|dvd|
    515|Cars 2|dvd|
    Dateiende

    Dann erstelle ich eine Datei 2 wo sich der Titel von z.B Feuerball in Feuerball 123 geändert hat.
    2|007 Feuerball 123|dvd|ja
    71|Die Feuerzangenbowle|dvd|ja
    113|Harry Potter Teil 4 und der Feuerkelch|dvd|ja
    Dateiende

    Danach soll das Script vergleichen welcher Filmtitel sich geändert hat und dies in Datei 1 überschreiben.
    Also Film 2 wird ausgetauscht.
    Filme 71 und Film 113 nicht, können aber der einfachheitshalber mit überschrieben werden, wenn das programmtechnisch einfacher ist.

    Anschliessend steht dann in Datei 1:
    1|007 Die Welt ist nicht genug|dvd|ja
    2|007 Feuerball 123|dvd|ja
    3|007 Goldfinger|dvd|ja
    ...
    71|Die Feuerzangenbowle|dvd|ja
    113|Harry Potter Teil 4 und der Feuerkelch|dvd|ja
    ...
    514|Ein Mann will nach oben|dvd|
    515|Cars 2|dvd|
    Dateiende

    Datei 2 wird anschliessend wieder glöscht.

    Ich hoffe es jetzt für Euch Profis verständlich.
    Vielen Dank nochmals.

    • Offizieller Beitrag

    Dann erstelle ich eine Datei 2 wo sich der Titel von z.B Feuerball in Feuerball 123 geändert hat.

    Und woher weißt du, dass Feuerball 123 die Änderung von Feuerball ist und kein eigenständiger Titel?
    Deshalb die Frage nach Regeln.
    Regeln müssen abstrakt sein, sie dürfen sich nicht nur an Bsp. erklären lassen, sondern müssen in sich klar sein. Vergleichbar mit RegExp-Pattern.

    • Offizieller Beitrag

    Titel nur einmal vorkommt der Filmname sich über die FilmNr hier 2 genau zuordnen lässt

    Und das sind REGELN. Hättest du das im Startpost geschrieben, hätten wir nicht bis Post 10 gebraucht um nun das Problem betrachten zu können.

    • Offizieller Beitrag

    Die Nummerierung ist in beiden Dateien identisch.
    Also lies beide Dateien jeweils in ein Array (_FileReadToArray).
    Da die Änderungen von Datei_2 auf Datei_1 übertragen werden sollen (ich gehe davon aus, dass die Nummerieung aufsteigend ist)
    Loop mit Array von Datei_2
    - Filmnummer in Array-Datei_2 von aktuellem Eintrag lesen
    - in Array-Datei_1 den Index solange erhöhen, bis dieselbe Filmnummer gefunden ist
    - jetzt den Inhalt des Eintrags von Array-Datei_2 in das Array-Datei_1 am aktuellen Index eintragen
    bis zum Ende Array-Datei_2 wiederholen
    Jetzt Datei_1 zurückschreiben (_FileWriteFromArray)

    Es ist unerheblich, ob und was sich geändert hat - es werden einfach alle Inhalte aus Datei_2 in Datei_1 übertragen, das geht schneller als Vergleichen und erst dann ändern.

  • Hallo autoBert,

    dein Skript habe ich vorhin garnicht gesehen. F5 hilft manchmal :)
    Vielen Dank, funktioniert wunderbar.
    Und noch einmal Dank an alle für die Geduld.
    Kann Euch nur weiterempfehlen, tolles Forum.

    Gruß Ruby