Probleme mit Tag-Feld formatieren

Hallo zusammen,

ich habe ein wenig Probleme mit Tag-Feld formatieren.

Ich benutze folgenden Formatstring:

$replace(%artist%,Ac-Dc ,ACDC ,AC-DC ,ACDC ,Acdc ,ACDC ,Abba ,ABBA ,A2b ,A2B ,Obir ,OBir ,Abc ,ABC ,Atb ,ATB )

Jedoch wird dieser nicht ausgeführt. Kann mir hier einer von euch helfen????

Dann habe ich noch eine Frage wie sieht es mit langen Namen aus wie:

Anna Maria Zimmermann ---> Anna-Maria Zimmermann

funktioniert dieses auch mit dem Formatstring???

Schon einmal Danke für eure Hilfe.

Die Funktion $replace() funktioniert eigentlich korrekt.
Das Problem wird wohl bei der Anwendung zu suchen sein.
Es stellt sich die Frage, warum hinter den Artistennamen noch ein Leerzeichen steht.
Wenn nämlich im Tag-Feld ARTIST am Ende des Textes ein Leerzeichen nicht steht, dann kann die Funktion $replace() eine Übereinstimmung nicht feststellen und das gewünschte Ersetzen findet nicht statt.

Wenn man viele Namen auf korrekte Rechtschreibung prüfen will, dann kann man das mit Mp3tag auf unterschiedliche Weisen tun, siehe folgende Beispiele.

Beispiel 1.
Aktion: Tag-Feld formatieren
Feld: ARTIST
Formatstring:

$replace(%ARTIST%,'Ac-Dc','ACDC','AC-DC','ACDC','Acdc','ACDC','Abba','ABBA','A2b','A2B','Obir','OBir','Abc','ABC','Atb','ATB','Anna Maria Zimmermann','Anna-Maria Zimmermann')

Beispiel 2.

Anfang Aktionengruppe Test_2011#20111117.DJBolly.Artist.SpellCheck.1

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $trim(%ARTIST%)

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $replace(%ARTIST%,'Ac-Dc','ACDC','AC-DC','ACDC','Acdc','ACDC')

Aktion #3
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $replace(%ARTIST%,'Abba','ABBA')

Aktion #4
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $replace(%ARTIST%,'A2b','A2B')

Aktion #5
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $replace(%ARTIST%,'Obir','OBir')

Aktion #6
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $replace(%ARTIST%,'Abc','ABC')

Aktion #7
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $replace(%ARTIST%,'Atb','ATB')

Aktion #8
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $replace(%ARTIST%,'Anna÷Maria÷Zimmermann','Anna-Maria÷Zimmermann','anna÷maria÷zimmermann','Anna-Maria÷Zimmermann')

Hinweis: Ersetze jedes ÷ Sonderzeichen durch ein Leerzeichen.
Ende Aktionengruppe Test_2011#20111117.DJBolly.Artist.SpellCheck.1 (8 Aktionen)

Beispiel 3.
Anlegen einer normalen Textdatei "Artist.SpellCheck.txt" mit dem Inhalt ...

Ac-Dc===ACDC
AC-DC===ACDC
Acdc===ACDC
Abba===ABBA
A2b===A2B
Obir===OBir
Abc===ABC
Atb===ATB
Anna Maria Zimmermann===Anna-Maria Zimmermann
Anfang Aktionengruppe Test_2011#20111117.DJBolly.Artist.SpellCheck.2

Aktion #1
Aktionstyp 14: Textdatei importieren
Feld ____: ARTIST_SPELLCHECK
Dateiname: F:\TEMP\Artist.SpellCheck.txt

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST_NEW
Formatstring: $regexp(%ARTIST_SPELLCHECK%,'.\R?'$trim(%ARTIST%)'===(.+?)\R.','$1')

Aktion #3
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $if($eql(%ARTIST_NEW%,%ARTIST_SPELLCHECK%),%ARTIST%,%ARTIST_NEW%)

Aktion #4
Aktionstyp 9: Tagfelder entfernen
Folgende Tagfelder entfernen (mit Semikolon getrennt): ARTIST_NEW;ARTIST_SPELLCHECK

Ende Aktionengruppe Test_2011#20111117.DJBolly.Artist.SpellCheck.2 (4 Aktionen)

Du kannst ausprobieren, was bequem zum Erfolg führt.

DD.20111117.1107.CET

QUOTE (DetlevD @ Nov 17 2011, 10:19) <{POST_SNAPBACK}>
Beispiel 3.

Anlegen einer normalen Textdatei "Artist.SpellCheck.txt" mit dem Inhalt ...

Ac-Dc===ACDC
AC-DC===ACDC
Acdc===ACDC
Abba===ABBA
A2b===A2B
Obir===OBir
Abc===ABC
Atb===ATB
Anna Maria Zimmermann===Anna-Maria Zimmermann

[font="Courier New"][size=1]Anfang Aktionengruppe Test_2011#20111117.DJBolly.Artist.SpellCheck.2

Aktion #1
Aktionstyp 14: Textdatei importieren
Feld ____: ARTIST_SPELLCHECK
Dateiname: F:\TEMP\Artist.SpellCheck.txt

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST_NEW
Formatstring: $regexp(%ARTIST_SPELLCHECK%,'.\R?'$trim(%ARTIST%)'===(.+?)\R.','$1')

Aktion #3
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $if($eql(%ARTIST_NEW%,%ARTIST_SPELLCHECK%),%ARTIST%,%ARTIST_NEW%)

Aktion #4
Aktionstyp 9: Tagfelder entfernen
Folgende Tagfelder entfernen (mit Semikolon getrennt): ARTIST_NEW;ARTIST_SPELLCHECK

Hallo DetlevD,
sorry das ich erst jetzt schreibe, aber ich hatte beruflich sehr viel zu tun.
Also dein 3. Beispiel gefällt mir sehr gut und konnte es Dank deiner Hilfe auch umsetzen.
Habe da aber noch ein Paar Fragen.

1.) Beispiel wenn im Artist "vs" vorkommt, kann diese Funktion dieses auch ändern in "VS."?
2.) Wie kann ich dieses auch für den Titel umsetzen? Ich denke nur umschreiben geht wohl nicht. Bin leider in diesem Bereich noch Anfänger.

Liebe Grüße

Olly

Zu 1.
Es geht hier um das lateinische Wort versus (vs.): gegen, im Sinne von gegenüber gestellt.
Es gibt mehrere Möglichkeiten.

Wie oben Post#2, Methode#3 (externe Textdatei) ...
Fittali Klotzki VS D'fitt Haie===Vitali Klitschko vs. David Haye

Wie oben Post#2, Methode#1 ...

$replace(%ARTIST%,' VS ',' vs. ',' vS ',' vs. ',' Vs ',' vs. ',' vs ',' vs. ',' VS. ',' vs. ',' vS. ',' vs. ',' Vs. ',' vs. ')

Von:
Vitali Klitschko VS David Haye
Vitali Klitschko vS David Haye
Vitali Klitschko Vs David Haye
Vitali Klitschko vs David Haye
Vitali Klitschko VS. David Haye
Vitali Klitschko vS. David Haye
Vitali Klitschko Vs. David Haye
Nach:
Vitali Klitschko vs. David Haye

oder ...
Aktion: Tag-Feld formatieren
Feld: ARTIST
Formatstring: $regexp(%ARTIST%,'\svs.?\s',' vs. ',1)

Zu 2.
Mp3tag stellt in den Benutzerdialogen die Standardnamen von Tag-Feldern bzw. von Platzhaltern in Auswahllisten zur Verfügung.
Im Manual gibt es im Abschnitt "Namen und Mapping von ID3v2/WMA/MP4 Tag-Feldern" eine Übersicht über die in Mp3tag unterstützten Tag-Felder.
Der Titel wird gespeichert im Tag-Feld TITLE und der Inhalt-Platzhalter heißt %TITLE%.
Darüber hinaus kann man auch selbst definierte Tag-Felder anlegen.

DD.20111125.0816.CET

hallo,

ich hätt da auch mal ne frage wenn du schon so gut bescheid weisst :slight_smile:
wenn ich mehrere tracks umbennen will, jedoch der erste ohne (in klammer gesetzt) zusatzinfos hat und der nachfolgende jedoch schon erkennt das programm diese nicht.
das bedeutet, es muss an erster stelle, wenn alle anderen nachfolgenden titel auch in klammer gesetzte infos haben, ein titel stehen der diese infos beinhaltet :

Pascal F.E.O.S. - Km5 (Original Mix)
Pascal F.E.O.S. - Km5
so werden alle nachfolgenden mit-getagt, auch wenn zwischendrin titel ohne klammer sind, die werden ausgelassen......

Pascal F.E.O.S. - Km5
Pascal F.E.O.S. - Km5 (Original Mix)
ist die anordnung wie hier dargestellt, werden nirgendwo Klammern gesetzt. das möchte ich aber nicht. ich möchte, dass jeder track der ne klammer besitzt auch so in den tags geschrieben wird.

Vielleicht ist eine Einstellung, aber ich hab schon so vieles probiert u mache es daher immer etwas umständlicher.

für eine hilfe danke ich schon mal sehr :slight_smile:

Hallo thedjslowhand, dein Problem passt nicht zur Fragestellung von OP DJ Bolly in diesem Thread, außerdem verstehe ich deine Schilderung nicht, es ist besser, du machst dafür einen eigenen Thread auf und schilderst das Problem noch einmal mit anderen Worten.

DD.20111125.1419.CET

Hallo DetlevD,

ich habe da ein Problem noch mit den Interpreten.

Wenn ich Beispiel dieses benutze:

Aktionstyp : Tagfeld formatieren
Feld ______: ARTIST
Formatstring: $replace(%ARTIST%,'Amigos','Die Amigos','Bonny M','Bonny M.')

Habe ich danach folgende Ergebnisse:

Bonny M ---> Bonny M. (Dieses ist ja richtig)
Bonny M. ---> Bonny M.. (Dieses Ergebniss ist ja falsch)

Amigos ---> Die Amigos (Dieses ist ja richtig)
Die Amigos ---> Die Die Amigos (Dieses Ergebniss ist ja falsch)

Wie kann ich dieses verhindern, das mir solche Fehler nicht passieren?

Grüße

Olly

Am besten ist es, die Aktion nur einmal laufen zu lassen.

Ansonsten musst du das Tag-Feld befragen, ob es bereits den ordnungsgemäßen Inhalt hat oder nicht, wenn ja, dann braucht nichts getan zu werden, wenn nein, dann muss der Inhalt ausgewechselt werden.

Weil die Funktion $replace immer ein globales Ersetzen in der Zeichenkette durchführt, wird bei jedem Aufruf jeder gefundene Treffer ersetzt, und beim wiederholten Aufruf geschieht es dann wieder so.
So wird aus 'Amigos' dann 'Die Amigos', dann 'Die Die Amigos', dann 'Die Die Die Amigos' usw.
Oder aus 'Zwei Amigos' wird 'Zwei Die Amigos'.
Oder aus 'Amigos am Amigostrand' wird 'Die Amigos am Die Amigostrand'.

Wenn aber der Suchtext in Begrenzerzeichen eingeschlossen ist, so dass er sich vom Ersatztext unterscheidet, dann verschwindet das Problem.

Anfang Aktionengruppe Test_2011#20111129.DJBolly.Replace

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST_NEW
Formatstring: $replace('~'%ARTIST%'~','~Amigos~','Die÷Amigos','~Bonny÷M~','Bonny÷M.')

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $if($eql('~'%ARTIST%'~',%ARTIST_NEW%),%ARTIST%,%ARTIST_NEW%)

Aktion #3
Aktionstyp 9: Tagfelder entfernen
Folgende Tagfelder entfernen (mit Semikolon getrennt): ARTIST_NEW

Hinweis: Ersetze jedes ÷ Sonderzeichen durch ein Leerzeichen.
Ende Aktionengruppe Test_2011#20111129.DJBolly.Replace (3 Aktionen)

DD.20111129.0749.CET

Hi DelevD,

wenn der Suchbegriff nun aber nur die packen würde, die komplett so im Feld stehen, also
^Amigos$
oder
^Boney M$,
dann müssten "Die Amigos" nicht als Treffer gelten...
(Aber wie mache ich das mit $replace...?)

So ich habe das jetzt anders gelöst und es geht auch.

$replace(%ARTIST%,'Die Hoehner','A33','De Hoehner','A33','Hoehner','A33','A33','De Hoehner')

$replace(%ARTIST%,'Boney M.','A30','Bonny M.','A30','Bonny M','A30','Bonnym','A30','Boney M','A30','A30','Bonny M.')

Habe mir dabei gedacht das erst einmal alle Schreibweisen zu einer gemacht werden, wie im Code bei den Hoehner. Dort werden alle Namenvarianten zu A33 und ganz zum Schluss wird dann aus A33 De Hoehner.

Achtung: Die Reihenfolge sollte so wie hier eingehalten werden.

Ich denke das würde einige hier auch helfen.

Hmm ... blinded by the light?
Eine einfache Lösung hatte ich doch angeboten als "Aktionengruppe Test_2011#20111129.DJBolly.Replace".
Schau' noch 'mal genau hin - oder was meinst du, was man anders machen könnte?

DD.20111129.2309.CET

Hmm ... ich denke, damit hast du das Problem nur auf eine andere Ebene vertagt, aber nicht gelöst.
Bei deinem Entwurf dürfen dann eben A3 oder A330 nicht vorkommen.

Schaue die angebotene Aktionengruppe "Test_2011#20111129.DJBolly.Replace" noch einmal genau an, und probiere sie aus, sie sollte eigentlich perfekt funktionieren.

DD.20111129.2114.CET

Upps... ich habe leider diesen Artikel nicht gelesen bis auf "Am besten ist es, die Aktion nur einmal laufen zu lassen." Weil das nur da stand habe ich mir mal Gedanken gemacht es anders zu machen.

In der Zwieschenzeit habe ich es ausprobiert und es ist einwandfrei. Danke DetlevD.

Aber wenn eines gelöst ist, kommt das nächste Problem. Aber der Aufbau ist der gleiche wie mit den Zahlen.

Schau mal:

$replace(%TITLE%,'It''s','B32','Its','B32','It´s','B32','It`s','B32','B32','It''s') (funktioniert nicht)

$replace(%TITLE%,'Pack''','B33','Pack','B33','B33','Pack''')

$replace(%TITLE%,'Fuehl''','B34','Fuehl','B34','B34','Fuehl''')

$replace(%TITLE%,'Traeum''','B35','Traeum','B35','B35','Traeum''')

$replace(%TITLE%,'Lass''','B36','Lass','B36','B36','Lass''')

$replace(%TITLE%,'Don''t','B37','Dont','B37','B37','Don''t') (funktioniert nicht)

$replace(%TITLE%,'Geh''','B38','Geh','B38','B38','Geh''')

$replace(%TITLE%,'Fahr''','B39','Fahr','B39','B39','Fahr''')

$replace(%TITLE%,'Mach''','B40','Mach','B40','B40','Mach''')

$replace(%TITLE%,'D''r','B41','D´r','B41','D`r','B41','B41','D''r') (funktioniert nicht)

$replace(%TITLE%,'I''m','B42','I´m','B42','I`m','B42','B42','I''m') (funktioniert nicht)

Wo in Klammern funktioniert nicht steht diese Aktionen gehen nicht. Das Problem liegt wohl an `´ diesen Zeichen.
Hast Du dafür auch eine Lösung?

Grüße

Olly

Dort habe ich schon einmal versucht zu erklären, wie es sich mit dem Apostroph in der Skriptsprache von Mp3tag verhält ...
mit _DIRECTORY Überordner umbenennen (zb bei 2xCD)

Das sollte funktionieren:

$replace(%TITLE%,'I''''m','B42','I´m','B42','I`m','B42','B42','I''''m')

Weil die Mp3tag Skriptsprache sehr lose Regeln hat, erzeugen zum Beispiel die beiden folgenden Anweisungen dasselbe Ergebnis:

$replace(%TITLE%,'D''''r','B41','D´r','B41','D`r','B41','B41','D''''r') $replace(%TITLE%,D''r,B41,D´r,B41,D`r,B41,B41,D''r)

Übrigens ... weil die Aktionen ja nacheinander ausgeführt werden, kann bei dieser Methode des Ersetzens mittels temporärem Platzhalter immer wieder derselbe, aber eindeutige, Platzhalter verwendet werden.
Beispiel ...

$replace(%TITLE%,'Pack''','«»','Pack','«»','«»','Pack''') $replace(%TITLE%,'Fuehl''','«»','Fuehl','«»','«»','Fuehl''') $replace(%TITLE%,'Traeum''','«»','Traeum','«»','«»','Traeum''') $replace(%TITLE%,'Lass''','«»','Lass','«»','«»','Lass''') $replace(%TITLE%,'Don''''t','«»','Dont','«»','«»','Don''''t') $replace(%TITLE%,'Geh''','«»','Geh','«»','«»','Geh''') $replace(%TITLE%,'Fahr''','«»','Fahr','«»','«»','Fahr''') $replace(%TITLE%,'Mach''','«»','Mach','«»','«»','Mach''') $replace(%TITLE%,'D''''r','«»','D´r','«»','D`r','«»','«»','D''''r') $replace(%TITLE%,'I''''m','«»','I´m','«»','I`m','«»','«»','I''''m')

Übrigens ... kann man alle vorstehenden Fälle auch irgendwie erledigen mit der folgenden Anweisung ...

$regexp(%TITLE%,'(^|.)[`´](.|$)','$1''''$2')

... oder einfach ...

$replace(%TITLE%,'´','','`','')

Von:
(MachFahr Geh) (Mach Fahr Geh) (Mach´ Fahr´Geh´) (Mach' Fahr' Geh') (Its Dr Im) (It´s D´r I´m) (It's D'r I'm)
Nach:
(Mach' Fahr' Geh') (Mach Fahr Geh) (Mach' Fahr'Geh') (Mach' Fahr' Geh') (It's D'r I'm) (It's D'r I'm) (It's D'r I'm)

DD.20111204.1005.CET

So sehr ich die Lösung mit den wilden Folgen von Zeichen bewundere, erschließt mir noch nicht so ganz die Notwendigkeit zur Komplexität des Ansatzes.
die beiden Zeichen ´ und `sind Accents, die eigentlich nur mit einem Vokal vorkommen können, also z.B. é oder à.
Das ' (auf der deutschen Tastatur über den #) ist das Apostroph und damit das einzig zulässige Auslassungszeichen.
Wenn also irgendein Häkelchen hinter einem Wort steht, das kein Apostroph, sondern ein Accent ist, dann müsste das mit ganz einfachem Suchen/ersetzen gehen, ohne dass da auch noch Wortbestandteile genannt werden, denn ein Accent, der alleine steht, ist ein Erfassungsfehler und müsste immer zum Apostroph werden (wenn man denn so pingelig sein will) ...
Das gilt auch für die englischen "don't" und "ain't" usw.

Wo liegt jetzt meine Ignoranz?

ohrenkino, diesen Sachverhalt verstehe ich genau so wie du.
Deshalb war meine letzte Empfehlung $replace(%TITLE%,'´','','`',''), was die freistehenden Akzente durch das einfache Apostroph ersetzt.

DD.20111204.1106.CET

Danke. Das beruhigt mich. Aber wer bin ich schon!? midlife crisis

`Confused Character´ oder doch nur 'ne ‘Herbstdepression’?

Commonly Confused Characters ...
http://www.cs.sfu.ca/~ggbaker/reference/characters/

DD.20111204.1232.CET

Ich glaube ich bin in den Weihnachtsferien schon. :rolleyes:

Aktion #1
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST_NEW
Formatstring: $replace('~'%ARTIST%'~','~C.c.catch~','C.C.÷Catch','~C.c.÷Catsch~','C.C.÷Catsch')

Aktion #2
Aktionstyp 5: Tagfeld formatieren
Feld _______: ARTIST
Formatstring: $if($eql('~'%ARTIST%'~',%ARTIST_NEW%),%ARTIST%,%ARTIST_NEW%)

Aktion #3
Aktionstyp 9: Tagfelder entfernen
Folgende Tagfelder entfernen (mit Semikolon getrennt): ARTIST_NEW

Wenn ich das durchlaufen lasse bekomme ich trotzdem als Ergebnis C.c. Catch raus. Ebenso wie bei G.g. Anderson.

Was mach ich falsch?

Vielleicht ... hast du den neuen Fall "C.c. Catch" in der Replace-Funktion nicht eingetragen?
Und beachte "Hinweis: Ersetze jedes ÷ Sonderzeichen durch ein Leerzeichen."

DD.20151215.1628.CET