Bedingtes Aufteilen des Filename in Disc/Tracknummer

Hallo,

ich versuche eine Aktion zu erstellen, die nur bei Vorliegen eines bestimmten Formats im Filenames den relevanten Anfangsteil des Filenames in Discnummer und Tracknummer aufsplittet.

Soll-Format für das Aufsplitten:
dreistellige Disc+Tracknummer gefolgt von einem Unterstrich oder einem Minus bzw. einem nichtnumerischem Zeichen und dahinter der "Rest", also am Beispiel:

Beispiel Filename: 123_Madonna - Into The Groove.mp3 ==> Discnummer = 1 und Track =23
Beispiel Filename: 123-Madonna - Into The Groove.mp3 ==> Discnummer = 1 und Track =23
Beispiel Filename: 123 Madonna - Into The Groove.mp3 ==> Discnummer = 1 und Track =23
Beispiel Filename: 023 Madonna - Into The Groove.mp3 ==> Discnummer = "leer" und Track =23
Beispiel Filename: Madonna - Into The Groove.mp3 ==> keine Aktion
Beispiel Filename: 12 Madonna - Into The Groove.mp3 ==> keine Aktion
Beispiel Filename: 1234 Madonna - Into The Groove.mp3 ==> keine Aktion

Mein bisheriger Ansatz für die Aktion zum Aufspiltten in den einen Teil der Discnumber sieht so aus:

Aktion: Tag-Feld formatieren Feld: DISCNUMBER Formatstring: $if($eql($left(%_filename%,4),\d\d\d\D)),$left(%_filename%,1),)

Mindestens ein Fehler in meiner Denke scheint zu sein, dass die $eql-Funktion wohl keine Strings miteinander vergleichen kann sondern nur Zahlenwerte...

Danke für Eure Unterstützung im Voraus!

Für das Tag-Feld formatieren gehen keine regulären Ausdrücke, es sei denn, du nimmst $regexp().

Da die Fälle aber sowie völlig unterschiedliche Muster abdecken sollen, würde ich vorschlagen, zuerst das Feld TRACK zu füllen mit entweder einer Aktion vom Typ "Tag-Feld importieren" oder Konverter>Filename-Tag

Und dann stürzt du dich auf das Feld Track.
die 3-stelligen Zahlen kannst du mit
$div(%track%,100) für %discnumber%
und
$mod(%track%,100) für %track%
zerlegen.
Damit wird auch 1234 zerlegt - da kannst du ja gucken, was du tust, wenn DISCNUMBER größer als 9 ist.

Vorschlag 1, mit Filter ... mit Regexp ...

Filter: "%_filename%" MATCHES "^\d\d\d[ _-]"

Aktion #1: "Tag-Feld formatieren"

Feld: DISCNUMBER
Formatstring: $regexp($div($regexp(%_filename%,'^(\d\d\d)[ _-].*$','$1'),100),'^0$',)

Aktion #2: "Tag-Feld formatieren"

Feld: TRACK
Formatstring: $mod($regexp(%_filename%,'^(\d\d\d)[ _-].*$','$1'),100)

Vorschlag 2, ohne Filter ... mit Regexp ...

Aktion #1: "Tag-Feld formatieren"

Feld: DISCNUMBER
Formatstring: $if($eql($regexp(%_filename%,'^(\d\d\d)[ _-].*$',),),$regexp($div($regexp(%_filename%,'^(\d\d\d)[ _-].*','$1'),100),'^0$',),)

Aktion #2: "Tag-Feld formatieren"

Feld: TRACK
Formatstring: $if($eql($regexp(%_filename%,'^(\d\d\d)[ _-].*$',),),$mod($regexp(%_filename%,'^(\d\d\d)[ _-].*','$1'),100),)

Vorschlag 3, Alternative mit Standardfunktionen ...

Aktion #1: "Tag-Feld formatieren"

Feld: DISCNUMBER
Formatstring: $if($eql($len($num(%_filename%,1)),3),$div($num(%_filename%,1),100),)

Aktion #2: "Tag-Feld formatieren"

Feld: TRACK
Formatstring: $if($eql($len($num(%_filename%,1)),3),$mod($num(%_filename%,1),100),)

Aktion #3: "Tag-Feld formatieren"

Feld: TRACK
Formatstring: $if2(%TRACK%,$num(%_filename%,1))

Siehe auch ...
/t/10286/1

DD.20150316.0957.CET

Tausend Dank Euch beiden! Das ist eine klasse Lösung!

Danke! Ich hatte über eine Stunde vergeblich nach diesem Thread gesucht bis ich gepostet habe :book:
Beste Grüße!