Ich bin neu bei AppleScript. Ich versuche, ein Skript zu erstellen, das die Listenelemente aus einer früheren Automator-Workflow-Aktion nimmt und sie in Variablen umwandelt.
Es wird eine unbestimmte Anzahl von Listenelementen geben (also zwischen 1 und 40 pro Lauf).
Dies funktioniert für eine bestimmte Anzahl von Listenelementen, sagen wir drei.
on run {input, parameters}
set value of variable "F1" of front workflow to item 1 of input
set value of variable "F2" of front workflow to item 2 of input
set value of variable "F3" of front workflow to item 3 of input
return input
end run
Wenn jedoch nur zwei Listenelemente aus der vorherigen Workflow-Aktion generiert wurden, treten Probleme auf.
Also habe ich das Skript mit aktualisiert, if
um zu versuchen, dieses Problem zu umgehen.
on run {input, parameters}
if item 1 exists then
set value of variable "F1" of front workflow to item 1 of input
end if
if item 2 exists then
set value of variable "F2" of front workflow to item 2 of input
end if
if item 3 exists then
set value of variable "F3" of front workflow to item 3 of input
end if
return input
end run
Wenn ich dies ausführe, wird nur die erste Variable F1
gefüllt. Die anderen bleiben leer/werden nicht ausgefüllt. Ich bin mir nicht sicher, wie ich damit weitermachen soll?
Kann mir jemand sagen, ob ich auf dem richtigen Weg bin oder ob es einen besseren Weg gibt, dies zu tun?
Die Variablendeklaration muss vor der Laufzeit erfolgen . Der folgende AppleScript- Beispielcode , der im Skripteditor ausgeführt wird , soll eine Vorgehensweise demonstrieren:
set input to {"one", "two", "three"}
set F1 to missing value
set F2 to missing value
set F3 to missing value
set F4 to missing value
try
if item 1 of input is not missing value then
set F1 to item 1 of input
log "F1 is: " & F1
end if
if item 2 of input is not missing value then
set F2 to item 2 of input
log "F2 is: " & F2
end if
if item 3 of input is not missing value then
set F3 to item 3 of input
log "F3 is: " & F3
end if
if item 4 of input is not missing value then
set F4 to item 4 of input
log "F4 is: " & F4
end if
end try
log "F4 is still: " & F4
Das Protokollergebnis ist:
(*F1 is: one*)
(*F2 is: two*)
(*F3 is: three*)
(*F4 is still: missing value*)
Offensichtlich wird der log
Befehl verwendet, um anzuzeigen, dass den Variablen ein neuer Wert zugewiesen wurde , mit Ausnahme der letzten, da die input list
nur drei Elemente enthielt. Sie müssen dies für die Anzahl der benötigten Variablen erstellen, da Sie sie nicht hinzufügen können, nachdem die Ausführung des Codes begonnen hat. Sie haben in Ihrem OP "zwischen 1 und 40 pro Lauf" erwähnt.
Sie würden die log
Befehle für den echten Code in jedem der if
Anweisungsblöcke entfernen , neben den Variablenzuweisungen , wie es zu diesem Zeitpunkt in der Ausführung des Codes angebracht ist , falls vorhanden.
Beachten Sie, dass durch das Umschließen des Codes der Gruppe von if
Anweisungsblöcken , die den neuen Wert der Variablen basierend auf dem Wert von festlegen list item
, in einer try
Anweisung , wenn weniger items
in vorhanden sind input list
, kein Fehler ausgegeben wird , der die Ausführung von anhalten würde den Code und fährt mit dem restlichen Code fort .
Der Wert der Variablen wird zunächst zugewiesen missing value
, es ""
können jedoch auch (doppelte Anführungszeichen) verwendet werden. Ich verwende missing value
manchmal gerne , da es einfacher sein kann, den Code zu lesen .
HINWEIS: Der Beispiel- AppleScript- Code darüber ist genau das und ist so codiert, wie er ist, um eine Möglichkeit zu demonstrieren, den Variablen einen Wert aus einer Liste zuzuweisen . Dies ist input
beispielsweise im Zusammenhang mit on run {input, parameters}
einer Run AppleScript- Aktion in einem Automator- Workflow der Fall . Je nachdem, was die Quelle des input
ist und was damit gemacht wird, müssen Sie ggf. eg as string
oder as text
oder andere Zwängeitem n of input
hinzufügen, in diesem Fall nach , zB set F1 to item 1 of input as string
.