Einen Tag auf mehrere andere Tags verteilen


#1

Ich gebe ein Beispiel:
Der Titel-Tag lautet: "Ludwig van Beethoven Symphonie Nr. 3 Es-Dur op. 55 Berliener Philharmoniker 3. Marcia funebre (Adagio assai)".
Hieraus soll werden:

KOMPONIST: "Ludwig van Beethoven", also die ersten drei durch Leerzeichen getrennten Wörter;
WERK (=CONTENTGROUP): "Symphonie Nr. 3 Es-Dur op. 55", also die nächsten sechs durch Leerzeichen getrennten Wörter;
Orchester (=ORCHESTRA): "Berliener Philharmoniker", also die nächsten beiden durch Leerzeichen getrennten Wörter;
schließlich soll als Titel bleiben: "Marcia funebre (Adagio assai)", also "3." weg, dann bleibt der Rest der Zeichenkette stehen.

Ich hoffe, dass das mit mp3tag geht. Aus der Bedienungsanleitung kann ich es nicht erkennen.

Kann mir jemand helfen?

Vielen Dank

lupus_3


#2

Wenn das ein durchgängiges Muster ist mag das gehen.
Aber da der Titel ja keinerlei erkennbare Trennzeichen hat, habe ich den Eindruck, dass es einfacher ist, eher sowas zu machen wie nach allen Titeln zu filtern, die Ludwig van Beethoven enthalten, das dann per Hand im Tag-Panel einzutragen und dann mit "Ersetzen" zu löschen.
Und so ähnlich geht es dann mit den nächsten Begriffen.

Oder du findest ein Muster, wie Trennzeichen oder trennende Wörter - dann kannst du eine Aktion "Tag-Feld importieren" verwenden.
Also wenn der Titel z.B. lauten würde:
Ludwig van Beethoven_Symphonie Nr. 3 Es-Dur op. 55_Berliener Philharmoniker_3. Marcia funebre (Adagio assai)
Dann würde der Import-String lauten:
%composer%%contentgroup%%artist%_%title%

Solche Aktionen lohnen aber eigentlich nur, wenn es wirklich viele Dateien mit so einem Muster gibt.
Das Abtentern einzelner Wörter ist fehleranfällig.


#3

Weil die gegebene lange Zeichenkette eine eindeutige Struktur nicht aufweist, so wird es so ohne weiteres nicht möglich sein, die von Mp3tag angebotenen automatischen Werkzeuge zu benutzen.

In einem solchen Fall sollte man eine externe Datenquelle ausfindig machen und mit copy&paste die passenden Texte übertragen.

https://www.discogs.com/de/Ludwig-van-Beeth...release/6448628

DD.20170428.1650.CEST


#4

Wenn man eine Möglichkeit hätte, ds n-te Leerzeichen einer Zeichenreihe zu finden, wäre man wohl einen entscheidenden Schritt weiter.


#5

Das erste Leerzeichen von links:
$strchr(%TITLE%,' ') ... oder ... $strstr(%TITLE%,' ')

DD.20170428.1907.CEST

So kompliziert geht es auch:

TITLE <== 'Ludwig van Beethoven Symphonie Nr. 3 Es-Dur op. 55 Berliner Philharmoniker 3. Marcia funebre (Adagio assai)'

TEMP <== $regexp(%TITLE%,'^((?:.+?\s){3})((?:.+?\s){6})((?:.+?\s){2})((?:.+?\s){3}.*)$','$1=$2=$3=$4=')
TEMP <== $regexp(%TEMP%,'\s=','=')

TEMP ==> "Ludwig van Beethoven=Symphonie Nr. 3 Es-Dur op. 55=Berliner Philharmoniker=3. Marcia funebre (Adagio assai)="

KOMPONIST <== $regexp(%TEMP%,'^(?:(.+?)=){1}.$','$1')
WERK <== $regexp(%TEMP%,'^(?:(.+?)=){2}.
$','$1')
ORCHESTER <== $regexp(%TEMP%,'^(?:(.+?)=){3}.$','$1')
TITEL <== $regexp(%TEMP%,'^(?:(.+?)=){4}.
$','$1')
TEMP <== $char(0)

KOMPONIST ==> "Ludwig van Beethoven"
WERK ==> "Symphonie Nr. 3 Es-Dur op. 55"
ORCHESTER ==> "Berliner Philharmoniker"
TITEL ==> "3. Marcia funebre (Adagio assai)"

DD.20170428.2025.CEST

Beachten:
Wegen der Komplexität des regulären Ausdrucks mit den vielen Klammerausdrücken kann man an die Grenze der in Mp3tag benutzten RegExp-Maschine kommen, was zu einem nicht optimalen Ergebnis führen kann.

DD.20170430.1137.CEST


#6

Es scheint also doch zu gehen. Vielen Dank! Jetzt versuche ich, die Syntax zu verstehen.
Darf ich noch um Hinweise bitten, wie ich diese Formeln im Programm anwenden muss, dass sie zum Ziel führen? Ich bin ein Anfänger auf diesem Gebiet.


#7

Bei dem Lösungsvorschlag in ...
Einen Tag auf mehrere andere Tags verteilen
... kann man wegen der Komplexität des regulären Ausdrucks mit den vielen Klammerausdrücken an eine Grenze in der RegExp-Maschine kommen, deshalb folgend ein anderer Vorschlag.

Man kann den langen Titel zunächst in temporäre Hilfsfelder aufteilen, dann werden die jeweiligen Textteile einzeln extrahiert.

TITLE_ORIG <== %TITLE%

TEMP_0 <== %TITLE%$char(32)
--> "Ludwig van Beethoven Symphonie Nr. 3 Es-Dur op. 55 Berliner Philharmoniker 3. Marcia funebre (Adagio assai) "

TEMP_1 <== $left(%TEMP_0%,$len($regexp(%TEMP_0%,'^((?:.+?\s){3}).*$','$1')))
--> "Ludwig van Beethoven "

TEMP_0 <== $cutLeft(%TEMP_0%,$len(%TEMP_1%))
--> "Symphonie Nr. 3 Es-Dur op. 55 Berliner Philharmoniker 3. Marcia funebre (Adagio assai) "

TEMP_2 <== $left(%TEMP_0%,$len($regexp(%TEMP_0%,'^((?:.+?\s){6}).*$','$1')))
--> "Symphonie Nr. 3 Es-Dur op. 55 "

TEMP_0 <== $cutLeft(%TEMP_0%,$len(%TEMP_2%))
--> "Berliner Philharmoniker 3. Marcia funebre (Adagio assai) "

TEMP_3 <== $left(%TEMP_0%,$len($regexp(%TEMP_0%,'^((?:.+?\s){2}).*$','$1')))
--> "Berliner Philharmoniker "

TEMP_0 <== $cutLeft(%TEMP_0%,$len(%TEMP_3%))
--> "3. Marcia funebre (Adagio assai) "

TEMP_4 <== $left(%TEMP_0%,$len($regexp(%TEMP_0%,'^((?:.+?\s){5}).*$','$1')))
--> "3. Marcia funebre (Adagio assai) "

KOMPONIST <== $trim(%TEMP_1%)
WERK <== $trim(%TEMP_2%)
ORCHESTER <== $trim(%TEMP_3%)
TITEL <== $trim(%TEMP_4%)
TITLE <== $trim(%TEMP_4%)

TEMP_0 <== $char(0)
TEMP_1 <== $char(0)
TEMP_2 <== $char(0)
TEMP_3 <== $char(0)
TEMP_4 <== $char(0)

Hier ist die Mp3tag Aktionengruppe ... kopieren nach ...
%appdata%\Mp3tag\data\actions
Test2017_20170429.TITLE.split_by_words.mta (965 Bytes)

DD.20170429.1027.CEST

Test2017_20170429.TITLE.split_by_words.mta (965 Bytes)


#8

Das haben wir (DetlevD und ich) auch nie bezweifelt, dass es prinzipiell geht.
Nur erscheint mit der Aufwand und die Komplexität der erforderlichen Ausdrücke immer noch so hoch, dass es schon wirklich eine Unmenge Stücke mit genau dem hier vorgestellten Muster geben muss, damit sich die Entwicklung des regulären Ausdrucks lohnt.
Und gerade wenn du dich noch nicht so auskennst, erscheint mir der häppchenweise Weg mit Filtern und Tag Panel und Ersetzen deutlich besser für die Gewöhnung an dieses Programm.

Jetzt mal ehrlich: wie viele Stücke mit dem Muster hast du denn jetzt?


#9

Ja, du hast schon irgendwie Recht damit, wenn es um den Aufwand geht, wie er zu leisten war für die hier vorgestellte Methode.
Aber nun gibt es ja eine Mustervorlage, welche nur noch verlangt, ...
die Anzahl der Wortgruppen anzupassen, ...
und innerhalb jeder Wortgruppe die Anzahl der Worte anzupassen.

DD.20170429.1130.CEST


#10

Dass du das als unbestrittener Champion der Regulären Ausdrücke (ehrliche Bewunderung) ruckzuck hinkriegst, ist mir klar.
Aber beim OP weiß ich nicht, wie steil die Lernkurve ansteigen muss, da der OP selbst sagt:

Von daher bin ich gespannt auf die Rückfragen.


#11

Wenn man sich mit der Mp3tag Funktion "Regulärer Ausdruck" nicht so gut auskennt, dann kann man in diesem Fall auch ganz gut die Mp3tag Funktion $meta_sep() benutzen.
Diese Funktion wird hier benutzt, um die einzelnen Worte zu erkennen.

Aktion: Tag-Feld formatieren

TITLE_ORIG <== $if(%TITLE_ORIG%,%TITLE_ORIG%,%TITLE%)

Aktion: Tag-Feld aufteilen
Feld: TITLE
Trennzeichen:

Aktion: Tag-Feld formatieren
Feld: KOMPONIST
Formatstring: $meta(TITLE,0)' '$meta(TITLE,1)' '$meta(TITLE,2)

Aktion: Tag-Feld formatieren
Feld: WERK
Formatstring: $meta(TITLE,3)' '$meta(TITLE,4)' '$meta(TITLE,5)' '$meta(TITLE,6)' '$meta(TITLE,7)' '$meta(TITLE,8)

Aktion: Tag-Feld formatieren
Feld: ORCHESTER
Formatstring: $meta(TITLE,9)' '$meta(TITLE,10)

Aktion: Tag-Feld formatieren
Feld: TITLE
Formatstring: $meta(TITLE,11)' '$meta(TITLE,12)' '$meta(TITLE,13)' '$meta(TITLE,14)' '$meta(TITLE,15)

Hier ist die Mp3tag Aktionengruppe ... kopieren nach ...
%appdata%\Mp3tag\data\actions
Test2017_20170429.TITLE.split_by_words__2_.mta (465 Bytes)

DD.20170429.1327.CEST

Test2017_20170429.TITLE.split_by_words__2_.mta (465 Bytes)


#12

Es geht mir nicht nur um die Anwendung, sondern vor allem darum, die Möglichkeiten von mp3tag zu verstehen.


#13

Ich wüsste gerne, was "OP" indiesem Zusammenhang heißt!


#14

Danke an DetlevD für den letzten Vorschlag, den ich nachvollziehen und umsetzen konnte. Der einzige Fehler: In WERK fehlt "op."; dort steht jetzt nur. "Symphonie Nr. 3 Es-Dur 55". Woran liegt das?
Zweite Frage: Wie kann ich den 2. Vorschlag, den mit den reg. Ausdrücken, umsetzen?


#15

Ich meinte damit "original poster", also der, der den Thread eröffnet hat


#16

Wie viel von den FAQs und der Hilfe hast du schon gelesen?
Ich würde in diesem Zusammenhang die Abschnitte zu Aktionen http://help.mp3tag.de/options_format.html und Scripting http://help.mp3tag.de/main_scripting.html empfehlen.
Wenn du in MP3tag auf F1 drückst gibt es die Hilfe vermutlich auch auf Deutsch.

Hier im Forum findest du die FAQs: /c/faq-haufig-gestellte-fragen und auch dort eine extra Abteilung zu Aktionen: /t/596/1

Die von DetlevD vorgestellten $regexp() Befehle verwendest du in Aktionen vom Typ "Tag-Feld formatieren" bzw. er hat es selbst angegeben.


#17

Da war ein Schreibfehler, richtig ist so: $meta(TITLE,7)

DD.20170429.1615.CEST


#18

Ich habe dank Eurer Hinweise die erste Aktionengruppe von DetlevD im Wesentlichen verstanden und kann sie auf ähnlich gelagerte Fälle übertragen.
Die mp3-tag-Hilfe ist in Bezug auf reguläre Ausdrücke recht spärlich. Was bedeutet z. B. in der genannten Aktionengruppe die Zeichenreihe "((?:.+?\s){3})"? Es geht um das 3. Leerzeichen, das ist klar, aber was bedeuten die Zeichen davor?


#19
. any character + 1 or more ? match as few as possible \s whitespace (?:abc) non-capturing group {3} three times (abc) capture group

Siehe dort ...
https://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck
http://www.regular-expressions.info/tutorial.html
https://regex101.com/
http://www.regexr.com/

DD.20170430.1120.CEST


#20

Danke für die Erklärung und die interessanten Links! Jetzt komme ich gut weiter.