%_folderpath% zerlegen

Irgendwie stehe ich hier mal wieder auf dem Schlauch.

Ich versuche den Grundordner eines Interpreten zu extrahieren.
Zuerst einmal zum Verzeichnisaufbau:
%_workingpath%[Buchstabe]Interpret\Album[\CD]\Tracks
%_workingpath% sollte auch direkt auf [Buchstabe] bzw. Interpret einsetzbar sein, also auch möglich:
%_workingpath%\Interpret\Album[\CD]\Tracks oder %_workingpath%\Album[\CD]\Tracks

Mein Gedanke ist die Verzeichnistiefe von %_workingpath% bzw. von %_folderpath% dafür heranzuziehen. %_folderpath% sollte ja eigentlich der Ordner mit den Tracks sein...
Aber leider scheine ich da irgendwo einen Denkfehler zu haben. Wenn ich "fldr" anzeigen lasse, kommt leider nicht (immer) das richtige Ergebnis raus.

Komisch ist auch bei einem Testverzeichnis D:\Musik\Bands\X. Hierin sind 3 Verzeichnisse: X, XTC und XX. Zur Info: X enhält Album\Tracks, XTC enthält Album\CD1\Tracks und \CD2\Tracks und XX enthält mehrere Alben teils mit teils ohne CD-Unterverzeichnis.
Als Ergebnis bekomme ich D:\Musik\Bands\X, D:\Musik\Bands\XTC\ und zuletzt noch einmal D:\Musik\Bands\X
anstatt D:\Musik\Bands\XX.
Bei einem zweiten: J:\Musik\A-Z mit dem Verzeichnis Jesper Munk erhalte ich nur J:\Musik\A-Z

Für jegliche Hilfe bin ich dankbar! Ich teste da jetzt schon 2 Tage alle möglichen und unmöglichen Routinen. Leider ohne Erfolg.

Ich hänge mal das aktuelle Script an.

Sorry, bekomme immer "Hochladen fehlgeschlagen." http://www.mediafire.com/download/rp48a7tv...+style_test.mte

Hier schon einmal der relevante Part:

<h1>List of albums in %_workingdir%</h1>
$loop($if2(%albumartistsort%,($if2(%albumartist%,%artist%))))
	$puts(grundtiefe,$folderdepth(%_workingpath%))
	$puts(tiefe,$folderdepth(%_folderpath%))
	$puts(anz,$sub($get(tiefe),$get(grundtiefe)))

	$if($eql($get(anz),1),$puts(abs,$left(%_folderpath%,$sub($strrchr(%_folderpath%,\),1))),)
	$if($eql($get(anz),1),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$if($eql($get(anz),1),$puts(fldr,$get(abs)),)
	$if($eql($get(anz),2),$puts(abs,$left(%_folderpath%,$sub($strrchr(%_folderpath%,\),1))),)
	$if($eql($get(anz),2),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$if($eql($get(anz),2),$puts(fldr,$get(abs)),)
	$if($eql($get(anz),3),$puts(abs,$left(%_folderpath%,$sub($strrchr(%_folderpath%,\),1))),)
	$if($eql($get(anz),3),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$if($eql($get(anz),3),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$if($eql($get(anz),3),$puts(fldr,$get(abs)),)
	$if($eql($get(anz),4),$puts(abs,$left(%_folderpath%,$sub($strrchr(%_folderpath%,\),1))),)
	$if($eql($get(anz),4),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$if($eql($get(anz),4),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$if($eql($get(anz),4),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$if($eql($get(anz),4),$puts(fldr,$get(abs)),)

	$get(fldr)
	...

Den nachfolgen Teil habe ich noch nicht modifiziert.

In das Gesamtproblem habe ich mich noch nicht hineingedacht, weil es irgendwie unübersichtlich wirkt, ...
aber ich möchte doch 'mal fragen ...

??? $if($eql($get(anz),4),$puts(fldr,$get(abs)),) ??? sollte das vielleicht geschrieben werden so ??? ... $puts(fldr,$if($eql($get(anz),4),$get(abs),))

DD.20150928.1903.CEST

Denkfehler gefunden :slight_smile:

	$puts(abs,$left(%_folderpath%,$sub($strrchr(%_folderpath%,\),1)))
	$if($eql($left(%_directory%,2),CD),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),)
	$puts(fldr,$get(abs))

Jetzt habe ich aber trotzdem noch ein Problem:
Wenn ich noch einen Unterordner "CD..." im Album-Verzeichnis habe, dann wird nicht noch zusätzlich um ein weiteres Verzeichnis gekürzt.
Ich sehe da aber auch keinen Syntax/Klammer-Fehler. Und wenn ich die $if-Zeile 2x ausführe bekomme ich zwar dann das richtige Verzeichnis, dafür stimmen die ohne Unterordner dann aber komischerweise nicht mehr.

Echt zum verzweifeln!!!
Hat jemand eine Lösung für mich?

Da bist du mir mit der Antwort ein paar Minuten zuvorgekommen :smiley:

Echt? Ich hätte eigentlich gedacht, dass die Reihenfolge dabei egal ist.
if x=y then z=erg gegenüber z=erg if x=y - letzteres hört sich irgenwie vom alten Tachenrechner her nach Umgekehrte polnische Notation an.
Aber wenn die Reihenfolge korrekt ist... muß ich morgen mal testen.

Aber die erste Version, die ich da hatte, war echt totaler Humbug lol

Deiner Notation zufolge müsste die Zeile
$if($eql($left(%_directory%,2),CD),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),),1))),)
so lauten (wenn ich mich nicht vertan haben sollte):
$puts(abs,$if($eql($left(%_directory%,2),CD),$left($get(abs),$sub($strrchr($get(abs),),1)),))

Nur funktioniert damit die Routine leider auch nicht :frowning:

Ich würde den Mp3tag Export Code so anders schreiben ...
(... ungeprüft, ob die Logik stimmt ...)

von ... $if($eql($get(anz),2),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),) nach ... $puts(abs,$if($eql($get(anz),2),$left($get(abs),$sub($strrchr($get(abs),'\'),1)),)) von ... $if($eql($left(%_directory%,2),CD),$puts(abs,$left($get(abs),$sub($strrchr($get(abs),\),1))),) nach ... $puts(abs,$if($eql($left(%_directory%,2),'CD'),$left($get(abs),$sub($strrchr($get(abs),'\'),1)),))

Wenn bei negativer Auswertung von $if() der vorherige Wert in der Variable "abs" erhalten werden soll, dann müsste man den Ausdruck so schreiben ...

nach ... $puts(abs,$if($eql($left(%_directory%,2),'CD'),$left($get(abs),$sub($strrchr($get(abs),'\'),1)),$get(abs)))

Während der Testphase sollte man anstelle von $puts hier und da $put verwenden, ...
so dass man in der Export Ausgabe besser erkennen kann, ...
welcher Wert in der jeweiligen Variable vorhanden ist.

DD.20150929.0858.CEST

$puts(abs,$if($eql($left(%_directory%,2),'CD'),$left($get(abs),$sub($strrchr($get(abs),''),1)),$get(abs)))
Diese Zeile scheint mir logisch, hatte ich gestern abend wohl nicht so schnell gerafft, dass ich ohne den letzten Part die Variable logischerweise wieder lösche.
Wenn der Komplettausdruck mit $if beginnt, hätte ich mir die erneute Zuweisung sparen können.

Aber jetzt mal eine Logikfrage: warum funktioniert meine Schreibweise nicht? Geht $put innerhalb einer $if-Abfrage nicht, sondern nur umgekehrt? Denn dann wird mir so einiges klar, warum ich an manchen Ausdrücken einfach gescheitert bin.

$put - werde ich versuchen mir zu merken. Zum Testen "schreibe" ich den Variablen-Inhalt normalerweise in die Ausgabe.

Auf jeden Fall Danke für deine erleuchtenden Worte!!!
Man merkt echt, dass ich in dieser Script-Sprache blutiger Anfänger bin.

EDIT
Melde Vollzug :slight_smile:

Siehe auch dort ...
$if script-befehl mit $puts script-befehl

DD.20150930.1017.CEST

Da wäre ich von alleine auch nie drauf gekommen.
Jede andere Sprache basiert dabei auf if then/else.
Zumindest weiß ich jetzt, was Sache ist :slight_smile:

Danke nochmal für deine Hilfe.

Jetzt habe ich allerdings noch ein persönliches Problem lol 4 GB Arbeitsspeicher sind für meine Sammlung zu wenig, nach ca. 2/3 des Exports ist mir MP3Tag abgeschmiert :frowning:
Werde heute Abend aber mal versuchen, dabei keinen Film auf dem PC zu gucken.

Nein, das ist mehr ein Problem von 32-bit-Anwendungen mit max. 3 GB (+/-) nutzbarem RAM sowie der darunterliegenden Garbage Collection.
Da ist die Aufteilung der Menge auf ein Mal geladenen Dateien nötig.

Garbage Collection? Daran habe ich seit meinen C=16 Tagen nicht mehr gedacht :astonished:
Na ja, im Moment habe ich eh die Exporte alphabetisch getrennt. Kann man dann auch leichter/schneller updaten.
Werde dann mal den heutigen Abend dazu verwenden eine vernünftige Index.html dafür zu erstellen.