Export rtf

hallo

ich möchte einen rtf-export mit u.a. script machen.
funktioniert eigentlich ganz gut, bis auf ...
wenn sich das album ändert, der artist allerdings gleich bleibt,
dann gibt's keine neue überschrift (%artist% / %album% [%year] ...),
sondern die tracks werden beim vorherigen album drangehängt;
weil die variable zw-album auch bereits auf %album% geändert wurde (habe ich getestet)
obwohl das erst beim nächsten $if passieren sollte.
frage: ist mein $if falsch, oder wo sonst ist der fehler ? - danke

$puts(zw-artist,)
$puts(zw-album,
)

$loop(%_filename_ext%)
$if($eql($strcmp(%artist%,$get(zw-artist))),,\par$puts(zw-artist,%artist%)$puts(zw-album,%album%)\b %artist% / %album% '['%year%']'\b0\par'('$mid(%_filename%,1,12)')'\par)

$if($eql($strcmp(%album%,$get(zw-album))),,\par$puts(zw-artist,%artist%)$puts(zw-album,%album%)\b %artist% / %album% '['%year%']'\b0\par'('$mid(%_filename%,1,12)')'\par)

%discnumber%-%track% %title% ['['%track-jahr%']'] ['('%comment%')']\par
$loopend()
\b0
}

Bisher war es so, dass die Funktionen $put und $puts nicht als Argument innerhalb einer anderen Funktion benutzt werden können.
So muss man die Befehlsfolgen anders gestalten ...
$put(Variablenname,$if(Bedingung,ErgebnisJa,ErgebnisNein))
Siehe auch ...
Check if field value is identical for all selected tracks

Anmerkungen ...

  1. Im Skript scheinen zwei schließende Klammern zu fehlen, jeweils zu $if().
  2. $mid(%_filename%,1,12) kann man vereinfachen zu $left(%_filename%,12).
  3. $if($strcmp('a','b'),'J','N') ergibt 'N' bzw. $if($strcmp('a','a'),'J','N') ergibt 'J'

DD.20160307.1633.CET

Würde da nicht einfach eine weitere Schleife helfen?
$loop(%artist%)%artist%$loop(%album%)Überschrift %album%$loop(%track%)%track% - %title%
$loopend()$loopend()$loopend()

hallo

@ohrenkino
danke für den tipp,
aber das übersteigt meine programmierkenntnisse bei weitem !!
hab's einmal für mich hinbekommen, schaut so aus:


Und wie sieht das zugehörige Export-Script aus?

Nur so als Philosophie:
Es gibt mehrere 1:n-Beziehungen zwischen Künstlern und ihren Stücken. Und dementsprechend kannst du die Schleifen mit $loop() machen.

es gibt viele Künstler -> $loop(%artist%)
1 Künstler hat n Alben -> $loop(%album%)
1 Album hat n Titel -> $loop(%track%)

Und jetzt kannst du vor jedem $loop() eine Kopfzeile definieren, die immer nur dann kommt, bevor die Schleife das nächste Mal durchlaufen wird.
oder hinter dem jeweiligen $loopend() eine Fußzeile, die dann die Zusammenfassung für die Schleife liefert.

wenn ich nicht irre, funktioniert das aber nur, wenn die lieder so gespeichert sind:
künstler

|--> alle alben dieses künstlers
                  |--> alle lieder dieses künstlers

bei mir kommen die alben durcheinander; nie mehrere alben eines künstler unmittelbar hintereinander. (gelöst mit eindeutigen schlüssel)

mein script schaut so aus:
$puts(zw-key,******)
$loop(%_filename_ext%)
$puts(zw-filename,$left(%_filename%,6))

$if($eql($strcmp($get(zw-filename),$get(zw-key))),,\par\b %artist% / %album% '['%year%']'\b0\par '('$get(zw-filename)')'\par)

%discnumber%-%track% %title% ['['%track-jahr%']'] ['('%comment%')']\par
$puts(zw-key,$get(zw-filename))
$loopend()

Das $loop-Kommando führt eine eigene Sortierung durch, würde also (nach meinen 3 Schleifen) erst alle Künstler sortieren, dann die Alben alphabetisch, dann die Tracknummer.
Oder anders: die können sonstwo im Dateisystem verstreut liegen, wenn keine Eigenschaft des Dateisystems verwendet wird, sondern interne Tag-Felder.
(vielleicht wäre hier $loop(%artist%,1) sogar noch besser, dann wird jeder Künstler nur 1x gezeigt ... musst du mal probieren).

Oder noch anders: ich würde für die Sortierung, die am Ende den Inhalt der Tags ausgeben soll, keine Dateisystemeigenschaften verwenden.

danke für die tipps.
habe mich etwas (länger) gespielt mit deinem Vorschlag.
jetzt passt's.

hier das script (vielleicht kann's ja jemand brauchen):
$filename(rtf,ansi){\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Tahoma;}}
\viewkind4\uc1\pard\b\f0\fs32 %_workingpath% - Dateiübersicht\par
\b\f0\fs21
(sortiert nach Artist, Album, Disc- und Tracknummer)\par
\b0\fs20\par

$loop(%artist%)
$loop(%album%)
\par\b %artist% / %album% '['%year%']'\b0\par
$loop(%discnumber%%track%)
%discnumber%-%track% %title% ['['%track-jahr%']'] ['('%comment%')']\par
$loop(%_filename_ext%)
$loopend()
$loopend()
$loopend()
$loopend()
\par
\par
erstellt %_datetime% mit %_app%
\b0
}