¿Cómo obtener un valor de una lista con una cadena en AppleScript?

1

Lo que trato de lograr es que el cuadro de diálogo muestre las direcciones IP que están en la lista.

set ipList to {DNS1:"8.8.8.8", DNS2:"8.8.4.4"}
set input to "DNS1"
set output to input of ipList
display dialog output

da un error: error "entrada de {DNS1: \" 8.8.8.8 \ ", DNS2: \" 8.8.4.4 \ "} kan niet worden opgevraagd." número -1728 de la entrada de {DNS1: "8.8.8.8", DNS2: "8.8 .4.4 "}

Si lo hago:

set output to DNS1 of ipList

funciona, así que supongo que debería hacer algo con entrada variable.

He estado buscando en Google desde hace algún tiempo, pero parece que no puedo encontrar una pista. Estoy bastante seguro de que la respuesta ya está en algún lugar aquí, pero parece que no puedo encontrarla. Lo siento por eso.

ACTUALIZACIÓN : creo que hice la pregunta de forma incorrecta.

Déjame reintentar, tengo una lista:

set ipList to {DNS1:"8.8.8.8", DNS2:"8.8.4.4"}

Me gustaría recorrer los elementos. Así que tienen este codificado con menos código:

set IP_address to "8.8.8.8"
try
    set ping to do shell script ("ping -c 2 " & IP_address & "| head -2 | tail -1 |cut -d = -f 4")
    if ping contains "ms" then
        set Output1 to "DNS 1 UP"
    else if ping contains "timeout" then
        set Output1 to "DNS 1 DOWN"
    end if
end try
set IP_address to "8.8.4.4"
try
    set ping to do shell script ("ping -c 2 " & IP_address & "| head -2 | tail -1 |cut -d = -f 4")
    if ping contains "ms" then
        set Output2 to "DNS 1 UP"
    else if ping contains "timeout" then
        set Output2 to "DNS 1 DOWN"
    end if
end try

display dialog (Output1 & return & Output2) buttons {"OK"} default button 1 with title "Resultaat"

Una vez más, soy un novato, lo siento

    
pregunta Johan Kuiper 31.12.2014 - 12:58

2 respuestas

2

Esta sería mi opinión sobre esto:

set ipList to {"8.8.8.8", "8.8.8.6", "8.8.4.4"}
set Output1 to ""
set Output2 to ""
global Output1, Output2
repeat with i from 1 to number of items in ipList
    set this_item to item i of ipList
    my ipCheck(this_item, i)
end repeat


if Output1 is not "" or Output2 is not "" then
    display dialog (Output1 & Output2) buttons {"OK"} default button 1 with title "Resultaat"
end if

on ipCheck(IP_address, i)
    try
        set ping to do shell script ("ping -c 2 " & IP_address & "| head -2 | tail -1 |cut -d = -f 4")
        if ping contains "ms" then
            set Output1 to Output1 & return & "DNS" & i & "  UP"
        else if ping contains "timeout" then
            set Output2 to Output2 & return & "DNS" & i & " DOWN"
        end if
    end try
end ipCheck

    
respondido por el markhunte 31.12.2014 - 17:49
0

Debe solicitar el "elemento" [registro] al que hace referencia la lista "etiqueta" [propiedad de registro]
La etiqueta [propiedad de registro] es DNS1, el elemento [registro] es la cadena "8.8.8.8"

set ipList to {DNS1:"8.8.8.8", DNS2:"8.8.4.4"}
set input to DNS1 of ipList
set output to input
display dialog output

Fácilmente puedes simplemente apuntar que

set ipList to {DNS1:"8.8.8.8", DNS2:"8.8.4.4"}
display dialog DNS1 of ipList

Aunque me imagino que es parte de una construcción más grande

Editar: por cierto, no puede extraer un registro por su índice. Eso solo funciona para listas sin propiedades predefinidas: estructuras de registro.

Editar 2 después de editar la pregunta.

Prueba algo como esto ...

--debug only, to save actually doing the ping, swap to test
--set ping to "ms"
set ping to "timeout"

global ipList
global resultsList
global theString
set ipList to {"8.8.8.8", "8.8.4.4"}
set resultsList to {}
set theString to ""

repeat with IP_address in ipList
    --set ping to do shell script ("ping -c 2 " & IP_address & "| head -2 | tail -1 |cut -d = -f 4")
    if ping contains "ms" then
        set the end of resultsList to IP_address & " UP"
    else if ping contains "timeout" then
        set the end of resultsList to IP_address & " DOWN"
    end if
end repeat

--build dialog
repeat with theReturn in resultsList
    set theString to theString & (theReturn & return)
end repeat
display dialog (theString) buttons {"OK"} default button 1 with title "Resultaat"

NOTA: Realmente no estoy acostumbrado a trabajar en Applescript. Se trata de los globales y amp; los locales de manera diferente a lo que estoy acostumbrado, por lo que mis declaraciones en la parte superior pueden ser excesivas, pero funciona de esa manera.

    
respondido por el Tetsujin 31.12.2014 - 13:21

Lea otras preguntas en las etiquetas