Tags mit identischem Inhalt erkennen und auf 1 Auflistung reduzieren?

Aus einem Websources Script wird folgende Situation erzeugt:

Die Tags PERSONELL und SOLOIST enthalten in speziellen Situationen mehrfache Einträge für den gleichen Künstler (und das gleiche Instrument):

Wenn ich nun die Aktion "Doppelte Tag-Felder entfernen" benutze, dann endet das so:

Ich möchte aber nur die "doppelten" Einträge löschen, damit also am Schluss folgendes (für dieses Beispiel manuell korrigiertes) Resultat übrigbleibt:

Wie kann ich das lösen?

Ich weiß nicht, ob das ein Zufallstreffer ist:
Ich habe einen ARTIST mit
"Insect Jazz\\Artist 2\\Insect Jazz\\Artist 2"
Und wenn ich auf den diesen Ausdruck mit "Konverter>Tag-Tag" loslasse:

$mid($meta_sep(artist,;),$strstr($meta_sep(artist,;),$meta(artist,0)),$add($len('$meta_sep(artist,;)'),1))
dann ist das Ergebnis in der Vorschau:
Insect Jazz;Artist 2
Also keine Dubletten mehr ...
Meine ursprüngliche Idee war, da noch ein $replace() drumrum zu machen, wo dann $meta(artist,0) ab Position "1. Treffer +1" ersetzt wird durch nichts ... das scheint nicht nötig zu sein?!

1 Like

DAS sieht doch schon mal super aus, vielen Dank!

Wenn ich Deinen Formstring auf
$mid($meta_sep(SOLOIST,\\),$strstr($meta_sep(SOLOIST,\\),$meta(SOLOIST,0)),$add($len('$meta_sep(SOLOIST,\\)'),1))
abändere, bekomme ich sogar wieder die einzelnen "deduplizierten" Tags in einem Rutsch.

Ich teste das mal noch weiter und würde allfällige Nebenwirkungen hier melden.

Nochmals Danke!

Update:
Wenn sich die Länge der Einträge in den Tags verändert, scheint das nicht mehr zu klappen, z.B.

Ich muss das noch genauer analysieren.

Ich vermute mal, mein Ansatz war zu naiv. Und ich hatte auch nicht wirklich mit dem Ergebnis gerechnet, so dass das ein Zufallstreffer war, wie vermutet.

DetlevD hat mal eine Liste mit Duplikaten reduziert:

Ich bin mir aber nicht sicher, ob die Formatierung noch stimmt (vielleicht kann der @Florian mal reingucken und das bereinigen?)

Danke für Deine Bemühungen @ohrenkino.

Ich versuche es aktuell mit diesem regulären Ausdruck:
$repl($regexp($meta(SOLOIST),'(\b[A-Za-zÀ-ž]+\b),? ?-? ?(?=.*\1)',),', ',\\)

Erklärung:
$meta(SOLOIST) - Damit werden alle Inhalte aus allen SOLOIST Tags mit einem Komma Leerschlag getrennt aneinander gereiht

$regexp(Aneinanderreihung,'(\b[A-Za-zÀ-ž]+\b),? ?-? ?(?=.*\1)',) - Damit werden Worte gesucht die aus GROSS- oder kleinbuchstaben oder aus Umlauten bestehen, welche von einem Komma und/oder Leerschlag und/oder Bindestrich getrennt werden. Das Resultat daraus wird mit einem "Positive Lookahead" weiter hinten in der Zeichenfolge gesucht um festzustellen, ob eben diese Worte später nochmal vorkommen. Wenn ja, wird es durch nichts ersetzt, also entfernt.

$repl(Übrigbleibende Kommas und Leerschläge)', ',\\)
Die Kommas und Leerschläge die zusammen mit den Worten übrigbleiben, werden zum Abschluss mit zwei Backslashes \\ ersetzt, was in Mp3tag zu neuen Multi-Value-Feldern führt.

Tests laufen um festzustellen, was mit Kommas in Namen geschehen würde, bzw. mit exotischen Namen wie Пётр Ильич Чайковский (Pyotr Ilyich Tchaikovsky)

Update #1:
Der liebe Pyotr sprengt den Regex mit seinen kyrillischen Buchstaben natürlich wieder mal :wink:
Man müsste für Kyrillisch [A-Za-zÀ-žа-яА-Я] als Buchstabenset verwenden. Bisher fand ich noch keine Möglichkeit die sonst übliche Schreibweise [\p{L}] zu verwenden (jeder Buchstabe in jeder Sprache, ausser eben den Sonderzeichen)

Update #2:
Am erfolgreichsten funktioniert bisher
$repl($regexp($meta(SOLOIST),'(\b\w+\b),? ?-? ?(?=.*\1)',),', ',\\)
anscheinend umfasst \w in Mp3tag wesentlich mehr Sprachen und Buchstaben als in anderen RegEx-Dialekten wo es für [a-zA-Z0-9_] steht.

Update #3:
Eine noch kürzere Variante ist:
$regexp($meta_sep(SOLOIST,\\),'(\b\w+\b),? ?-? ?(?=.*\1)',)

In diesem Post wird eine funktionierende Regexp genannt - aber die sieht mir mit dem Smiley da drin nicht richtig wiedergegeben aus:

Ja, hab die Formatierung über die Datenbank angepasst und das HTML für die Beiträge neu generiert.

2 Likes