1 votos

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

Soy nuevo en el AppleScript. Estoy tratando de crear un script que toma los elementos de la lista a partir de una anterior acción de flujo de trabajo de Automator y convertirlos en variables.

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

Esto funciona para un determinado número de elementos de la lista, digamos que 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 sólo hay dos elementos de la lista generada a partir de la anterior acción de flujo de trabajo, estamos en problemas.

Así que, he actualizado el script usando if para tratar de conseguir alrededor de 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, sólo la primera variable F1 rellena. Los demás se dejan en blanco/no rellenar. 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?

1voto

user3439894 Puntos 5883

Variable declaración debe realizarse antes de ejecutar el tiempo. El siguiente ejemplo de AppleScript código, se ejecutan en el Editor de secuencias de Comandos, es 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 registro de resultado es:

(*F1 is: one*)
(*F2 is: two*)
(*F3 is: three*)
(*F4 is still: missing value*)

Obviamente la log comando se utiliza para mostrar que las variables se le asigna un nuevo valor, excepto la última, porque el input list sólo había tres elementos en ella. Que necesitas esta cuenta, sin embargo, muchas de las variables que se podría necesitar, como no se puede añadir después de la ejecución del código se ha iniciado. Usted ha hablado de "entre 1 y 40 de cada carrera" en su OP.

Te gustaría quitar el log comandos para el real código dentro de cada una de las if declaración de los bloques, además de la variable de tareas, como apropiado en ese momento en la ejecución del código, si los hubiere.

Tenga en cuenta que al envolver el código del grupo de if declaración de los bloques, que establece el nuevo valor de las variables basados en el valor de la list item, en un try declaración cuando hay menos items en la input list, no tiro un error que podría detener la ejecución del código, y continúa con el resto del código.

El valor de la variable es inicialmente asignado missing value, sin embargo "" (comillas dobles) puede ser utilizado en lugar así. Me gusta usar missing value a veces puede ser más fácil leer el código.

NOTA: El ejemplo de AppleScript código por encima de lo que es, y se codifica como es demostrar una forma de asignar las variables de un valor de una lista. Que es lo input es en el contexto de, por ejemplo, on run {input, parameters} de Ejecutar AppleScript acción en un Automator flujo de trabajo. Dependiendo de cuál sea la fuente de la input es y qué se va a hacer con él, usted puede necesitar agregar por ejemplo as string o as text o otros coerción tan apropiado como/si es aplicable, en este caso después de la item n of input, por ejemplo set F1 to item 1 of input as string.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X