Konverter Tag - Dateiname $replace


#1

Hallo,
Gibt es eine Möglichkeit im Konverter Tag - Dateiname
in der Funktion $replace Wildcards zu verwenden.

Ich möchte alles nach "Feat." ersetzen.

Bsp:
Ist: Artist Feat. Artist1
Soll: Artist

Diese Funktion habe ich mir rausgesucht, aber funktioniert leider nicht

$replace(%artist%,^(.)((Feat.)) - (.*),)

Warum : Bei einem Album mit mehreren "Feat. Artist" legt %artist% leider mehrere Ordner an :-((

Gruss


#2
%dummy%$regexp(%artist%,(.*)( | '\('| '\[')(feat\.?) (.*),$1) 

Alt: Artist Feat. Artist1
Neu: Artist

um den 2ten Artist nach Titel zu bringen, angehängte am besten direkt nach speichern:
C:\Dokumente und Einstellungen\User\Anwendungsdaten\Mp3tag\data\actions
Artist___ndern__1_schieben.mta (305 Bytes)Artist___ndern__2_schliessen.mta (277 Bytes)

Artist___ndern__1_schieben.mta (305 Bytes)

Artist___ndern__2_schliessen.mta (277 Bytes)


#3

Hallo bora99, deine Anfrage lässt viel Raum für Spekulationen, an welcher Stelle im Mp3tag bzw. mit welchen Mitteln du dein Problem gelöst haben möchtest ...

  • alles nach "Feat." ersetzen (??? womit ersetzen ???)
  • im Konverter Tag - Dateiname (??? warum nicht mit einer Aktion ???)
  • Funktion $replace mit Wildcards (??? Wildcards ???)
  • $replace(%artist%,^(.)((Feat.)) - (.*),), Funktion habe ich mir rausgesucht (??? wo gefunden ???)

Wenn du eine Lösung mit dem Konverter Dateiname-Dateiname suchst, dann könnte das helfen ...

Wenn du eine einfache Scripting Lösung für den Konverter Tag-Dateiname suchst, dann könnte das helfen ...

$left(%ARTIST%,$sub($strstr(%ARTIST%,'Feat.'),2))


Wenn du eine Scripting Lösung mit Regulärem Ausdruck für den Konverter Tag-Dateiname suchst, dann könnte das helfen ...

$regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft\.?|feat\.?|featuring)\s+(.+?)?[])}]?\s*$','$1',1)


DD.20120204.1533.CET





#4
Hallo bora99, deine Anfrage lässt viel Raum für Spekulationen, an welcher Stelle im Mp3tag bzw. mit welchen Mitteln du dein Problem gelöst haben möchtest ...
- alles nach "Feat." ersetzen (??? womit ersetzen ???)
- im Konverter Tag - Dateiname (??? warum nicht mit einer Aktion ???)
- Funktion $replace mit Wildcards (??? Wildcards ???)
- $replace(%artist%,^(.*)\((Feat.*)\) - (.*),), Funktion habe ich mir rausgesucht (??? wo gefunden ???)

Erklärung:

  • Wenn ich ein neues Album habe, dann starte ich abschliessend die Aktion "Standard".mta
    damit haben alle möglichen Varianten von "Feat" den Wert "Feat."
  • dann verschiebe ich das Album mit Konverter Konverter Tag-Dateiname in meinen gewünschten Ordner
    ....\%artist%\ als Beispiel und wenn ich einen Artist mit Feat. Artist1 habe als Beispiel
    dann ist das Album in 2 verschiedenen Ordner
    das möchte ich damit lösen

folgende Expression möchte ich erweitern, sieht zwar schwierig aus, ist es für einen Spezialisten für dich sicher nicht ( habe ich laut Infos von hier immer erweitert):

..\Alben$upper($left(%artist%,1))$caps(%artist%)$caps(%artist%)-$caps(%album%) - (%year%)$if(%discnumber%,$if($eql(%discnumber%,1/1),$num(%track%,2),$num(%discnumber%,1)$num(%track%,2)),$num(%track%,2)) $caps(%title%)

gruss


#5

Schon mal darüber nachgedacht, das Feld ALBUMARTIST zu verwenden? Das ist genau dafür da, um solche Probleme zu vermeiden. Es gibt ja auch durchaus komplexere Künsterkonstellationen auf einem Album als einfach der der Künstler alleine oder der Künster feat. irgendwen.

Falls du das nicht willst, und du das feat nur aus den Dateinamen raus möchtest, nicht aber aus den Tags, müsstest du in deinem bestehenden Formatstring die zwei $caps(%artist%) durch ein $regexp Funktion ersetzen, die das feat rausfiltert. Denn die wildcard und ähnliches funktionieren nur bei $regexp, nicht bei $replace. Siehe hier: http://help.mp3tag.de/options_format.html#regexp
(auch auf deutsch in der lokalen Hilfe: F1)

Versuch mal statt $caps(%artist%) mit $regexp($caps(%artist%), Feat.+,)
Das müsste erstmal funktionieren. Den Punkt nach dem "feat" musst du dafür gar nicht wegmachen.

Komplizierter wirds, wenn noch eventuelle Klammern um das "feat" rum sind. Dann würd ich's hiermit versuchen: $regexp($caps(%artist%),' ([|()*feat.+',,1)
(die 1 am Schluss, um die Groß/Klein-Schreibung für $regexp zu ignorieren, weil die ja bei dem feat nach Klammer nicht mehr dur $caps vereinheitlicht wird)


#6

Hmm, eigentlich kennst du das Handwerkzeug und hast auch viele Vorschläge schon bekommen ... wie es so aussieht muss ja nur der ARTIST bearbeitet werden, aber weil der mehrmals in dem Formatstring vorkommt, wird der Formatstring dann immer unübersichtlicher werden, das würde mir persönlich nicht so gut gefallen.
Ich bereite diese Sachen immer in einem oder mehreren temporären Tagfeldern vor, lasse die Datei dann mit den Werten aus den Hilfsfeldern verschieben und entferne die Hilfsfelder dann.
Das geht alles ohne manuellen Konverter mit einer Aktionsgruppe.

DD.20120205.1315.CET

Hier ist ein ausführliches Beispiel wie man das mit einer Aktionengruppe machen könnte ...

TMP_YEAR = '('%YEAR%')'
TMP_ARTIST = $caps($regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft.?|feat.?|featuring)\s+(.+?)?[])}]?\s*$','$1',1))
TMP_ALBUM = $caps(%ALBUM%)
TMP_TITLE = $caps(%TITLE%)
TMP_TRACK = $num(%TRACK%,2)
TMP_INDEX = $left(%TMP_ARTIST%,1)
TMP_DISCTRACK = $if(%DISCNUMBER%,$if($eql(%DISCNUMBER%,'1/1'),%TMP_TRACK%,$num(%DISCNUMBER%,1)%TMP_TRACK%),%TMP_TRACK%)

TMP_LEVEL4 = 'O:\BORA99<!--colorc-->'
TMP_LEVEL3 = %TMP_INDEX%'<!--colorc-->'
TMP_LEVEL2 = %TMP_ARTIST%'<!--colorc-->'
TMP_LEVEL1 = %TMP_ARTIST%' - '%TMP_ALBUM%' - '%TMP_YEAR%'<!--colorc-->'
TMP_LEVEL0 = %TMP_DISCTRACK%' '%TMP_TITLE%

TMP_TARGET = %TMP_LEVEL4%%TMP_LEVEL3%%TMP_LEVEL2%%TMP_LEVEL1%%TMP_LEVEL0

Anfang Aktionengruppe Test_2012#20120205.bora99.MoveFile

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_YEAR
Formatstring: '('%YEAR%')'

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_ARTIST
Formatstring: $caps($regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft.?|feat.?|featuring)\s+(.+?)?[])}]?\s*$','$1',1))

Aktion #3
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_ALBUM
Formatstring: $caps(%ALBUM%)

Aktion #4
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_TITLE
Formatstring: $caps(%TITLE%)

Aktion #5
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_TRACK
Formatstring: $num(%TRACK%,2)

Aktion #6
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_INDEX
Formatstring: $left(%TMP_ARTIST%,1)

Aktion #7
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_DISCTRACK
Formatstring: $if(%DISCNUMBER%,$if($eql(%DISCNUMBER%,'1/1'),%TMP_TRACK%,$num(%DISCNUMBER%,1)%TMP_TRACK%),%TMP_TRACK%)

Aktion #8
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_LEVEL4
Formatstring: 'O:\BORA99'

Aktion #9
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_LEVEL3
Formatstring: %TMP_INDEX%''

Aktion #10
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_LEVEL2
Formatstring: %TMP_ARTIST%''

Aktion #11
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_LEVEL1
Formatstring: %TMP_ARTIST%'÷-÷'%TMP_ALBUM%'÷-÷'%TMP_YEAR%''

Aktion #12
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_LEVEL0
Formatstring: %TMP_DISCTRACK%'÷'%TMP_TITLE%

Aktion #13
Aktionstyp 5: Tagfeld formatieren
Feld _______: TMP_TARGET
Formatstring: %TMP_LEVEL4%%TMP_LEVEL3%%TMP_LEVEL2%%TMP_LEVEL1%%TMP_LEVEL0%

Aktion #14
Aktionstyp 5: Tagfeld formatieren
Feld _______: _FILENAME
Formatstring: %TMP_TARGET%

Aktion #15
Aktionstyp 9: Tagfelder entfernen
Folgende Tagfelder entfernen (mit Semikolon getrennt): TMP_YEAR;TMP_ARTIST;TMP_ALBUM;TMP_TITLE;TMP_TRACK;TMP_INDEX;TMP_DISCTRACK;TMP_LE
VEL4;TMP_LEVEL3;TMP_LEVEL2;TMP_LEVEL1;TMP_LEVEL0;TMP_TARGET

Hinweis: Ersetze jedes ÷ Sonderzeichen durch ein Leerzeichen.
Ende Aktionengruppe Test_2012#20120205.bora99.MoveFile (15 Aktionen)

Test_2012_20120205.bora99.MoveFile.mta (1.04 KB)

DD.20120205.1430.CET

Test_2012_20120205.bora99.MoveFile.mta (1.04 KB)


#7

nein noch nicht , danke für den Hinweis

Genau, das was ich gebraucht habe , vielen Dank !

so komplex brauche ich es nicht !

Lösung ( auch %artist% mit With )
$regexp($caps(%artist%),'(s+Feat.+)(s+With.+)',)

ALT:
..\Alben$upper($left(%artist%,1))$caps(%artist%)$caps(%artist%)-$caps(%album%) - (%year%)$if(%discnumber%,$if($eql(%discnumber%,1/1),$num(%track%,2),$num(%discnumber%,1)$num(%track%,2)),$num(%track%,2)) $caps(%title%)
NEU:
..\Alben$upper($left(%artist%,1))$regexp($caps(%artist%),'(\s+Feat.+)|(\s+With.+)',)$regexp($caps(%artist%),'(\s+Feat.+)|(\s+With.+)',)-$caps(%album%) - (%year%)$if(%discnumber%,$if($eql(%discnumber%,1/1),$num(%track%,2),$num(%discnumber%,1)$num(%track%,2)),$num(%track%,2)) $caps(%title%)


#8

Diese Lösung kann ich natürlich auch verwenden, ist beliebig erweiterbar !
Danke


#9

Abschliessend, vielen Dank für Euren tollen Support ! Die Aktionsgruppe werde ich auch natürlich testen !!!


#10

Hmm ... beliebig erweiterbar?
Ist dieser RegEx denn nicht schon die ultimative Lösung für alle Kombinationen vorkommender Featuritis?
Was kann man daran noch erweitern?
Und außerdem ... schriebst du zuvor, dass sei dir doch zu kompliziert.
? ? ?
DD.20120206.1556.CET


#11

für andere Varianten von %artist%

ja für alle Featuritis sicher

habe gerade eine Album mit "%artist% with %artist1%" , wie interpret with interpret1, das habe ich gemeint, sorry habe mich nicht richtig ausgedrückt

Ich meinte die regulären Ausdrucke für $regexp
z.B.: beliebige Zeichen , usw.
$regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft.?|feat.?|featuring)\s+(.+?)?[])}]?\s*$','$1',1)
ja ich weiss, mein "Konverter" sieht auf den ersten Blick auch komplex aus ... :-))
ist im Laufe der Jahre immer wieder erweitert worden , dank diesem Forum und dir.