Bestimmte Interpreten Namen groß schreiben

Hallo mp3tagger,

ich arbeite schon seit einiger Zeit mit mp3tag, bin jetzt aber als Neuling in dieses Forum engestiegen.
Ich habe gerade mal zig Seiten überblättert, aber nirgendwo ist mir mein Problemchen untergekommen.
Ich möchte, dass bestimmte Interpretennamen, wie z.B. ELO, UFO, REM, etc, bei einer durchgeführten Aktion auch in Großbuchstaben erhalten bleiben. Egal was ich bislang angestellt habe, eine Möglichkeit dies durchzuführen, habe ich noch nicht gefunden.
Irgendwas läuft da bei meinen Aktionen schief.

Hallo straightshooter,

ich habe mir eine Aktion angelegt (sog. Ausnamenliste)
Das Felde ist meistens ARTIST > Ersetzen z.B. Orginal Abba durch ABBA und das für die meisten bekannten ARTISTEN od. Interpreten erstellen die dir bekannt sind.
Nur als Wort ersetzen ankreuzen. Aktion ausführen!
Ist zwar nur eine kleine Hilfe, aber funktioniert. Die Liste kann man ja jederzeit erweitern.

mfG :music:

Vielleicht ist es eine gute Idee in irgendeinem Thread diese Aktion zu veröffentlichen, sodass andere sie nutzen und erweitern (oder ändern) können. Ich denke mal, das Problem mit der Schreibweise hat jeder und eine andere Lösung ist mir bis jetzt auch nicht eingefallen.

mfG
gnor

Das ist schon mal ein Ansatz, danke! Wobei ABBA noch das leichtere Übel ist. Diese Ausnahmeliste gibt es es ja auch bei "The Godfather", aber dieses Programm ist ziemlich umfangreich und auch nicht so einfach zu bedienen. Deswegen bevorzuge ich halt mp3tag. Vielleicht kennt ja jemand noch eine andere Variante.

Da Sprache nicht logisch ist, gibt es keinen allgemeingültigen Algorithmus - ohne irgendeine Liste wirst du nicht auskommen.
Du könntest alternativ einen Filter vorhalten (in der Filterhistgorie oder als Text in einer Datei gespeichert), der Listen der großzuschreibenden Künstlernamen enthält. Diesen String oder diese Strings kopierst und pastetest du in die Filterzeile und lässt dann eine Aktion auf %band% und %artist% los, die alles in Versalien umsetzt.
Diese Methode hat den Vorteil, dass ein Tippfehler in der Aktion nicht gleich auf alle gefundenen Artisten angewandt wird (und anschließend die Aktion nicht mehr geht), da eben nur der String umgewandelt, aber nicht ersetzt wird.

Das liest sich ja toll, aber leider bin ich mit den Möglichkeiten bzw. Formulierungen von mp3tag nicht so vertraut. Ein Beispiel, wie denn der Filter auszusehen hätte, wäre gut. Meine Versuche haben nicht gefunzt. "Learning by doing" bringt halt nicht immer was.
Gibt es denn hier im Forum vielleicht irgendwo "Formulierungshilfen"

so ein Filter könnte so aussehen:

%artist% HAS "rem" OR %artist% HAS "abba" OR %artist% HAS "dj"

(und das jetzt bitte sinngemäß fortsetzen für alle die Sonderfälle)

so einen String kopierst Du in ein Textdatei (wenn du dich nicht darauf verlassen willst, dass MP3tag das schon in der Filter-historie speichert).
Bei Bedarf machst Du die Textdatei auf, kopierst den Filter-Ausdruck und fügst ihn in das Filtereingabefeld von MP3tag ein.
Dann kannst Du die Aktion zur Großschreibung auf alle Künstler loslassen, die vom Filter erfasst wurden.
Vorteil ist: du musst nur eine Aktion basteln, kannst aber den Filter-Ausdruck auch ad hoc erweitern oder verkürzen.

Was ist das denn für eine Aktion?
Was sind die Eingabedaten?
Was wird als Ergebnis erwartet?

DD.20100629.2033.CEST

Stehe auch vor der Aufgabe eine Ausnahmen-Aktion für "Schreibweise ändern" zu erstellen.
ARTISTEN wie ABBA kommen bei mir auch vor.
Wie ist dies jetzt gelöst worden ? Für jeden Ausnahmen-ARTISTEN eine Aktion ?
Mit der Aktion "Schreibweise" ist dies nicht möglich ?
Gibt es so etwas ähnliches wie $regexp($lower(%artist%),(^(ABBA|REM) .... für Schreibweise ändern ?

@ Was sind die Eingabedaten?
ARTIST: ABBA
@ Was wird als Ergebnis erwartet?
Eine Aktion "Schreibweise ändern" und alle ARTISTEN ausser ABBA haben ARTIST Schreibweise
wie : Beatles, The Who ( also Erster Buchstabe GROSS, Rest KLEIN)

Aktion: Tag-Feld Formatieren
Feld: ARTIST
Formatstring: $regexp($caps(%artist%),^(Abba|Rem|Zz Top)$,%artist%)

Der Formatstring lässt sich beliebig erweitern. Wichtig ist, das du die Künstler in der Klammer erstmal so schreibst wie sie umgewandelt erscheinen würden.
Du könntest auch
$regexp($caps(%artist%),^(Abba|Rem|Zz Top)$,$upper(%artist%))
als Formatstring verwenden. Das hat den Vorteil das ABBA oder REM gleich mit in UPPER CASE geschrieben werden wenn sie das davor nicht waren. Allerding wird dann auch ZZ Top zu ZZ TOP.

Um mal auf meinen Beitrag von oben zurückzukommen:
Im Aktionsarchiv entspricht die Nummer 12 meiner ersten Aktion dem Problem hier.
Diverse Eigenkreationen kann man dann auch gerne da veröffentlichen.

@pone: Der Nachtteil deines Strings ist, dass er Interpreten wie:
"ABBA feat. Superband"
"Superband & ZZ Top"
"Superband (ZZ Top Remix)"
usw. nicht berücksichtigt oder erkennt.

Was spricht gegen eine Aktion Ersetzen von Abba durch ABBA?
Oder alternativ einen Formatstring auf Artist angewendet:
$replace(Abba,ABBA,Zz Top,ZZ Top,…)
Man kann natürlich auch noch die Aktion verfeinern, indem man sie auf ganze Wörter beschränkt und entsprechende Wortgrenzen festlegt.

mfG
gnor

Ich weiß, durch das exakte bestimmen des Feldwertes mit den Zeichen für Zeilenanfang (^) und Zeilenende ($) hab ich die Schreibweise festgelegt. Das kann man natürlich auch weglassen, so hat es aber den Vortei,l dass z.b. nur REM groß geschrieben wird und nicht etwa REMbrandt oder so etwas.
Das ist es auch was gegen das Ersetzen mit $replace spricht.

Ich persönlich halte solche Massenumbenennungen für größere Musiksammlungen eh nicht durchführbar. Da gibt es immer irgendwelche Ausnahmen die dann wieder anders geschrieben werden sollen.

Siehe dazu:

Ich meine, bei $replace gibt es das auch noch als zusätzlichen Parameter, kann allerdings in der Hilfe nichts davon finden.

mfG
gnor

Tasächlich:
$replace(%artist%,^Abba$,ABBA,^Zz Top$,ZZ Top,^Rem$,REM)
Funktioniert und schreibt nur die exakten Treffer GROSS. Da das mit ^ und $ in der Hilfe nur bei den regular expressions steht dachte ich das funktioniert auch nur da. Aber damit wären wir auch nur wieder so weit wie zuvor.

hallo,
Aktion Tag-Felder Formatieren funktioniert mit
ARTIST
$replace(%artist%,^Abba$,ABBA,^Zz Top$,ZZ Top,^Rem$,REM)
nicht

habe ich es falsch verstanden ?

eine Erweiterung von ARTISTEN :

Standard.mta (3.59 KB)

Nein, ich denke ich habe mich getäuscht. Hab das nicht sorgfälltig genug geprüft. Sah auf den ersten Blick so aus weil alle meine Tests bereits so geschrieben waren wie ich sie haben wollte.

Heißt also: ^ und $ funktionieren bei $replace nicht sondern nur bei $regexp

Du kannst aber
$replace(%artist%,Abba,ABBA,Zz Top,ZZ Top,Rem,REM)
verwenden. Das gibt halt wie gesagt unerwünschte Ergebnisse wen etwa die Silben abba oder rem in anderen Wörtern vorkommen.

Bei $regexp funktioniert dagegen das anhängen von beliebig vielen replace-Paaren nicht.
$regexp(%artist%,^(Abba|Rem|Zz Top)$,%artist%)
oder
$regexp(%artist%,^(Abba|Rem|Zz Top)$,$upper(%artist%))
wäre die Alternative, je nachdem ob du ZZ TOP oder ZZ Top (aber dann nur wenn schon vorher so geschrieben) willst.

Aber genau das war ja auch Bestandteil meines Strings weiter oben, nur dass ich den dem ganzen vorhergehenden Schritt, erstmall alles in Normaler schreibweise zu schreiben gleich mit eingebaut hab:
$regexp($caps(%artist%),^(Abba|Rem|Zz Top)$,%artist%)
$regexp($caps(%artist%),^(Abba|Rem|Zz Top)$,$upper(%artist%))

Ich habs!
$regexp($lower(%artist%),(.|^)\b(zz top|abba|rem)\b(.|$),1)
ersetzt den artist immer mit "1" wenn einer der aufgezählten artist (hier ZZ Top, ABBA und REM) vorkommt.
Mit
$if($eql($regexp($lower(%artist%),(.|^)\b(zz top|abba|rem)\b(.|$),1),1),...,...)
lassen sich dann zwei verschiedene Case Conversions definieren, je nachdem ob einer der Künstler vorkommt oder nicht.
$if($eql($regexp($lower(%artist%),(.|^)\b(zz top|abba|rem)\b(.|$),1),1),%artist%,$caps(%artist%))
Würde also das Artist Feld unverändert lassen wenn die Künstler darin vorkommen und es ansonsten in Normal Case schreiben.

Wenn dir das mit Artist Feld unverändertl lassen nicht passt, weil in deiner jetztigen Sammlbung ABBA auch öfter Abba oder abba geschrieben ist hab ich noch ne zweite Lösung:

Mit
$replace($caps(%artist%),Abba,ABBA,Rem,REM,Zz Top,ZZ Top)
wäre man schon fast am Ziel. Das würde alle Wörter in Normal Case schreiben mit Ausnahme der aufgelisteten, die es gleich in die gewünschte Schreibweise bringt. Dadurch dass die case conversion vor dem replace stattfindet werden die Silben auch nur dann um anders behandelt, wenn sie am Wortanfang stehen. harem würde also zu Harem und nicht etwa zu HaREM. rembrandt dagegen würde aber zu REMbrandt.

In den meisten Fällen würde das wahrscheinlich reichen. Falls nicht hab ich immer noch ne Lösung, die aber langsam kompliziert wird:
$replace($replace($caps($regexp(%artist%,\b(\w+)\b,$1@)),Abba@,ABBA,Rem@,REM,Zz@ Top@,ZZ Top),@,)
Hier wird zuerst durch die $regexp funktion im Inneren jedes Wortende mit einem @ versehen. Dann werden die Küstler nur umgewandelt wenn ein @ auf die Wörter ihrer Namen folgt. Rembrandt wird also nicht mehr zu REMbrandt. Am Schluss werden alle überigen @ wieder entfernt.
Man muss nur aufpassen sollte ein @ in einem Künstlernamen vorkommen. Dann kann man sich damit behelfen, dass man eine längere Zeichenfolge wie etwa @@@ wählt was wahrscheinlich wirklich nirgends mehr vorkommt aber mehr Schreibearbeit ist, oder man wählt ein anderes seltenes Sonderzeichen, aber Vorsicht, viele haben in der Skriptsprache spezielle Bedeutungen.
Man kann den Formatstring auch ein bisschen abkürzen indem man das @ nur bei den Künstlern anhängt, deren Namen mit dem Anfang des Namens anderer Künstler verwechselt werden könnte.

$replace($replace($caps($regexp(%artist%,\b(\w+)\b,$1@)),Abba,ABBA,Rem@,REM,Zz Top,ZZ Top),@,)
würde also reichen, um nur Verwechslungen mit der Anfangssilbe Rem auszuschließen, weil Künstler die mit Abba... oder ZZ Top... beginnen eh nicht vorkommen.