1 votes

Comment obtenir une valeur d'une liste avec une chaîne de caractères en AppleScript ?

Ce que j'essaie de faire, c'est que la boîte de dialogue affiche l'adresse IP qui se trouve dans la liste.

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

il y a une erreur : error "input of {DNS1:\N-"8.8.8.8\N", DNS2:\N-"8.8.4.4\N"} kan niet worden opgevraagd. "Nombre -1728 à partir de l'entrée de {DNS1 : "8.8.8.8", DNS2 : "8.8.4.4"}.

Si c'est le cas :

set output to DNS1 of ipList

cela fonctionne, donc je pense que je devrais faire quelque chose avec une entrée variable.

Cela fait un certain temps que je cherche sur Internet, mais je n'arrive pas à trouver d'indice. Je suis presque sûr que la réponse se trouve déjà quelque part ici, mais je n'arrive pas à la trouver. Je m'en excuse.

MISE À JOUR : Je crois que j'ai mal posé la question.

Laissez-moi réessayer, j'ai une liste :

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

J'aimerais passer en revue les éléments en boucle. J'ai donc codé cela avec moins de code :

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"

Encore une fois, je suis un débutant, je suis désolé.

2voto

markhunte Points 11634

C'est ce que je pense :

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 Points 95239

Vous devez demander l'"élément" [enregistrement] auquel se réfère l'"étiquette" de la liste [propriété de l'enregistrement].
L'étiquette [propriété de l'enregistrement] est DNS1, l'élément [enregistrement] est la chaîne "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

Vous pouvez facilement l'abréger en

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

Mais j'imagine qu'elle fait partie d'une construction plus vaste.

Editer : btw, vous ne pouvez pas extraire un enregistrement par son index. Cela ne fonctionne que pour les listes sans structure prédéfinie propriété:enregistrement.

Edición 2 après l'édition de la question.

Essayez quelque chose comme ceci

--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"

NOTE : Je n'ai pas vraiment l'habitude de travailler en Applescript. Il traite les globaux et les locaux différemment de ce à quoi je suis habitué, donc mes déclarations en haut de page peuvent être exagérées, mais cela fonctionne de cette façon.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X