Import von Textdatei

Ich habe ca. 1000 MP3s vorliegen, deren comment-tag ich Infos aus einer Textdatei hinzufügen möchte.
Mit dem Thema Textdatei habe ich mich bisher noch nicht näher beschäftigt und ich frage mich, ob es eine Möglichkeit gibt manuelles C&P in dem Fall zu vermeiden.

Es handelt sich also um eine große Textdatei, die Infos für die Kommentarfelder von über 1000 MP3s emthält.

Wie ist diese Textdatei aufgebaut, in Spalten, Zeilen, Blöcken?
Auf jeden Fall passt es, wenn in der Textdatei je Info eine eindeutige Verbindung zur Zieldatei vorhanden ist, am besten der Dateipfad.

DD.20151216.1214.CET

Die Textdatei ist in Zeilen und Absätzen aufgebaut.
Es handelt sich um eine (1) Textdatei, in der über 1000 Musikstücke mit diversen Angaben gelistet sind. Die Reihenfolge der Textabschnitte, die einem Musikstück (MP3) zuzuordnen sind, entspricht der Tracknummern-Reihenfolge der MP3s, lässt sich in MP3Tag also entsprechend sortieren.

In den jeweiligen Textabschnitten befindet sich eine unterschiedliche Anzahl von LF/CR (0A 0D).
Beim Wechsel zum nächsten Textabschnitt, d.h. also auch zum nächsten Musikstück, liegt ein in allen Fällen gleichbleibender Textstring vor, der eigentlich nicht übernommen werden soll und als Trennung dienen könnte.

Klar scheint zu sein, dass man selbst etwas zusammenbauen muss, weil die Mp3tag Aktionen "Tag-Felder importieren" oder "Text-Datei importieren" nicht direkt angewendet werden können.
Wie stellst du zurzeit die logische Zuordnung her zwischen Textabschnitt und MP3-Datei?
Sind die Textabschnitte durchnummeriert wie die Mediendateien?
Zeige 'mal eine Beispielfolge von zwei oder drei Textabschnitten.

DD.20151216.1758.CET

Die ergibt sich im Moment nur durch die Reihenfolge, der 1. Textabschnitt entspricht Tracknummer1, der 2. Tracknummer 2 usw.

Nein. Die Textabschnitte enthalten u.a. zwar auch Titel und Artist passend zu den MP3s, jedoch sind sie nicht buchstabengemäß 100 % identisch. Man kann ja beispielsweise mal einen Titel "St. James Infirmary" nennen oder auch "St. James Infirmary Blues". Das differiert dann halt manchmal zwischen Textdatei und Tag etwas.

Hmm, das scheint kompliziert zu werden.
Nochmal nachgefragt, wie stellst du zurzeit die logische Verbindung her zwischen der 678. Datei und dem 678. Textabschnitt?

Hierfür könnte man vielleicht einen Regulären Ausdruck einsetzen, der diese Ungenauigkeiten übersieht.
Aber letztlich kommt es ja darauf an, aus der Liste der Textabschnitte genau den Textabschnitt zu erkennen, der zur gerade ausgewählten Datei passt, und dafür wird eine fehlerfreie 1:1 Relation benötigt.

Die derzeit vorhandenen Trennzeilen sind sozusagen die Fusszeilen zu dem Textblock davor?

Ein Regulärer Ausdruck, dem man die laufende Tracknummer aus der Menge der 1000 Tracks als einen Parameter übergeben kann, könnte funktionieren, so dass man jeden Textabschnitt individuell aus der Textdatei auslesen kann.

DD.20151216.1925.CET

Beispiel:

  1. Alle betreffenden Mediendateien müssen ein Tagfeld haben mit einem Zähler, ...
    in derselben Reihenfolge wie die Position der zur jeweiligen Datei passenden Beschreibungsdaten in der Textbasisdatei; man kann dazu die Tracknummer nehmen, hier also das Tagfeld TRACK.

  2. In allen betreffenden Mediendateien ein Tagfeld anlegen ...
    Aktion: Text-Datei importieren
    Feld: TEXTBASE
    Dateiname:
    Das Tagfeld TEXTBASE enthält nun den gesamten Inhalt aus der Textdatei.

  3. Aus dem Inhalt von TEXTBASE muss der zur Datei passende Textbereich erkannt werden und der überflüssige Text gelöscht werden.
    Aktion: Tag-Tag
    Feld: COMMENT
    Formatstring: $regexp(%TEXTBASE%,'(?:.+?Trennzeile[\r\n]+){'$sub(%TRACK%,1)'}(.+?)[\r\n]+Trennzeile.*','$1')

Achtung: Zur Verwendung mit der eigenen Textbasisdatei muss der Formatstring entsprechend angepasst werden.

  1. Tagfeld TEXTBASE löschen ... und fertig.

Beispieldateien:
20151216.Test.rar (3.47 KB)

DD.20151216.2045.CET

20151216.Test.rar (3.47 KB)

Vielen Dank für Dein Mitdenken und Deine Mühe, Detlev.

Ursprünglich hatte ich in die Richtung gedacht, dass Mp3Tag vielleicht eine Möglichkeit bieten würde, die Textabschnitte sequentiell unter Angabe eines Trennkriteriums in ein Tagfeld einzulesen.
Das vorhandene mögliche Trennkriterium zum nächsten Textabschnitt ist ein jeweils gleicher vorhandener Textstring, den ich zur Vereinfachung auch leicht durch "Suchen und Ersetzen" anpassen könnte, also quasi eine Art Seitenwechsel einbauen und auswerten.
MP3Tag bietet aber mit seinen Importmöglichkeiten offenbar so etwas nicht.

Ich habe heute einen anderen Ansatz überlegt und schon erfolgreich getestet.

  1. Ich splitte die große Textdatei mit Angaben für alle Songs automatisch in einzelne Dateien pro Song und lasse die Splitfunktion dabei die gesplitteten Files im Dateinamen durchnummerieren.

  2. Dann kommt eine Aktion
    Typ: Text-Datei importieren
    Feld: COMMENT
    Dateiname: %track%.txt

Das scheint mir letztlich die einfachste Möglichkeit zu sein.

BTW, wie groß darf eigentlich so ein Tagfeld werden? Gibt es da irgendwelche Beschränkungen?

Diese Frage hatte sich mir auch schon gestellt, nun soeben geprüft, es sieht so aus, dass Mp3tag 29.998 Zeichen in einem Tagfeld speichern und im Bearbeitungsfeld anzeigen kann.

Wie hast du das gemacht?

DD.20151217.1324.CET

Normalerweise benutze ich fürs Editieren und Manipulieren von Textdateien seit Jahren Notepad++.
Es würde mich auch nicht wundern, wenn dieses recht mächtige und durch Plugins erweiterbare Programm diese Aufgabe auch lösen könnte. Da ich aber auf die Schnelle nicht so recht fündig wurde, habe ich kurzerhand zu einem Spezialisten gegriffen:
http://www.gdgsoft.com/gsplit/
Mit dem Programm kann man im Abschnitt "Pieces" u.a. trennende Zeichen(ketten) und auch eine Durchnummerierung der Dateinamen definieren.

Danke für die Info, das sieht sehr brauchbar aus.

DD.20151217.1423.CET

Hallo,
hättest du mal einen Auszug der Originaltextdatei. Ich muss solche Sachen öfters machen, und mein Freund ist dabei gvim. Damit erkenne ich Muster und manipuliere Textdateien.
In deinem Fall würde ich eine Textdatei mit einem Datensatz pro Zeile erstellen und diese dann importieren (csv).
Ein Originalauszug ist dabei wichtig um Muster in Zeilenumbrüchen etc. zu erkennen.

Danke,
WundC

Diese Vorgehensweise ist sicherlich auch eine Möglichkeit, wobei anzumerken ist, dass man dafür eben auch einen Umweg nehmen muss über eine anderes Werkzeug.
Außerdem muss man zunächst klären wie lang eine CSV-Importzeile sein darf, so dass Mp3tag sie noch vollständig erkennen kann, ... also welchen maximalen Umfang in Textzeichen ein Textblock in der Textbasisdatei haben darf.
Nach dem Import kommt dann vielleicht noch hinzu der Arbeitsschritt für das Umformatieren der importierten CSV-Zeile in das ursprüngliche textuelle Layout wie es in der Textbasisdatei vorliegt.

DD.20151217.1931.CET