Name Vorname mehrmals tauschen

Hallo,
ich habe folgendes Problem. Wenn der Interpret z.B. David Guetta feat. Kid Cudi heisst, so möchte ich als ArtistSort Guetta , David feat. Cudi, Kid haben.
Vergleichbares habe ich im Forum ncht gefunden.
Ich stelle mir das so vor: Der Cursor steht auf dem Vornamen und wird hinter dem nächsten Wort kopiert. Ist so etwas möglich?

Danke schon einmal.

Herbert

Schöne Vorstellungen hast du.

  1. Einen Cursor kann man nicht kopieren.
  2. Wenn du den Vornamen hinter das nächste Wort kopierst, dann hast du den Vornamen zweimal.
  3. Es gibt für diese Art von Problem mindestens eine Lösung im Forum.

Vielleicht findest du dort etwas, was dich weiter bringt:
Newbie Ignorance...ARTISTSORT

DD.20110214.1053.CET

Danke für die schnelle Antwort. Aber genau meine Fragestellung ist dort nicht gelöst.
Newbie Ignorance...ARTISTSORT
Ich befürchte, ich muss mich doch noch in RegEx einarbeiten.

Aber Danke für die Hinweise. Ich habe zumindest die ersten Ansätze.

Herbert

Ist das überhaupt Sinnvoll. Damit kannst du zwar David Guetta und Guetta finden. Aber Cudi, Kie bleibt bringt doch nichts, da es eh nicht am Anfang steht.
"Gueatta, David feat. Kid Cudi" wäre daher meineserachtens viel sinnvoller. Und vor allem auch einfacher umsetzbar.

Hier einiges dazu:
Switching first and last name of Artist

Mit dem "feat." in der Mitte bringst du aber einen neuen Sonderfall ins Spiel.
Geht aber auch alles.
Potentiell Probleme machen die Tatsache dass es Nachnamen gibt, die aus zwei Wörtern bestehen und in deinem Fall wahrscheinlich unterschiedliche Schreibweisen von feat.

Die Aktion wäre immer
Aktion: Tag-Feld formatieren
Feld: ARTISTSORT

und der Formatstring je nachdem:

$regexp(%artist%,(.) (.) (feat.),$2',' $1 $3)
würde dein Beispiel nach meinem Vorschlag umwandeln

$regexp(%artist%,(.) (.) (feat.) (.) (.),$2',' $1 $3 $5',' $4)
wie von dir gewünscht.

So weit so gut, das geht jetzt aber nur für Künstler deren Nachnamen ein Wort ist (mit beliebig vielen Vornamen.
Bei zusammengesetzten Nachnamen ein Fragezeichen einfügen. Dann darf der Vorname allerdings nur aus einem Wort bestehen:

$regexp(%artist%,(.?) (.) (feat.) (.?) (.),$2',' $1 $3 $5',' $4)
wenn beide Künstler einen zusammengesetzten Nachnamen haben

$regexp(%artist%,(.?) (.) (feat.) (.) (.),$2',' $1 $3 $5',' $4)
wenn nur der erstgenannte Künstler einen zusammengesetzten Nachnamen hat

$regexp(%artist%,(.) (.) (feat.) (.?) (.),$2',' $1 $3 $5',' $4)
wenn nur der zweitgenannte Künstler einen zusammengesetzten Nachnamen hat

Wenn dann auch noch verschiedene Schreibweisen von "feat." ins Spiel kommen, musst du die (feat.) Klammer anpassen. Hier lassen sich aber alternativen verwenden, so das man immer mit dem selben Formatstring arbeiten kann.
(feat.)
mit
(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.)
ersetzen.
Also z. B.:
$regexp(%artist%,(.) (.) (featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.) (.),$2',' $1 $3 $5',' $4)
wenn du die jeweilige Schreibweise von feat. auch so beibehalten willst.

oder:
$regexp(%artist%,(.) (.) (featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.) (.),$2',' $1 feat. $5',' $4)
wenn du sie bei der gelegenheit gleich auf "feat." vereinheitlichen willst.

Edit: hab den feat Teil nochmal etwas gekürzt indem ich ihn in drei Teile aufgespalten hab:
(f|F)(eaturing|EATURING|eat|EAT|t|T|)(.|)
entspricht
(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Fe
at.|FEAT.)

jetzt brauchst du halt auch dann auch drei "$n" um dich darauf zu beziehen, weil es jetzt drei Klammern sind. Also statt $3 jetzt $3$4$5

also z.B.:
$regexp(%artist%,(.) (.) (f|F)(eaturing|EATURING|eat|EAT|t|T|)(.|) (.) (.),$2',' $1 $3$4$5 $7',' $6)

oder mit vereinheitlichtem "feat.":
$regexp(%artist%,(.) (.) (f|F)(eaturing|EATURING|eat|EAT|t|T|)(.|) (.) (.),$2',' $1 feat. $7',' $6)

Hi,

danke für die ausführliche Hilfe. Ich werde bestimmt länger brauchen, es zu verstehen, als du gebrauchst hast, es zu schreiben. Super.

Ich werde jetzt erst mal etwas tüfteln.

Danke!!

Herbert

Einen Punk muss mit einem Backslash maskieren .
'.' hat keinen Effekt und findet jedes Zeichen.

Danke Dano, hab's ausgebessert. Hoffe mit ist dabei sonst nichts verrutscht, so dass noch alles funkioniert.
Irgenwann lern ich's noch wann man ' ' und wann man \ braucht, bzw was der Unterschied dabei ist.

Der Backslash dient zur Entwertung von Sonderzeichen in der Regex Sprache.
Das einfache Apostroph, paarweise benutzt, dient zur Entwertung von Sonderzeichen in der Mp3tag Sprache ('Stringularisierung').

DD.20110214.1630.CET

und die Klammer muss bei $regexp '(' geschrieben werden weil sie sowohl in der Mp3Tag-Sprache als auch in der Mp3tag Sprache eine besonder Funktion hat. Ich glaub ich hab's verstanden.

Hmm, das würde ich der Parser Hierarchie gemäß anders schreiben.

Von außen betrachtet wird zuerst die Mp3tag Sprache gesehen, dann die Regex Sprache.

$regexp(%TAGFIELD%,'Regex Expression String','Replacement String',IgnoreCaseOption)
... so dass im Regex Ausdruck die Entwertung von "Runde Klammer Auf" sofort auf derselben Sprachebene geschieht (, was der Schreibweise entspricht '(', wenn man nur die eine Klammer entwerten will.

DD.20110214.1830.CET

Mit dem Regex Ausdruck ((?:f)(?:eaturing|eat|t|)(?:.?)) kann man das auch so schreiben:

$regexp(%ARTIST%,'(.*) (.*) ((?:f)(?:eaturing|eat|t|)(?:\.?)) (.*) (.*)','$2, $1 $3 $5, $4',1)

Für den Regex Ausdruck gilt, dass er auch "FEATURING." findet, was vielleicht nicht beabsichtigt ist.

DD.20110214.1935.CET

Wo hast du denn das wieder her???
?: für egal ob groß oder klein geschrieben? das ist ja wohl mehr als praktisch!

Die Ignore Case Option ist der vierte Parameter in der Funktion $regex(), was im Mp3tag Hilfe Manual nur kurz beschrieben steht.

Eine solche Gruppe (?:regex) klammert, aber hält nichts fest.
(?:regex) Non-capturing parentheses group the regex so you can apply regex operators, but do not capture anything and do not create backreferences.

DD.20110214.1942.CET

Ah, ok. Das mit "Ignore Case" hab ich schon mal gelesen. Aber ich dachte immer da sollten Ausdrücke in bestimmten Fällen ignoriert werden. Das damit Groß- und Kleinschrbeibung gemeint ist, soweit hab ich nicht geschaltet. Eigentlich logisch. Und die deutsche Hilfe hab ich scheinbar auch nicht zurate gezogen. Selber Schuld.

Das mit Klammern die nichts halten ist auch nicht schlecht zu wissen.

Und das .? anstelle von (.|) ist auch nicht schlecht. So muss man das nicht mehr in eine extra Klammer schreiben.

Die Zerlegung der feat... Ausdrücke ist damit überflüssig geworden. Ich hab das ja nur gemacht
damit die Klammer nicht ganz so lang wird.

Das scheint mir dann am einfachsten zu sein:

$regexp(%artist%,(.*) (.*) (featuring|feat\.?|ft\.?) (.*) (.*),$2',' $1 $3 $5',' $4,1)

Aus

(featuring|Featuring|FEATURING|ft|Ft|FT|ft\.|Ft\.|FT\.|feat|Feat|FEAT|feat\.|Feat\.|FEAT\.)

ist also

(f|F)(eaturing|EATURING|eat|EAT|t|T|)(\.|)

und dann

(featuring|feat\.?|ft\.?)

geworden.
Nicht schlecht. Da nenn ich mal einen Lernprozess.

Pone, auch ein Dankeschön von mir, ich habe mit gelernt.
Der letzte kurze Regex Ausdruck gefällt mir sehr gut.

DD.20110214.2028.CET

Dem kann ich mich nur anschließen. Es funktioniert.

Danke euch allen.

Herbert