IPB

Welcome Guest ( Log In | Register )

> Hinweise!

Bitte vor dem erstellen eines Beitrag unbedingt den Beitrag Bitte zuerst lesen! lesen.

Lesen Sie auch die allgemeinen Nutzungsbestimmungen dieses Forums.
 
Abkürzungen: (werden von Moderatoren/Administratoren vergeben)

 
Reply to this topicStart new topic
> [F] $meta() und [] bleibt leer in Konverter>Tag-Dateiname, Die eckigen Klammern bekommen anscheinend nie einen Wert
ohrenkino
post Jan 2 2017, 09:55
Post #1


Member


Group: Full Members
Posts: 8458
Joined: 9-December 09
From: Norddeutschland / Northern Germany
Member No.: 11458
Mp3tag Version: 2.81c



Man nehme eine Datei mit einem multi-value Feld und versuche den Inhalt der Felder per $meta() auszugeben - sofern denn Daten da sind:
%artist% - %title%[ $meta_sep(mixartist,; )]

Der Ausdruck in den eckigen Klammern wird anscheinend nie gefüllt.
Bug oder Feature?


--------------------
42 - wie war die Frage / what was the question / quelle était la question
Go to the top of the page
 
+Quote Post
DetlevD
post Jan 2 2017, 13:00
Post #2


Member


Group: Full Members
Posts: 6449
Joined: 26-May 06
From: Wuppertal, Germany, Planet Earth
Member No.: 3194
Mp3tag Version: 2.81c



QUOTE (ohrenkino @ Jan 2 2017, 09:55) *
... multi-value Feld und versuche den Inhalt der Felder per $meta() auszugeben - sofern denn Daten da sind:
%artist% - %title%[ $meta_sep(mixartist,; )]
Der Ausdruck in den eckigen Klammern wird anscheinend nie gefüllt.
Bug oder Feature?

Die "Eckige-Klammer-Funktion" ist so definiert:
[...] Text zwischen eckigen Klammern wird nur ausgegeben, wenn mindestens ein innerhalb der Klammern verwendeter Platzhalter gefunden wurde.

Weil im Beispielausdruck ... [ $meta_sep(mixartist,; )] ...
sichtbar ein Feld-Platzhalter sich nicht befindet, sondern nur ein Feld-Name, ...
so kann auch nichts ausgegeben werden.
Somit ist das Ergebnis per definitionem nachvollziehbar.

Aber wenn so etwas speziell für die Funktion $meta_sep doch möglich gemacht werden könnte, dann wäre das vielleicht sogar ganz brauchbar.


In der Zwischenzeit kann man es so machen ...
(ohne die Funktion der eckigen Klammern):

$if(%MIXARTIST%,$meta_sep(MIXARTIST,'; '),)
... oder so ...
$iflonger($meta(MIXARTIST,1),0,$meta_sep(MIXARTIST,'; '),)

DD.20170102.1327.CET

This post has been edited by DetlevD: Jan 3 2017, 09:35


--------------------
* Beyond that, don't ask, when you don't know what to do with the answer. *
♥ home is where the heart is ♥
Go to the top of the page
 
+Quote Post
ohrenkino
post Jan 2 2017, 15:29
Post #3


Member


Group: Full Members
Posts: 8458
Joined: 9-December 09
From: Norddeutschland / Northern Germany
Member No.: 11458
Mp3tag Version: 2.81c



ZITAT(DetlevD @ Jan 2 2017, 13:00) *
Die "Eckige-Klammer-Funktion" ist so definiert:
[...] Text zwischen eckigen Klammern wird nur ausgegeben, wenn mindestens ein innerhalb der Klammern verwendeter Platzhalter gefunden wurde.

Weil im Beispielausdruck ... [ $meta_sep(mixartist,; )] ...
sichtbar ein Feld-Platzhalter sich nicht befindet, sondern nur ein Feld-Name, ...
so kann auch nichts ausgegeben werden.
Somit ist das Ergebnis per definitionem nachvollziehbar.

Nun gut ... das mit dem Feld-Platzhalter ist aber schon gewöhnungsbedürftig, denn
%albumartist% _ %album% _ [$num(%track%,3)] _ %title%
funktioniert und gibt nur dann eine 3-stellige Nummer aus, wenn in TRACK auch was drin steht.
Dass nun ausgerechnet die fehlenden %-Zeichen dafür verantwortlich sein sollen, dass nichts ausgegeben wird, $meta() aber ansonsten einen String produziert und auch das Feld mit Daten gefüllt ist, führt(e) zumindest mich aufs Glatteis.

Ach ja: %albumartist% _ %album% _ [$iflonger($meta(MIXARTIST,1),0,$meta_sep(MIXARTIST,'; '),) _ ]%title%
(also mit eckigen Klammern) gibt nichts vom MIXARTIST aus,
%albumartist% _ %album% _ [$if(%MIXARTIST%,$meta_sep(MIXARTIST,'; '),)] _ %title%
gibt es aus, da hier %MIXARTIST% vorkommt.
Beide Ausdrücke sind übrigens syntaktisch richtig und zeigen keinen Fehler.
Das ist und bleibt für mich spitzfindig (und damit nicht überraschungsfrei und damit ein Bug, auch wenn es mit viel Kenntnis eine Umgehungsmöglichkeit gibt).


--------------------
42 - wie war die Frage / what was the question / quelle était la question
Go to the top of the page
 
+Quote Post
DetlevD
post Jan 2 2017, 17:30
Post #4


Member


Group: Full Members
Posts: 6449
Joined: 26-May 06
From: Wuppertal, Germany, Planet Earth
Member No.: 3194
Mp3tag Version: 2.81c



QUOTE (ohrenkino @ Jan 2 2017, 15:29) *
... [$num(%track%,3)] ... funktioniert und gibt nur dann eine 3-stellige Nummer aus, wenn in TRACK auch was drin steht. ...

Ja so ist es; es funktioniert, wenn %TRACK% als Tagfeldinhalt-Platzhalter bzw. als Inhaltsoperator (content operator) einen Wert liefert, der im Feld TRACK enthalten ist.

QUOTE (ohrenkino @ Jan 2 2017, 15:29) *
... Ach ja: ...
[$iflonger($meta(MIXARTIST,1),0,$meta_sep(MIXARTIST,'; '),) _ ] ...
(also mit eckigen Klammern) gibt nichts vom MIXARTIST aus ...

Ja, genau erkannt, denn innerhalb der Funktion mit den eckigen Klammern ist kein Tagfeldinhalt-Platzhalter zu sehen, sondern nur Tagfeldnamen, womit wir wieder bei der Anfangssituation sind.
Außerdem ist hier die "Eckige-Klammer-Funktion" falsch angewendet und überflüssig, weil der Formatstring die Sonderfunktion der eckigen Klammern bereits simuliert.
Nur ohne die eckigen Klammern wird die passende Ausgabe erzeugt.

QUOTE (ohrenkino @ Jan 2 2017, 15:29) *
... [$if(%MIXARTIST%,$meta_sep(MIXARTIST,'; '),)]

In diesem Fall sind die eckigen Klammern überflüssig, denn sie tun nichts dazu und ändern auch nichts am Ergebnis des Formatstrings.

Interessant ist aber, dass der eine Tagfeldinhalt-Platzhalter %MIXARTIST% dafür sorgt, dass die technische Funktion der eckigen Klammern wirksam wird.

Deshalb funktioniert auch das ...
[$if(%_FILENAME%,$meta_sep(MIXARTIST,'; '),)]
... was dasselbe Ergebnis liefert wie ...
$if(%_FILENAME%,$meta_sep(MIXARTIST,'; '),)
... oder auch ...
$if($not(),$meta_sep(MIXARTIST,'; '),)
... oder vielleicht ganz einfach so ...
$meta_sep(MIXARTIST,'; ')

DD.20170102.1808.CET

This post has been edited by DetlevD: Jan 2 2017, 18:08


--------------------
* Beyond that, don't ask, when you don't know what to do with the answer. *
♥ home is where the heart is ♥
Go to the top of the page
 
+Quote Post
ohrenkino
post Jan 2 2017, 21:38
Post #5


Member


Group: Full Members
Posts: 8458
Joined: 9-December 09
From: Norddeutschland / Northern Germany
Member No.: 11458
Mp3tag Version: 2.81c



ZITAT(DetlevD @ Jan 2 2017, 17:30) *
Ja so ist es; es funktioniert, wenn %TRACK% als Tagfeldinhalt-Platzhalter bzw. als Inhaltsoperator (content operator) einen Wert liefert, der im Feld TRACK enthalten ist.

$meta_sep() liefert doch auch einen Wert aus den multi-value-Feldern, also ist der Ausdruck eigentlich auch nicht leer, müsste also nach der Logik der eckigen Klammern nun auch als "gefüllt" bewertet werden und damit ebenfalls zur Anzeige führen.
ZITAT
...Außerdem ist hier die "Eckige-Klammer-Funktion" falsch angewendet und überflüssig, weil der Formatstring die Sonderfunktion der eckigen Klammern bereits simuliert.
Nur ohne die eckigen Klammern wird die passende Ausgabe erzeugt.

Ich hatte das Beispiel gebracht, um einen über weite Strecken gleichen Ausdruck zu zeigen, dessen einziges Merkmal ist, dass er MIXARTIST und nicht %MIXARTIST% enthält, obwohl ja die Auswertung, ob denn Daten erscheinen oder nicht schon im $if() erledigt wird. Da aber kein %-zeichen im Ausdruck vorkommt, wird die eckige Klammer als "leer" interpretiert.

ZITAT
In diesem Fall sind die eckigen Klammern überflüssig, denn sie tun nichts dazu und ändern auch nichts am Ergebnis des Formatstrings.

Und dies war als Beweis für die These mit den %-zeichen gedacht: hier sind %-zeichen enthalten und - Bumsfallera - gibt es auch durch die Auswertung der eckigen Klammern eine Ausgabe, obwohl auch hier die Stringerzeugung durch die $ifgreater()-Anweisung längst abgeschlossen ist.
ZITAT
Interessant ist aber, dass der eine Tagfeldinhalt-Platzhalter %MIXARTIST% dafür sorgt, dass die technische Funktion der eckigen Klammern wirksam wird.

Ja. Und genau das ist der Stein, über den ich gestolpert bin.
Es erschließt sich mir nicht, warum ich bei den meisten $()-Anweisungen auf den Tagfeldinhalt referenziere, bei $meta() aber auf den Feldnamen...


--------------------
42 - wie war die Frage / what was the question / quelle était la question
Go to the top of the page
 
+Quote Post
DetlevD
post Jan 3 2017, 05:07
Post #6


Member


Group: Full Members
Posts: 6449
Joined: 26-May 06
From: Wuppertal, Germany, Planet Earth
Member No.: 3194
Mp3tag Version: 2.81c



QUOTE (ohrenkino @ Jan 2 2017, 21:38) *
... Ich hatte das Beispiel gebracht, um einen über weite Strecken gleichen Ausdruck zu zeigen ...

Damit aber wurde in der Sachfrage mehr Verwirrung erzeugt.

QUOTE (ohrenkino @ Jan 2 2017, 21:38) *
... Es erschließt sich mir nicht, warum ich bei den meisten $()-Anweisungen auf den Tagfeldinhalt referenziere, bei $meta() aber auf den Feldnamen...

Was sich nicht erschließt, das muss gelernt werden, weil es eben so implementiert ist.

DD.20170103.0507.CET


--------------------
* Beyond that, don't ask, when you don't know what to do with the answer. *
♥ home is where the heart is ♥
Go to the top of the page
 
+Quote Post
ohrenkino
post Jan 3 2017, 14:06
Post #7


Member


Group: Full Members
Posts: 8458
Joined: 9-December 09
From: Norddeutschland / Northern Germany
Member No.: 11458
Mp3tag Version: 2.81c



ZITAT(DetlevD @ Jan 3 2017, 05:07) *
...Was sich nicht erschließt, das muss gelernt werden, weil es eben so implementiert ist.

DD.20170103.0507.CET

Natürlich hast du im Prinzip Recht: das kann man (als Ausnahme von der sonstigen Regel) lernen.
Habe ich ja jetzt auch gemacht.

Trotzdem gibt es in der SW-Entwicklung so etwas wie "Erwartungskonformität" als Qualitätskriterium (siehe auch https://de.wikipedia.org/wiki/Erwartungskonformit%C3%A4t)
und spätestens hier sind zumindest meine Erwartungen nicht mit der Implementierung konform gewesen.
Naja, nun haben wir den Fall dokumentiert, ob das Verhalten geändert wird, wird die Zeit zeigen.


--------------------
42 - wie war die Frage / what was the question / quelle était la question
Go to the top of the page
 
+Quote Post
DetlevD
post Jan 16 2017, 19:52
Post #8


Member


Group: Full Members
Posts: 6449
Joined: 26-May 06
From: Wuppertal, Germany, Planet Earth
Member No.: 3194
Mp3tag Version: 2.81c



QUOTE (ohrenkino @ Jan 3 2017, 14:06) *
... Trotzdem gibt es in der SW-Entwicklung so etwas wie "Erwartungskonformität" als Qualitätskriterium ...

Hmm, in einem Datenfeld, welches den Namen FELDNAME hat, referenziert und liefert die Syntax %FELDNAME% immer genau einen Wert - soweit die Erwartung.

Wenn man diese Syntax und Erwartung auf ein Mehrwerte-Feld anwendet, dann dürfte bzw. müsste eigentlich nur der erste eine Wert ausgegeben werden, doch das würde nur Verwirrung stiften, ebenso wie die Ausgabe aller Einzelwerte auf einmal.

Was ist mit den anderen Werten im Mehrwerte-Feld?
Und wie kann man gezielt z. B. nur den zweiten Wert auslesen?
Dafür gibt es die Sonderfunktion: $meta(FELDNAME,Indexposition).

Der normale Inhaltsoperator %FELDNAME% kann das nicht ausgeben.

Man sollte akzeptieren, dass ein Mehrwerte-Feld, welches eine Liste oder Tabelle von Einzelwerten ist, technisch etwas anderes ist als ein Einzelwert-Feld.

Mp3tag bietet für die Behandlung dieser besonderen Mehrwerte-Felder die dazugehörigen besonderen Funktionswerkzeuge an.
Und das funktioniert doch, oder?

DD.20170116.1952.CET


--------------------
* Beyond that, don't ask, when you don't know what to do with the answer. *
♥ home is where the heart is ♥
Go to the top of the page
 
+Quote Post
ohrenkino
post Jan 16 2017, 20:07
Post #9


Member


Group: Full Members
Posts: 8458
Joined: 9-December 09
From: Norddeutschland / Northern Germany
Member No.: 11458
Mp3tag Version: 2.81c



Vielleicht habe ich ja auch nur einen Knoten im Hirn.
Auslöser war ja nicht die $meta()-Funktion an sich, sondern die fehlende Ausgabe bei den eckigen Klammern.
Und hier haben wir schon festgestellt: obwohl die $meta()-Funktion einen Wert zurückliefert, weigert sich MP3tag den Ausdruck in den eckigen Klammern als "gefüllt" zu betrachten. Dieser Auslöser scheint das %-Zeichen zu sein.
(Denn, zugegeben, wenn man eine Textkonstante in die eckigen Klammern schreibt, wird auch nichts ausgegeben).
Festzuhalten: (Beispiel) $meta(artist,2) liefert den Inhalt eines Feldes, adressiert über einen Index zurück.
Das tut ein %artist% auch. Von außen betrachtet ist das Ergebnis sehr vergleichbar: es werden Tag-Felder ausgefracht.
Nur bei [$meta(artist,2)] gibt es keine Ausgabe,
bei [%artist%] gibt es eine.
Das ist für mich unerwartet.

Wir haben uns dann den Ausflug gegönnt, zu fabulieren, ob vielleicht ein $meta(%artist%,2) besser wäre (nein, ist es nicht für die Adressierung) nur theoretisch würde ein $meta(%artist%,2) zu einer Ausgabe führen, da nun das %-Zeichen um die Feldreferenz tanzt.

Ich würde ja sofort Ruhe geben, wenn man mit $meta() in eckigen Klammern genauso eine Ausgabe erzeugen könnte wie mit [$num(%track%,2)]


--------------------
42 - wie war die Frage / what was the question / quelle était la question
Go to the top of the page
 
+Quote Post
DetlevD
post Jan 17 2017, 07:24
Post #10


Member


Group: Full Members
Posts: 6449
Joined: 26-May 06
From: Wuppertal, Germany, Planet Earth
Member No.: 3194
Mp3tag Version: 2.81c



QUOTE (ohrenkino @ Jan 16 2017, 20:07) *
Vielleicht habe ich ja auch nur einen Knoten im Hirn. ... Das ist für mich unerwartet. ... Ich würde ja sofort Ruhe geben, wenn man mit $meta() in eckigen Klammern genauso eine Ausgabe erzeugen könnte wie mit [$num(%track%,2)]

Du meinst also, dass die drei $meta Funktionen ...
$meta(x), $meta(x,n), $meta_sep(x,sep)
... auch wirken sollen innerhalb der "Eckige Klammern Funktion [...]".

Hmm, das müsste doch machbar sein?
Zur weiteren Vervollständigung der Mp3tag Skriptsprache würde es aber schon dienen.

DD.20170117.0724.CET


--------------------
* Beyond that, don't ask, when you don't know what to do with the answer. *
♥ home is where the heart is ♥
Go to the top of the page
 
+Quote Post
Florian
post Apr 21 2017, 19:59
Post #11


Developer


Group: Admin
Posts: 8076
Joined: 12-December 01
From: Germany, Dresden
Member No.: 203
Mp3tag Version: 2.81c



Das funktioniert jetzt im aktuellen Development Build Mp3tag v2.81c. Danke für eure detaillierte Analyse smile.gif

Viele Grüße
– Florian


--------------------
♫ If you like using Mp3tag please donate to support further development.

Go to the top of the page
 
+Quote Post
ohrenkino
post Apr 21 2017, 21:00
Post #12


Member


Group: Full Members
Posts: 8458
Joined: 9-December 09
From: Norddeutschland / Northern Germany
Member No.: 11458
Mp3tag Version: 2.81c



Stimmt. Super. biggrin.gif


--------------------
42 - wie war die Frage / what was the question / quelle était la question
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 



RSS Lo-Fi Version Time is now: 27th April 2017 - 12:04