Soy nuevo en AppleScript. Estoy tratando de crear un script que tome los elementos de la lista de una acción de flujo de trabajo de Automator anterior y los convierta en variables.
Habrá un número indeterminado de elementos de la lista (bueno, entre 1 y 40 en cada ejecución).
Esto funciona para un número determinado de elementos de la lista, digamos tres.
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
Pero si solo hay dos elementos de lista generados a partir de la acción de flujo de trabajo anterior, nos encontramos con problemas.
Entonces, actualicé el script usando if
para tratar de solucionar este problema.
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
Cuando ejecuto esto, solo F1
se completa la primera variable. Los demás se dejan en blanco/no se completan. No estoy seguro de cómo seguir adelante con esto?
¿Alguien puede decirme si estoy en el camino correcto o si hay una mejor manera de hacerlo?
La declaración de variables debe hacerse antes del tiempo de ejecución . El siguiente código AppleScript de ejemplo , ejecutado en el Editor de secuencias de comandos , es para demostrar una forma de hacerlo:
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
El resultado del registro es:
(*F1 is: one*)
(*F2 is: two*)
(*F3 is: three*)
(*F4 is still: missing value*)
Obviamente, el log
comando se está utilizando para mostrar que a las variables se les asignó un nuevo valor , excepto el último porque input list
solo tenía tres elementos . Deberá crear esto para la cantidad de variables que se necesiten, ya que no puede agregarlas después de que haya comenzado la ejecución del código . Mencionaste "entre 1 y 40 cada ejecución" en tu OP.
Eliminaría los log
comandos para el código real dentro de cada uno de los bloques if
de instrucciones , además de las asignaciones de variables , según corresponda en ese punto de la ejecución del código , si corresponde.
Tenga en cuenta que al envolver el código del grupo de bloques if
de instrucciones , que establece el nuevo valor de las variables en función del valor de list item
, en una try
instrucción cuando hay menos items
en input list
, no genera un error que detenga la ejecución de el código , y continúa con el código restante .
El valor de la variable se asigna inicialmente missing value
, sin embargo, ""
también se pueden usar (comillas dobles) en su lugar. Me gusta usarlo missing value
a veces, ya que puede ser más fácil leer el código .
NOTA: El código AppleScript de ejemplo que se muestra arriba es solo eso, y está codificado tal como está para demostrar una forma de asignar a las variables un valor de una lista . Que es lo que está en el contexto de, por ejemplo, una acción Ejecutar AppleScript en un flujo de trabajo de Automator . Según cuál sea la fuente de la información y qué se hará con ella, es posible que deba agregar, por ejemplo , u otra coerción según corresponda, en este caso después de , por ejemplo . input
on run {input, parameters}
input
as string
as text
item n of input
set F1 to item 1 of input as string