Bestimmte Worte kleinschreiben außer am TAG-Anfang

Hallo Leute,

ich bin am Verzweifeln, kriege es nicht auf die Reihe. Entweder verstehe ich die Syntax nicht umzusetzen oder es gibt keine Lösung für mein Problem:

Ich möchte bestimmte Wörter kleingeschrieben haben, mit der Ausnahme, wenn sie als erstes Wort im Tag vorkommen.

Beispiel:

Ist:

From The Hell To The Heavens Of Gods From Hell

Soll:

From the Hell to the Heavens of Gods from Hell

Die Wörter THE, TO, OF und FROM sollen kleingeschrieben werden. Nur nicht das FROM am Anfang.

Ich bin zu dumm, es so hinzubekommen. Es wäre toll, wenn jemand ein Stück seiner Weisheit mit mir teilte.

Ich danke euch im Voraus!

Ich geh jetzt mal vom Titel Feld aus:

Aktion: Tag-Feld formatieren
Feld: TITLE
Formatstring: $replace($caps(%title%), The, the, To, to, Of, of, From, from)

Du kannst das auch für jedes andere Feld umwandeln, aber nicht auf verschiedene Felder gleichzeitig anwenden. Dazu brauchst du eine du eine Aktionsgruppe:

  1. Aktion: Schreibweise
    Feld: _ALL
    Schreibweise: Normal

  2. Aktion: Ersetzen
    Feld: _ALL
    Original: The
    Ersetzen durch: the

  3. Aktion: Ersetzen
    Feld: _ALL
    Original: TO
    Ersetzen durch: to

  4. Aktion: Ersetzen
    Feld: _ALL
    Original: Of
    Ersetzen durch: of

  5. Aktion: Ersetzen
    Feld: _ALL
    Original: From
    Ersetzen durch: from

Die Original- und Ersetzen-durch-Wörter alle mit einem Leerzeichen davor schreiben, damit Wörter am Anfang eines Tagfeldes nicht auch klein geschrieben werden.

Hi!

Also, ich weiß gar nicht wie ich anfangen soll, bin etwas entgeistert. Im positiven Sinne!

Also, am besten erstmal DANKE! :laughing: :w00t: SUPER!

Es funktioniert! :laughing:

Ich danke dir so sehr! freu

Und ja, es war TITLE gemeint.

Allerdings hat die Sache noch einen Haken. Wie bekomme ich es jetzt hin, dass der erste Buchstabe nach einem / großgeschrieben bleibt? Nach der Anwendung der Aktion mit deiner genialen (!^^) Formel werden Buchstaben aber (ich denke mal wegen $caps) kleingeschrieben. Sie sollen aber groß bleiben, da / nach meinen "Tag-Vorschriften"^^ zwei Titel in einer Datei voneinander trennt (= ganz einfach zwei Musikstücke in einer mp3-Datei).

Beispiel:

Ist:

The In From Out/The Out Is In

SOLL:

The In from Out/The Out is In!

Wird aber:

The In from Out/the Out is In!

Wäre dir noch dankbarer, wenn du dafür eine Lösung parat hättest! Ich blätter indes nochmal in der Online-Hilfe nach bzw. im Forum.

Edit:

Vielleicht ist es noch wichtig für weitere Hilfe: Es gibt auch Titel, die unbearbeitet noch so lauten:

The In From Out / The Out Is In!

Das heißt die Leerzeichen vor und nach dem / sollen ebenfalls weggenommen werden, damit SOLL herauskommt.

Edit 2:

Nicht nötig, aber trotzdem danke. Dennoch funktioniert es bei mir nicht:

Allerdings habe ich es noch nicht so einzeln versucht. Sondern eine Aktion für Title, in der ich ERSETZEN gewählt habe und "Of" mit "of" ersetzen lassen wollte. Und genau da habe ich ein Leerzeichen VOR DEM WORT gesetzt. Aber Mp3TAG hat es ignoriert. Das ist das merkwürdige, auch wenn ich im Hauptfenster nur Dateien angezeigt haben will, die das Wort "of" als einzelnen Wort aufweisen und ich unter der FILTER-Leiste " of " eingebe (also VOR und NACH dem Wort ein Leerzeichen), zeigt er mir trotzdem alles an, wo die Buchstaben O und F zusammengeschrieben sind. Also auf Wörter, in denen ...OF... vorkommt. Und ich habe mich schon fast totgesucht, wie man Mp3TAG sonst vermittelt, dass ein Leerzeichen ein Leerzeichen ist. Nun, egal. Ist nur noch das Slash-Problem, was mir noch Kopfzerbrechen bereitet. Wollte das aber auch mal angemerkt haben.

LÖSUNG GEFUNDEN:

Indem ich die Formel erweitere: ...,/a,/A,/b/B,/c/C,...

So wäre zumindest das Slash-Großbuchstaben-Problem gelöst. Ich hoffe das String-Feld ist nicht auf so und so viele Zeichen begrenzt...

DOCH NICHT GELÖST!

Wenn ich die Schreibungskorrektur für die einzelnen Wörter und /BUCHSTABE getrennt voneinander in eine Aktion stelle, heben sie sich gegenseitig auf. Das kommt com $caps.
Die Buchstaben werden dann zwar nach dem / großgeschrieben, aber die ganzen Wörter sind weiterhin großgeschrieben.

Mache ich eine einzige Aktion davon, wird die Zeile ziemlich lang und hat nur die Wirkung, dass alle Buchstaben nach einem / kleingeschrieben sind. Irgendetwas übersehe ich ...

UND DOCH GELÖST!
$replace($caps(%title%), The , the , To , to , Of , of , From , from , In , in , Is , is , On , on , At , at , By , by , For , for , With , with , Be , be , Are , are , Am , am , Was , was , Were , were , Been , been , A , a , An , an , / ,/,/a,/A,/b,/B,/c,/C,/d,/D,/e,/E,/f,/F,/g,/G,/h,/H,/i,/I,/j,/J,/k,/K)

Das ist eine Zeile, nur bis /K macht Mp3TAG mit.

In der Aktionengruppe habe ich eine Neue Zeile angefangen, wiefolgt:

$replace(%title%,/l,/L,/m,/M,/n,/N,/o,/O,/p,/P,/q,/Q,/r,/R,/s,/S,/t,/T,/u,/U,/v,/V,/w,/W,/x,/X,/y,/Y,/z,/Z)

Jetzt ersetzt Mp3TAG sämtliche Kleinbuchstaben hinter einem / und schreibt die in der ersten Aktionszeile eingetragenen Wörter klein.

Aber danke Pone! Ohne deine Hilfe hätte ich es nie geschafft!

Geht viel kürzer:

$caps(%title%,/ ) macht Großbuchstaben nach / und Leerzeichen
oder
$caps2(%title%) lässt Großbuchstaben unverändert.

Für den Filter: " of" mit Anführungszeichen eingeben.

Danke für die kürzeren Varianten. Ich kann mich immer noch nicht so gut in das ganze hineindenken, aber ich werde mich dransetzen, eine kürzere Variante hinzubekommen. Wäre cool, wenn mir das gelingt. Also danke dafür, dano!

Danke auch für den Tipp mit "wort" beim Filter. Habe schon Klammern, etc. ausprobiert aber auf " bin ich nicht gekommen. Danke.^^

Aber wie suche ich im Filter nach dem Anführungszeichen " an sich? kopfkratz

Das geht über einen Umweg:

  • MATCHES "

Okay, da wäre ich im Leben nicht drauf gekommen. Aber das hilft mir ungemein weiter! Danke!

Ein Problem habe ich noch immer mit den Slashes. Das funktioniert zwar jetzt mit meinen megalangen Aktionen, aber ist da eine ( anstelle eines / und folgt auf die ( ein Buchstabe, wird er kleingemacht. Ich habe die Aktion angepasst ($caps(%title%), (a, (A,...), aber mich wundert nicht, dass er mir jetzt beim Ausführen in die Tags

[ SYNTAX ERROR IN FORMATTING STRING ]

reinhaut. Wie kann ich das umgehen? Bzw. wie kriege ich es hin, dass auch alle Buchstaben nach ( weiterhin großgeschrieben werden?

Ich könnte über einen Umweg mal versuchen, alle ( und ) in zwei andere Zeichen umzugestalten und danach die Aktionen ausführen. Danach dann die beiden Zeichen wieder in Klammern umwandeln lassen. Ob das geht, teste ich mal morgen. Jetzt muss ich aber in die Falle.

Super Forum hier! Hier wird einem wenigstens geholfen!

$caps(%title%,'('/ )
schreibt alle Buchstaben nach einer Klammer, einem Slash und einem Leerzeichen groß. Die Klammer muss man in einfache Anführungszeichen setzten weil sie sonst spezielle Funktionen in der Skriptsprache von Mp3Tag hat.

Danke dafür. Aber heute kam die Erleuchtung. Das Problem wird durch $caps2 gelöst. Tut mir leid, dass ich nicht früher darauf gekommen. bin und hier weiter gejammert habe.

Es gibt nur noch ein Problem, das bleibt. Wenn die Wörter, die ich durch $replace kleinschreiben lasse ( Of , of ,... [Mit Leerzeichen VOR und NACH dem Wort, damit die Worte als solches nur umbenannt werden]), werden aber nicht etwaige umbenannt, die als letztes Wort im TITLE stehen. Manche Stücke enden mit diesen Worten. Wenn ich jetzt $replace so ändere, dass nur das VORDERE Leerzeichen bleibt ( Of, of,...) werden logischerweise auch solche Worte kleingeschrieben, die mit den beiden Buchstaben anfangen (aus Offer wird dann offer, was ich wiederum nicht will^^). Gibt es noch eine Möglichkeit Mp3TAG zu vermitteln, dass er diese Wörter auch am Ende des Titles ändern soll?

Zur Not kann ich das noch von Hand machen, aber dann bräuchte ich wieder eine Eingabe im FILTER, mir nur die Title anzuzeigen, die mit den Worten ENDEN. " of" so zeigt mir ja alle an, wo es irgendwo im Title vorkommt. Das wäre zum Beispiel noch wichtig, einzelne ' zu entfernen, die nur am Ende eines Titles stehen, was ich auch noch irgendwie umbenennen muss ( ' wenn am Ende oder am Anfang des Titles). Gibt es da eine Eingabemöglichkeit?

Das geht schon, aber nur für $regexp und nicht für $replace.
Sag mir doch mal deinen momentan verwendeten Formatstring und ich wandle ihn dir um.

Hey! Das ist ein nettes Angebot von dir. Normalerweise würde ich das nicht annehmen, weil ihr sollt mir ja nicht die Arbeit abnehmen. Aber in diesem Fall bin ich nicht "versiert" genug, um mit den Strings und so korrekt umzugehen. Also totaler Laie. Ich bin schon froh, dass ich ein paar andere Kleinigkeiten mit Strings hinbekommen habe, aber das ging auch nur wegen eurer Hilfe.^^

Also mein String lautet (und funktioniert bis auf das letzte Wort im Title^^):

$replace($caps2(%title%), The , the ,XXX)

XXX steht für den Rest der Wörter, den füge ich 1:1 wieder für XXX ein. Also fals noch nach XXX vor der Klammer von dir kommt, weiß ich dann bescheid. VIELEN DANK FÜR DEINE HILFE! :slight_smile:

Versuch es doch mal hiermit:
$replace($caps($regexp($lower(%title%),\b(from|the|to|of|xxx)\b,@$1),'('/ ),@,)

Ich hab das jetzt ein bisschen umgewandelt. Mein Lösung hat jetzt Vor- und Nachteile.
Durch $caps statt $caps2 werden alle Wörter gleich behadelt, egal wie sie zuvor geschrieben wurden. OF wäre ja mit deiner Lösung auch nicht umgewandelt worden. Satzzeichen machen jetzt auch kein Problem, zuvor wären Of, oder (Of oder /Of nicht umgwandelt worden.

Das einzige Problem das bei meiner Lösung bleibt sind Wörter die groß gerschrieben werden sollen. Ein Titel wie "God Is A DJ" z.B wird zu "God is a Dj"

Ein ähnliches Problem wurde hier vor kurzem diskutiert:
/t/10579/1
einen Formatstring zu finden, der alle Fälle abdeckt ist wohl fast unmöglich weil es immer Titel mit komischen Schreibweisen gibt.

Vielen Dank!

Eine Frage dazu habe ich: XXX steht für den Rest, der so aufgebaut ist: " Wort1 , wort1 , Wort2 , wort2 "
Muss ich das jetzt umwandeln in "Wort1|wort1|Wort2|wort2"? Also anpassen?

Ich werde es dann mal ausprobieren.

Ich möchte nochmal kurz allgemein etwas zu meinem Problem loswerden:

1.) Einen Formatstring zu schreiben, der alles abdeckt, scheint unmöglich. Das habe ich schon gedacht, als ich das mit den Strings herausgefunden habe (am Wochenende).

2.) Vorher habe ich alles manuell gemacht und nur die Funktion TAG - DATEINAME verwendet, den FILTER und ein paar absolut minimale ERSETZEN-Aktionen. Nach so etwas wie diese Formatstrings habe ich schon immer gesucht, nur hat mich die Onlinehilfe erschlagen und ich habe kapituliert, bevor ich mir das alles genauer angesehen habe.

3.) Verstehe nur einen minimalen Bruchteil des ganzen möglichen. Aber für meine Zwecke bin ich mit bisherigen Strings vollkommen abgedeckt. Bis eben auf dieses Problem mit den zu ersetzenden Wörtern, wenn sie am Ende stehen.

Gibt es wirklich keine methode per FILTER danach zu suchen? Sprich, im FILTER etwas à la "* MATCHES \ X" einzutragen, und Mp3TAG mir alles anzeigt, das im Title mit dem Wort X endet? Dann könnte ich das wenigstens manuel machen, müsste aber nich 20'000 Title optisch danach prüfen.^^ (was für ein (Horror-)Gedanke!)

Bisher habe ich mir allerdings alles Restliche zusammengebaut. Ich habe verschiedene separate AKTIONEN erstellt, die - in der richtigen Reihenfolge ausgeführt - zum gewünschten Ergebnis führen. Dank eurer Hilfe zu dem $replace-String! Nur diese verd... Endwörter! zum verrückt werden^^

Mal ein Beispiel, wie es bisher aussieht (TITLE einer Datei):

Ist:

This Is It? /the StORm is CoMINg/the Alien ShiP FROM out Of Space/so It Is

Soll:

This is It?/The Storm is Coming/The Alien Ship from out of Space/So It is

mit bisherigen Aktionen wird:

This is It?/The Storm is Coming/The Alien Ship from Out of Space/So It Is

Man sieht also, nur noch eine Sache. XD

nein, im oben stehen den Formatstring musst du das wie folgt anpassen:
wort1|wort2|wort3|wort4|wort5|...
dabei muss jedes Wort nur einmal in kleiner Schreibweise genannt werden.

doch, hier der Filter:
%title% MATCHES (from|the|to|of|xxx)$

MATCHES ermöglicht regular expressions
(...|...) sind verschiedene Alternativen und das $ am Schluss bedeutet Zeilenende in den Regular Expressions

EDIT:
%title% MATCHES " (from|the|to|of|xxx)$"
ist wohl besser, das schließt Fälle aus die mit einem anderen Wort aber der selben Silbe enden.

Okay, SUPER! :slight_smile: Manuel mit dem Filter klappt wunderbar! Meine Augen danken dir!^^

Eine Sache ist noch immer: Ich habe

$replace($caps($regexp($lower(%title%),\b(from|the|to|of|xxx)\b,@$1),'('/ ),@,)

ausprobiert. Sie löst das letzte Problem, aber nicht das Problem /of -> soll /Of werden. Bleibt /of (auch /the soll /The werden, alle anderen Wörter, die ich in (...|...) setze auch. Also GROß nach /
Ich habe schon ein wenig herumexperimentiert, aber das klappt nicht. Trotz: ,'('/ )

Witzigerweise klappt $caps(%title%,'('/ ) jetzt auch nicht mehr. Heute Nachmittag gings noch.
$caps(%album%,'('/ ) geht aber. Kapier ich nicht. Egal.

Die lange mit $regexp ist perfekt, bis auf die Slash-Geschichte. :smiley:

EDIT:

Folgende Kombination führt zum gewünschten Ergebnis:

Ich habe folgende Aktionsgruppe erstellt:

Tag-Felder formatieren "TITLE": $caps(%title%,'('/ )
...lässt alles nach / groß schreiben, wie ich es wollte. Danke!

Tag-Felder formatieren "TITLE": $replace($caps2(%title%), The , the ,XXX)
...macht alle normal vorkommenden speziellen Wörter zu kleingeschriebenen. Danke!

Tag-Felder formatieren "TITLE": $replace(%title%, The/, the/,XXX)
...schreibt diese wieder groß, wenn die Ausnahme des drauffolgenden / auftritt. Danke!

Enden die TITLE auf eines der mit $replace umbenannten Wörter, passe ich sie manuell über %title% MATCHES " (x|y|z)$" an. Mit der Kleinigkeit an Handarbeit kann ich ganz gut leben.

Es sei denn, du hast noch etwas, was $regexp funktionieren lässt.^^

EDIT:

Kann man nicht %title% MATCHES " (from|the|to|of|xxx)$" noch anpassen und damit eine weitere Aktion in die Gruppe aufnehmen? Dass quasi zum Schluss nur noch das letzte Wort im TITLE einer jeden MP3-Datei überprüft und korrigiert werden. Ich versuche mal das zu basteln, ist zwar zum scheitern verurteilt, aber vielleicht weißt du ja wieder Rat, pone.^^

OK, ja, ich sehe da hab ich einen Fehler reingebracht. Ich hab vergessen dass die Wörter ja an bestimmten Stellen groß bleiben/werden sollen. Hier bitte:

$replace($caps($regexp($lower(%title%),( |'(')(from|the|to|of|xxx)\b,$1@$2),'('/ ),@,)

Zuvor hatte ich \b vor der Wörterliste stehen. Das ist jede Wortgrenze, also auch Zeilenanfang und alle Satzzeichen.
Jetzt steht da ( |'('). Das sind wieder verschiedene festgelegte Alternativen, nämlich ein Leerzeichen und eine Klammer (die noch komplizierter '(' geschrieben werden muss). Du kannst auch hier weitere Satzzeichen hinzufügen, nach denenen die Wörter klein geschrieben werden sollen.

Die erste Aktion dabe ist überflüssig, verwende einfach in der zweiten $caps2(%title%,'('/ ) oder $caps(%title%,'('/ ) - je nachem ob du lieber bestimmte Wörter wie DJ weiterhin groß geschrieben habe willst ($caps2) oder eventuel vorhandene Fehler wo der ganze Titel in Großbuchstaben steht korrigieren willst ($caps). Die Ergänzung mit ,'('/ lässt sich in beide Einbauen. Im Übrigen könnte man bei den zu korregierenden Wörtern auch Dj wieder in DJ umwandeln lassen.

Kommen in deinen Titeln sonst keine Satzzeichen vor? Wenn diese auf ein Wort aus der Liste folgen werden die Wörter mit dieser Lösung auch nicht erkannt.

Hiermit:
$if($eql(@,$regexp(%title%,.* (From|The|To|Of|Xxx)$,@)),$replace(%title%, The, the, Xxx, xxx),%title%)
Da is der Filter mit $if und $eql schon drin. Und immer dann wenn " (From|The|To|Of|Xxx)$" gefunden wird, wird $replace(%title%, The, the, Xxx, xxx) in den Titel geschrieben, ansonsten nur %title%. Bei diesen Titeln werden aber auch wieder Wörter klein geschrieben, die nur mit der betreffenden Silbe beginnen.

Dann lasse ich das aber lieber. Ich kann mich gut damit abfinden, wenn ich die Dateien per Filter anzeigen lassen muss, um die als letztes im TITLE stehenden Wörter manuell zu korrigieren. Alles andere klappt dafür jetzt perfekt. Aber ich weiß deine Mühe trotzdem seeeehr zu schätzen! Vielen Dank für deine Hilfe!