Làm cách nào để có được giá trị từ danh sách có chuỗi trong AppleScript?


1

Những gì tôi cố gắng đạt được là hộp thoại sẽ xuất ra các địa chỉ IP có trong danh sách.

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

nó báo lỗi: lỗi "đầu vào của {DNS1: \" 8.8.8.8 \ ", DNS2: \" 8.8.4.4 \ "} kan niet worden opgevraagd." số -1728 từ đầu vào của {DNS1: "8.8.8.8" , DNS2: "8.8.4.4"}

Nếu tôi làm:

set output to DNS1 of ipList

nó hoạt động, vì vậy tôi đoán tôi nên làm gì đó với đầu vào biến.

Tôi đã googling một thời gian nhưng dường như tôi không thể tìm thấy một gợi ý. Tôi khá chắc chắn câu trả lời đã có ở đâu đó trên đây nhưng dường như tôi không thể tìm thấy nó. Xin lỗi vì chuyện đó.

CẬP NHẬT : Tôi nghĩ rằng tôi đã hỏi tất cả các câu hỏi sai.

Hãy để tôi thử lại, tôi có một danh sách:

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

Tôi muốn lặp qua các mục. Vì vậy, có mã này với ít mã hơn:

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"

Một lần nữa, tôi là người mới, tôi xin lỗi

Câu trả lời:


2

Đây sẽ là của tôi về điều này:

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

nhập mô tả hình ảnh ở đây


0

Bạn cần yêu cầu 'mục' [bản ghi] được gọi bằng danh sách 'nhãn' [thuộc tính bản ghi]
Nhãn [thuộc tính bản ghi] là DNS1, mục [bản ghi] là chuỗi "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

Bạn có thể dễ dàng viết tắt

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

Mặc dù tôi tưởng tượng nó là một phần của một công trình lớn hơn

Chỉnh sửa: btw, bạn không thể trích xuất một bản ghi theo chỉ mục của nó. Điều đó chỉ hoạt động cho danh sách mà không có thuộc tính được xác định trước: cấu trúc bản ghi.

Chỉnh sửa 2 sau khi chỉnh sửa câu hỏi.

Hãy thử một cái gì đó như thế này

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

LƯU Ý: Tôi không thực sự quen làm việc trong Applescript. Nó đối xử với toàn cầu và người dân địa phương khác với những gì tôi đã từng sử dụng, vì vậy những tuyên bố của tôi ở trên cùng có thể là quá mức cần thiết, nhưng nó hoạt động theo cách đó.


Đó là một phần của một điều lớn hơn và có lẽ tôi đã hỏi câu hỏi của tôi quá hạn chế. Cuối cùng, tôi muốn lặp qua danh sách này.
Johan Kuiper

không chắc chắn bạn có thể làm điều đó với các bản ghi, nếu danh sách có độ dài thay đổi. Nếu nó được sửa, thì bạn có thể gọi DNS1 rồi DNS2 nhưng bạn không thể gọi bằng một bản ghi 'không xác định'. Có thể tốt hơn để thêm dữ liệu thô & lặp qua nó theo chỉ mục. Điều này sẽ xuất hiện để đồng ý với tôi. Ví dụ đưa ra như câu trả lời không làm việc cho tôi. Trả lại tất cả các mục của ipList sẽ cung cấp cho bạn tất cả các giá trị, nhưng nó không liên kết chúng với bất kỳ bản ghi cụ thể nào
Tetsujin

cảm ơn vì đã trả lời, tôi đã cập nhật câu hỏi của mình để thể hiện những gì tôi cần. Tôi đã thấy câu hỏi mà bạn liên kết đến nhưng tôi không thấy sự tương đồng với câu hỏi của tôi :-)
Johan Kuiper

nó đề cập đến việc lặp lại một danh sách chứa các thuộc tính bản ghi, không thể thực hiện được [rõ ràng]. Câu hỏi đã chỉnh sửa của bạn không tham chiếu đến các thuộc tính ghi, vì vậy bây giờ tôi hơi bị mắc kẹt.
Tetsujin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.