Hallo TMA,
vielen Dank, für das Posten Deiner Lösung! :-)
Ein Tip: Das Konvertierungs-Problem des Ungleich-Zeichen kann vermieden werden, indem man es ausschreibt: 'is not'.
Ich glaube Dir gerne, dass es mit diesem Script "geht". Aber es gibt ein paar Dinge, welche verbessert werden sollten.
Statt zuerst einer Variablen die Anzahl Bildboxen zuzuweisen ...
set picBoxcount to count every picture box
repeat with i from 1 to picBoxcount
... kann man direkt loslegen:
repeat with i from 1 to count every picture box
Dabei werden die Boxen auch nur einmal gezählt und der Endwert wird gespeichert.
Bei den folgenden zwei Zeilen wird zweimal der Pfad zur Bilddatei verlangt:
if (file path as string) is not "null" then
set theFileToWork to (file path as string)
Besser wäre diese Form:
set theFileToWork to (file path as string)
if theFileToWork is not "null" then
Zuerst den Pfad speichern und dann testen.
Wichtiger wäre aber, dass auch getestet würde, ob hinter dem Bild eine Diskdatei ist oder nicht. In letzterem Fall wird der
Pfad mit "no disk file" zurückgegeben. Das bedeutet, dass das Bild nicht geladen wurde, sondern ein eingesetztes Pict-File ist.
Und jetzt kommen wir zum Finder-tell-Block und dies innerhalb des 'tell application "QuarkXPress Passport'-Blocks.
Obwohl sowas funktioniert, sollte eine solche Verschachtelung vermieden werden. Und der Finder sollte nur
eingesetzt werden, wenn es nicht anders geht. Und dann immer nur mit einzeiligen Anweisungen. Warum? Weil der
Finder ständig überall aufpassen muss, ist seine Reaktionszeit nicht besonders. Deshalb ist es effizienter,
das Vorhandensein einer Datei so zu prüfen:
try
alias theFileToWork
on error
-- die Datei existiert nicht
end try
Wie gesagt, ohne Finder. Aber auch ausserhalb des XPress-Blocks, in einem Handler.
übrigens: Es macht keinen Sinn, das Vorhandensein der niedrigaufgelösten Datei zu testen, wenn man nur
an der hochaufgelösten interessiert ist.
Das Feststellen, ob ein "layouts"-Ordner im Spiel ist, kann sehr wohl mit 'parent' (oder 'container') durchgeführt werden.
Aber ich ziehe das Hantieren mit 'text items' vor. Schon nur, weil man dadurch den Finder nicht benötigt.
Der nächste Problembefehl ist so verschachtelt, dass ich nicht glaubte, dass die Fortsetzung funktioniert.
set tmpList to (every file of folder tmpFoldert whose name starts with (my suffixDel(fileName as string) as string))
Darin wird im Handler-Aufruf 'suffixDel' der Dateiname (welcher schon ein String ist), nochmals zur Textkette
konvertiert. Und – um ganz sicher zu gehen – im Handler selbst nochmals: 'set i to i as string' ...
Weil am Ende des langen Befehls nochmals 'as string' steht, war ich sicher, dass die Liste 'tmpList' zur
unbrauchbaren Textkette konvertiert würde. Dem ist aber nicht so: 'item 1 of tmpList' ist ein valabler Pfad
(ein Textketten-Pfad, welcher erneut in eine Textkette umgewandelt wird). Dennoch: Der Zweck der übung ist nicht
ganz durchsichtig. Es sieht aus wie ein Versuch, an eine Datei zu kommen, wenn die Suffizes der Hi-res- und
Low-res-Files nicht übereinstimmen. Und wieder wird der Finder eingespannt.
Und beim Kopieren wird derselbe Textketten-Pfad nochmals in eine Textkette umgewandelt:
duplicate file (highFile as string) to folder (my destinationFolder as string) without replacing
Was mich auch stört, ist die Verwendung des Präfixes 'the' in den Variablen-Namen. Diese Problematik wird
durch die folgende Zeile "schön" illustriert:
set the highFile to theFileToWork
Das erste the ist ein reservierter Ausdruck, welcher hier eigentlich nicht benötigt wird. Und auch das folgende the
wurde der besseren Lesbarkeit wegen eingefügt. Wenn aber irrtümlicherweise ein Zwischenraum dahintergerät, ist
plötzlich die (neue) Variable FileToWork nicht definiert.
Genug kritisiert. Ich habe vor Jahren ein Script entwickelt, welches in unserer Produktion immer noch
eingesetzt wird. Von diesem Script habe ich letztes Jahr eine Spezialversion gemacht, welches die Bilder
eines XPress-Layouts sammelt und zwar seitenweise. Ein Fortschrittsbalken samt Statuszeile informieren ständig
über das Geschehen. Wenn ein Bild nicht gefunden wurde, wird eine Rapportdatei ergänzt.
Siehe http://www.page-online.de/page/forum/viewthread/2744 / Thema "seitenweiser automatischer Bildexport aus
qxd-dokument". Wie aus dem damaligen Austausch hervorgeht, müsste das Behandeln von Layoutdateien zuerst
eingebaut werden. Also: Falls Interesse daran besteht, bitte melden!
Gruss, Hans
als Antwort auf: [#420620]