2017-06-21 65 views
0

自從我接觸AppleScript已經很長時間了,所以這可能是我只是沒有做正確的事情。我有一個通過收集第二個到路徑中最後一個文本項目創建的列表。該路徑將是這個樣子:AppleScript從列表中選擇對象類型

HD:用戶:XXXXXXXX:圖書館:開發商:Xcode中:檔案:2017年6月14日:關注17年6月14日,8.03 AM.xcarchive:」

和所以列表中填充字符串是這個樣子:關注17年6月14日,8.03 AM.xcarchive

我再呈現給用戶,並要求他們選擇存檔我有一個包含所有的另一個列表歸檔路徑,我想要做的是將所選的歸檔文件找出來,找到它在歸檔名稱列表中的索引,然後從歸檔路徑列表中取出路徑,非常簡單,至少我認爲。看起來像這樣:

set myFile to choose from list archiveFileNames with prompt "Select An Archive" 
    -->return class of myFile 

    repeat with i from 1 to count of every item of archiveFileNames 

     if (myFile is equal to (item i of archiveFileNames as string)) then 
      log myFile & "::" & item i of archiveFileNames & "::" & i 
     end if 
    end repeat 

我從來沒有一場比賽,儘管如果我只是通過壓縮文件名列表重複和使用日誌語句,我可以得到的結果,我在尋找:

log myFile & "::" & item i of archiveFileNames & "::" & i 

(見最後結果爲比賽)

(*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-1-17, 1.40 PM.xcarchive, ::, 1*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-1-17, 10.48 AM.xcarchive, ::, 2*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-1-17, 11.04 AM.xcarchive, ::, 3*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-1-17, 11.24 AM.xcarchive, ::, 4*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-1-17, 9.37 AM.xcarchive, ::, 5*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-3-17, 2.01 PM.xcarchive, ::, 6*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-3-17, 2.02 PM.xcarchive, ::, 7*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-5-17, 2.51 PM.xcarchive, ::, 8*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-12-17, 8.49 AM.xcarchive, ::, 9*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-12-17, 8.53 AM.xcarchive, ::, 10*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 5-16-17, 11.43 AM.xcarchive, ::, 11*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 6-5-17, 1.42 PM.xcarchive, ::, 12*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 6-6-17, 10.37 AM.xcarchive, ::, 13*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 6-6-17, 4.09 PM.xcarchive, ::, 14*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 6-13-17, 4.01 PM.xcarchive, ::, 15*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 6-14-17, 11.36 AM.xcarchive, ::, 16*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 6-14-17, 8.00 AM.xcarchive, ::, 17*) 
    (*focus 6-14-17, 8.03 AM.xcarchive, ::, focus 6-14-17, 8.03 AM.xcarchive, ::, 18*) 

所以我想,這一定是一類/類型的問題,即沒有平等,因爲我比較蘋果和桔子。當我運行它並有 - >返回myFile的類未註釋時,我得到從列表中選擇的類是一個列表。

顯然我做錯了什麼。我期待的類型是字符串,也許是文本,而不是列表。幫助我Obi Wans,你是我唯一的希望! :d

編輯:好了,如果我改變的條件這樣:

如果(MYFILE等於(項目archiveFileNames的我爲列表)),然後

我得到預期的結果。但是我仍然對爲什麼從一個字符串列表中選擇一個對象的類型是一個列表感到困惑。

回答

1

出現問題原因choose from list回報總是列表對象的(或布爾false如果用戶按下取消) 。

您必須將列表弄平。

set myFile to choose from list archiveFileNames with prompt "Select An Archive" 

if myFile is false then return 
set myFile to item 1 of myFile 
repeat with i from 1 to count of every item of archiveFileNames 
    set currentItem to item i of archiveFileNames 
    if myFile = currentItem then 
     log myFile & "::" & currentItem & "::" & i 
    end if 
end repeat 
+0

它是否一直都是這樣的,我不記得有這樣做,在過去,但它已經6年左右,因爲我已經做任何硬核的AppleScript – PruitIgoe

+0

它一直是這樣的。 – vadian

0

嘗試與改變的類型加載項

as text 

所以不是比較

if A is B 

可能失敗不同類別 - 做一個脅迫文本

if (A as text) is (B as text) 

此外,這裏有一個處理程序來獲取物品在列表中的位置

on list_position(this_item, this_list) 
    repeat with i from 1 to the count of this_list 
  if ((item i of this_list) as text) is (this_item as text) then return i 
  end repeat 
return 0 
end list_position 

編輯:澄清你的名單問題,請向您展示如何創建列表