1 votos

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

Lo que trato de conseguir es que el cuadro de diálogo dé salida a 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 "la entrada de {DNS1: "8.8.8.8", DNS2: "8.8.4.4"} no se puede recuperar. "número -1728 de 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 la entrada variable.

Llevo tiempo buscando en Google pero no encuentro ninguna pista. Estoy seguro de que la respuesta ya está en algún lugar de aquí, pero no puedo encontrarla. Lo siento por ello.

ACTUALIZACIÓN : Creo que he formulado mal la pregunta.

Déjame volver a intentarlo, tengo una lista:

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

Me gustaría hacer un bucle con los artículos. Así que tener esto 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"

De nuevo, soy un novato, lo siento

2voto

Malik hassan Puntos 16

Esta sería mi opinión al respecto:

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

enter image description here

0voto

Tetsujin Puntos 23061

Tiene que pedir el "elemento" [registro] al que se refiere la "etiqueta" de la lista [propiedad del registro]
La etiqueta [propiedad del 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

Se puede abreviar fácilmente como

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

Aunque imagino que es parte de una construcción mayor

Editar: Por cierto, no se puede extraer un registro por su índice. Eso sólo funciona para las listas sin estructuras predefinidas propiedad:registro.

Edición 2 tras la edición de la pregunta.

Prueba algo así

--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: No estoy muy acostumbrado a trabajar en Applescript. Trata los globales y los locales de manera diferente a lo que estoy acostumbrado, por lo que mis declaraciones en la parte superior puede ser una exageración, pero funciona de esa manera.

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