AppleScript - ¿Cómo establecer variables para un número indeterminado de elementos de lista?

1

Soy nuevo en AppleScript. Estoy intentando crear un script que toma los elementos de la lista de una acción anterior del flujo de trabajo de Automator y los convierte en variables.

Habrá un número indeterminado de elementos de la lista (bueno, entre 1 y 40 cada ejecución).

Esto funciona para un número determinado de elementos de 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 del flujo de trabajo anterior, nos encontramos con problemas.

Por lo tanto, actualicé la secuencia de comandos con if para intentar 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 se llena la primera variable F1 . Los otros se dejan en blanco / no se llenan. 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 hacer esto?

    
pregunta Jon Gordon 07.12.2017 - 16:54

1 respuesta

1
La declaración de

Variable debe hacerse antes de que se ejecute . El siguiente ejemplo AppleScript código , ejecutado en Script Editor , es 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 comando log 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á desarrollar esto para todas las variables que sean necesarias, ya que no puede agregarlas después de que se haya iniciado la ejecución del código . Mencionó "entre 1 y 40 cada ejecución" en su OP.

Eliminarías los comandos log para el código real dentro de cada uno de los bloques if sentencia , además de los < asignaciones de em> variable , según corresponda en ese momento en la ejecución del código , si corresponde.

Tenga en cuenta que al ajustar el código del grupo de if instrucción , se establece el nuevo valor de variables basadas en el valor de list item , en una declaración try cuando hay menos items en el input list , no No lance un error que detenga la ejecución del código y continúe con el código restante.

Al

valor de la variable se le asigna inicialmente missing value , sin embargo, también se puede usar "" (comillas dobles). Me gusta usar missing value a veces, ya que puede ser más fácil leer el código .

NOTA: El ejemplo AppleScript código está justo encima de eso, y está codificado tal como está para demostrar un forma de asignar las variables un valor de una lista . Que es lo que input está en el contexto de, ej. on run {input, parameters} de una Ejecutar AppleScript en un Automator flujo de trabajo . Dependiendo de cuál sea la fuente del input y qué se hará con él, es posible que necesite agregar, por ejemplo. as string o as text u otra coerción según corresponda, según corresponda, en este caso después de item n of input , p. ej. set F1 to item 1 of input as string .

    
respondido por el user3439894 12.12.2017 - 08:37

Lea otras preguntas en las etiquetas