Hi,
dieser Code fügt automatisch alle Dateien eines Unterordners als \include ein:
\version "2.19.80"
loadFiles =
#(define-void-function (dir-name) (string?)
(let ((dir (opendir dir-name)))
(do ((entry (readdir dir) (readdir dir)))
((eof-object? entry))
(if (string-suffix? "ly" entry)
(ly:parser-include-string
(string-append
"\\include \"" dir-name "/" entry "\""))))
(closedir dir)))
Es scheint, dass die Reihenfolge umgedreht wird. Wie muss ich den Code ändern, damit die alphabetische Reihenfolge erhalten bleibt?
Vermutlich nur eine Scheme-Anweisung, leider habe ich schon länger nichts mehr in Scheme gemacht.
Hallo Manuela,
die umgedrehte Reihenfolge liegt an ly:parser-include-string: der String wird quasi immer hinter die aktuelle "Cursorposition" geschrieben, so daß die eigentliche Reihenfolge genau umgekehrt ist, als man denken würde.
Als schnelle Lösung habe ich die Verzeichnis-Einträge zuerst in der Liste files gesammelt (schon gleich rückwärts) und erst am Ende und nach dem closedir die Einträge per ly:parser-include-string an den Parser übergeben.
\version "2.19.80"
loadFiles =
#(define-void-function (dir-name) (string?)
(let ((dir (opendir dir-name))
(files (list)))
(do ((entry (readdir dir) (readdir dir)))
((eof-object? entry))
(if (string-suffix? "ly" entry)
(set! files (append (list entry) files))))
(closedir dir)
(for-each (lambda (entry)
(ly:parser-include-string
(string-append
"\\include \"" dir-name "/" entry "\"")))
files)))
Viele Grüße
Torsten
Danke für die rasche Antwort! :)
Ich habe den Scheme-Code ein wenig adaptiert, sodass alle Dateien, die im Namen den Text "foo" und "bar" enthalten, nicht inkludiert werden. Für den Fall, dass man bestimmte Dateien ausschließen will.
loadFiles =
#(define-void-function (dir-name) (string?)
(let ((dir (opendir dir-name))
(files (list)))
(do ((entry (readdir dir) (readdir dir)))
((eof-object? entry))
(if (and (string-suffix? "ly" entry) (not (string-match "foo" entry)) (not (string-match "bar" entry)))
(set! files (append (list entry) files))))
(closedir dir)
(for-each (lambda (entry)
(ly:parser-include-string
(string-append
"\\include \"" dir-name "/" entry "\"")))
files)))
\loadFiles "...Unterverzeichnisname..."