AppleScript에서 문자열이있는 목록에서 값을 가져 오는 방법은 무엇입니까?


1

내가 성취하려고하는 것은 대화 상자에 목록에있는 IP 주소를 출력해야한다는 것입니다.

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

그것은 오류를 준다 : {DNS1 : "8.8.8.8", DNS2 : "8.8.4.4" "입력란 번호 -1728에서"DNS1 : "8.8.8.8", DNS2 : "8.8 .4.4 "}

만약 내가한다면:

set output to DNS1 of ipList

그것은 작동하므로 내 생각에 나는 가변 입력으로 뭔가를해야한다.

나는 지금 약간의 시간 동안 인터넷 검색을 해왔지만 힌트를 찾을 수없는 것 같습니다. 나는 대답이 이미 여기 어딘가에 있음을 확신하지만 나는 그것을 찾을 수 없을 것 같다. 그 죄송합니다.

최신 정보 : 나는 그 질문에 모두 잘못했다고 생각한다.

다시 시도하겠습니다. 목록이 있습니다.

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

항목을 반복하고 싶습니다. 그래서 적은 코드로 코딩하십시오 :

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"

다시, 나는 초보자이다, 미안하다.

답변:


2

이것은 이것에 대한 나의 것입니다 :

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


0

당신은 목록 '라벨'에 의해 참조되는 '아이템'[레코드]를 요구할 필요가 있습니다 [레코드 속성]
[레코드 속성] 레이블이 DNS1이고 항목 [레코드]가 문자열 "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

간단히 요약하면

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

비록 그것이 더 큰 건축의 일부라고 상상하지만

편집하다: btw, 인덱스로 레코드를 추출 할 수 없습니다. 이것은 미리 정의 된 속성이없는 목록에 대해서만 작동합니다 : 레코드 구조.

편집 2 질문 편집 후.

이런 식으로 해보십시오 ...

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

참고 : 저는 AppleScript로 작업하는 데 익숙하지 않습니다. 그것은 전역 & amp; 내가 익숙한 것과는 다른 방식으로 지역 주민이 있기 때문에 맨 위에있는 선언은 과도 할 수도 있지만 그렇게 작동합니다.


그것은 더 큰 일의 일부이고 어쩌면 내가 너무 제한된 내 질문을했습니다. 결국이 목록을 반복하고 싶습니다.
Johan Kuiper

목록이 가변 길이 인 경우 레코드로 그 작업을 수행 할 수 있는지 확신 할 수 없습니다. 문제가 해결되면 DNS1을 호출 한 다음 DNS2를 호출 할 수 있지만 '알 수없는'레코드는 호출 할 수 없습니다. 원시 데이터를 추가하는 것이 좋습니다. & amp; 인덱스를 통해 반복합니다. 나와 일치하는 것처럼 보일 것입니다. 답변으로 주어진 예제는 나를 위해 작동하지 않습니다. return ipList의 모든 항목은 모든 값을 제공하지만 특정 레코드에 연결하지는 않습니다.
Tetsujin

응답 주셔서 감사합니다, 나는 내 질문을 내가 필요한 것을 보여주기 위해 업데이트했습니다. 내가 연결된 질문을 보았지만 내 질문과의 유사성을 보지 못했습니다 :-)
Johan Kuiper

[분명히] 수행 할 수없는 레코드 속성을 포함하는 목록을 반복하는 것을 가리키는 것입니다. 편집 한 질문은 레코드 속성에 대한 참조가 없으므로 지금 조금 붙어 있습니다.
Tetsujin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.