Wie kann man ein "multiline YEAR" reduzieren,


#1

Wenn ich das Tag-Feld YEAR im Tag-Panel wie folgt dargestellt bekomme:

2003\\\\2003gehe ich davon aus, dass das ein Multiline-Feld ist, richtig?

Gucke ich mit ALT-T (Erweiterte Tags), dann zeigt es mir YEAR 2003

YEAR 2003an.

Wie kann ich aus diesen 2 Feldern (oder einem Multiline-Feld) nun ein einziges "normales", numerisches Jahresfeld mit 4 Zahlen extrahieren? In diesem Beispiel also 2003.

Meine bisherigen Versuche scheitern, inkl. dem regulären Ausdruck \d{1,4}(?=\\)Wie könnte ich ein solches Feld möglichst automatisch mit einer Aktion bereinigen?


Source-Script für www.imdb.de
[X] ARTIST cannot be updated
#2

Du meinst ein "Multi-Value Field" ("mehrwertiges Tag-Feld" oder "multiples Tagfeld").
YEAR=2003
YEAR=2004
... zum Beispiel dargestellt als "2003\\2004".

Die Aktion "Doppelte Tag-Felder zusammenfassen" bringt die mehreren Werte in eine Zeile, zum Beispiel ... "2003#2004".
Dann kann man mit der Skriptsprache weitere Bearbeitungen vornehmen.

Siehe auch Manual "Skriptbefehle/Funktionen für Metadaten (inkl. multiple Tagfelder)" ...
$meta(YEAR,0) liefert den ersten Eintrag, zum Beispiel "2003".

Als Aktion "Tag-Feld formatieren" ...
Feld: YEAR
Formatstring: $meta(YEAR,0)

DD.20120529.1042.CEST


#3

Danke für die Rückmeldung. Entweder verstehe ich Dich nicht ganz oder das funktioniert bei mir nicht.

Versuch bitte mal folgendes:
Tippe bei einem Song im Feld Year den folgenden Wert ein: 2003//2003und speichere diese Angaben in den Song. Du solltest mit ALT-T zwei Einträge für YEAR sehen, beide male mit 2003 als Wert.

Der Formatstring $meta(YEAR,0) scheint damit aber nichts zu machen. Mindestens sehe ich keinen sichtbaren Unterschied.

Aber dank Deiner Info mit dem "Doppelte Tag-Felder zusammenfassen" kann ich die beiden Felder zu einem vereinen und dann den Wert nach dem definierbaren Trennzeichen wegschnippseln.


#4

Dein Vorschlag 2003//2003 wird ein normales Tag-Feld erzeugen.

Mit Eingabe von 2003\\2003 wird ein mehrwertiges Tag-Feld daraus.

DD.20120529.1227.CEST


#5

Sorry, Du hat natürlich Recht. Ich habe mich vertippt!
Die Eingabe muss 2003\\2003 sein.
Kannst DU daraus mit dem Formatstring $meta(YEAR,0) den ersten Teil extrahieren?


#6

Vorausgesetzt, dass das multi-value Tag-Feld in der Datei existiert, funktioniert das immer
(beim Test das Speichern nicht vergessen, mit Alt+T kontrollieren).

DD.20120529.1300.CEST


#7

Ich hänge meine Frage mal hier an, weil ich vor der gleichen Aufgabe stehe, Multi-Value-Tags gegebenenfalls zu entfernen.
Wie das mit YEAR geht, habe ich ja nun gelernt.
Ich würde mir aber gerne vorher mal die Tags ansehen, bevor ich sie eventuell entferne.

Kann man einen Filter setzen, der Multivalue-Tags erkennt?
Kann man eine mit einer Konvertierung Tag-Tag oder einer Aktion nur dann ein Multivalue-Tag löschen, wenn beide Values identisch sind?


#8

Siehe dort ...
How to filter duplicate fields?

"$if($eql($meta(YEAR,1),),0,1)" IS 1

Duplikate in META Tag-Feld löschen ... siehe dort ...
Merging several Tag Fields into CONTENTGROUP

Zum Beispiel ...
YEAR = 2003\\2003

... einzeilige Liste erzeugen ...
ITEMLIST = $meta_sep(YEAR,','))
==> 2003,2003

Regex anwenden ...

Aktionstyp 4: Ersetzen mit regulärem Ausdruck

Feld _________________: ITEMLIST
Regulärer Ausdruck ___: (?#COMMA- OR COMMA+SPACE- DELIMITED LIST)(?:(?<=,)|(?<=\A)|(?<=^))\s?([^,]),(?=.?(?<=,)\s?\1(?=,|\Z|$))
Treffer ersetzen durch:

[_] Groß-/Kleinschreibung berücksichtigen

Ergebnis soll sein ...
YEAR = 2003

Das ganze Tag-Feld löschen, wenn Duplikate enthalten sind, das willst du doch nicht wirklich, oder?

Alles in einem Ausdruck ...

$regexp($meta_sep(YEAR,','),'(?:(?<=,)|(?<=\A)|(?<=^))\s?([^,]*),(?=.*?(?<=,)\s?\1(?=,|\Z|$))',)

Vorher:
(multi-value) 2003\\2003
Nachher:
(single-value) 2003

Falls eine Ergebnis-Liste wieder in ein multi-value Tag-Feld überführt werden soll ...

$replace($regexp($meta_sep(YEAR,','),'(?:(?<=,)|(?<=\A)|(?<=^))\s?([^,]*),(?=.*?(?<=,)\s?\1(?=,|\Z|$))',),',','\\\\')

Vorher:
(multi-value) 2003\\2003\\2004\\2005\\2005
Nachher:
(multi-value) 2003\\2004\\2005

... oder ...

Vorher:
(multi-value) 2003\\2004\\2005\\2003\\2005
Nachher:
(multi-value) 2004\\2003\\2005

DD.20120718.1007.CEST


#9

Ich habe mit Aktion-Formatieren $meta(artist,0) & $meta(artist,1) 2 Artist-Felder zusammenfügen können. Was aber nicht funktioniert ist:
$meta(artist,0) & $meta(artist,1)[, $meta(artist,2)][, $meta(artist,3)][, $meta(artist,4)]
wenn ich die eckige Klammer benutze, d.h. für Felder die nur bei Bedarf benutzt werden.


#10

Manfred, das scheint eine Ausnahme zu sein oder ein Missverständnis oder beides.

Das ist kein Tag-Feld ...

$meta(ARTIST,0)

... sondern ein Aufruf der Funktion $meta, die das Tag-Feld ARTIST untersuchen soll.

[%ARTIST%]

... das wird funktionieren, sowohl für single-value, als auch für multi-value Tag-Feld ARTIST.

Eigentlich müsste die Eckige-Klammer-Funktion erweitert werden, so dass nicht nur ...
"mindestens ein verwendeter Platzhalter innerhalb der Klammern gefunden" wird,
sondern auch ...
"mindestens ein von der Funktion $meta gelieferter Inhalt innerhalb der Klammern existiert".

Ein ähnliches Thema im Zusammenhang mit der Funktion $if2 gab es schon einmal ...
$meta() values lack meaning inside $if()

DD.20120718.1935.CEST


#11

@DetlevD
Vielen Dank zunächst mal für die zusammengetragenen Lösungen im Zusammenhang mit diesem Thema. Ich habe einen ersten Blick darauf geworfen, einiges versucht anzuwenden und teilweise Schiffbruch erlitten, wahrscheinlich weil ich einige Verständnisprobleme habe. Ich muss mich wohl mal in mehr Ruhe damit auseinandersetzen, die ich im Moment nicht habe.

Dein Filtervorschlag klappt zumindest schon mal.

Danach stellte sich mir aber die Frage, wie ich den Inhalt des Year-Tags der gefilterten MP3s wirklich gut überschaubar zu sehen bekomme. Schließlich habe ich herausgefunden, dass ich in der Zeilenansicht lediglich $meta(year) statt %year% definieren muss, um beide Werte sichtbar zu machen.

Dein Vorschlag zur Beseitigung des 2. Wertes

klappt bei mir ebenso wie bei LyricsLover nicht.

Ich habe jedoch inzwischen gemerkt, dass es ja auch einen Aktionstyp "Doppelte Tagfelder entfernen" gibt, der wohl generell den 2. Wert entfernt.


#12

Bitteschöööön.

Ja das stimmt ...
"Ein Multivalue Tag Field kann nicht mit seinem eigenen ersten Wert alleine überschrieben werden."

Dieser Fehler ist gemeldet ...
/t/12626/1

Das Überschreiben des ersten Wertes (Index 0) in einem multi-value Tag-Feld funktioniert zurzeit erst ab dem zweiten Wert (Index 1) ...
Aktion: Tag-Feld formatieren
Feld: YEAR
Formatstring: $meta(YEAR,1)
... das funktioniert.

Mit zwei Aktionen "Tag-Feld formatieren" kommt man auch zu einer Lösung, zum Beispiel ...
Aktion: Tag-Feld formatieren
Feld: YEAR
Formatstring: ' '$left($meta_sep(YEAR,'\\'),$sub($strstr($meta_sep(YEAR,'\\'),'\\'),1))

Aktion: Tag-Feld formatieren
Feld: YEAR
Formatstring: $trim(%YEAR%)

Vorher (multi-value):
2005\\2002\\2003
Nachher (single-value):
2005

Spaltendefinition ...
Name: Jahr
Wert: $meta_sep(YEAR,'\\')
Feld: %YEAR%

Betreffend die Aktion "Doppelte Tag-Felder entfernen" werden alle multi-value Tag-Felder im gesamten Tag-Typ entfernt bzw. reduziert auf ihren jeweils ersten Wert.
Diese radikale Art der Bearbeitung ist wohl nicht immer erwünscht.

Betreffend die Aktion "Doppelte Tag-Felder zusammenfassen" ... siehe hier im Thread post #2.
Aus multi-value Tag-Feld ...
YEAR = "2003\\2004\\2005"
... und ...
Trennzeichen/Pattern = " - " ()
... wird ...
YEAR = "2003 - 2004 - 2005"

Wie gesagt ... und vorstehend demonstriert ... mit der Skriptsprache kann man weitere Bearbeitungen vornehmen.

Oder man benutzt die Aktionen, zum Beispiel im Anschluss an "Doppelte Tag-Felder zusammenfassen" die Aktion "Tag-Felder importieren".
Quellformat: %YEAR%
Formatstring/Pattern: %YEAR% - %DUMMY%
... ergibt ...
YEAR = "2003"

DD.20120721.1306.CEST

Anmerkung:
"Ein Multivalue Tag Field kann nicht mit seinem eigenen ersten Wert alleine überschrieben werden."
So funktioniert es ... $meta(YEAR,0)'\\'

DD.20140215.2018.CET