AppleScript - Come impostare le variabili per un numero indeterminato di voci di elenco?

1

Sono nuovo di AppleScript. Sto provando a creare uno script che tenga gli elementi dell'elenco da una precedente azione del flusso di lavoro di Automator e li converta in variabili.

Ci sarà un numero indeterminato di voci di elenco (beh, tra 1 e 40 ciascuna corsa).

Funziona per un determinato numero di voci di elenco, diciamo tre.

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

Ma se ci sono solo due elementi di lista generati dall'azione precedente del flusso di lavoro, ci imbattiamo in problemi.

Quindi, ho aggiornato lo script utilizzando if per cercare di risolvere questo 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

Quando lo eseguo, viene popolata solo la prima variabile F1 . Gli altri sono lasciati in bianco / non popolano. Non sono sicuro di come andare avanti con questo?

Qualcuno può dirmi se sono sulla strada giusta o se c'è un modo migliore per farlo?

    
posta Jon Gordon 07.12.2017 - 16:54
fonte

1 risposta

1
La dichiarazione

Variabile deve essere fatta prima del tempo eseguito . Il seguente esempio codice , eseguito in Script Editor , è per dimostrare un modo di farlo:

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

Il risultato del log è:

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

Ovviamente il comando log viene usato per mostrare che alle variabili è stato assegnato un nuovo valore , tranne l'ultimo perché il input list conteneva solo tre elementi . Avrai bisogno di crearlo perché potrebbero essere necessarie molte variabili , poiché non puoi aggiungerle dopo l'esecuzione del codice . Hai menzionato "tra 1 e 40 alla volta" nel tuo OP.

Rimuoverei log comandi per il codice reale all'interno di ciascuno dei blocchi if , oltre a < em> variabili assegnazioni, a seconda dei casi, nell'esecuzione del codice , se ce ne sono.

Si noti che avvolgendo il codice del gruppo di blocchi if istruzione , questo imposta il nuovo valore di variabili basate sul valore di list item , in una try istruzione quando ci sono meno items nella input list , non lancia un errore che interrompe l'esecuzione del codice e continua con il codice rimanente.

Il valore della variabile viene inizialmente assegnato a missing value , tuttavia è possibile utilizzare anche "" (virgolette). Mi piace usare missing value a volte perché può essere più facile leggere il codice .

NOTA: il esempio AppleScript codice sopra questo, ed è codificato come è per dimostrare un modo di assegnare le variabili un valore da un elenco . Qual è cosa input è nel contesto di ad es. on run {input, parameters} di un'azione Esegui AppleScript in un flusso di lavoro Automator . A seconda di quale sia la fonte di input e di cosa sarà fatto con esso, potresti dover aggiungere, ad es. as string o as text o altra coercizione appropriata / se applicabile, in questo caso dopo item n of input , ad es. set F1 to item 1 of input as string .

    
risposta data 12.12.2017 - 08:37
fonte

Leggi altre domande sui tag