2013-04-01 110 views
1

我想要將一個html文件讀入AppleScript中的變量,我有以下代碼。在AppleScript中讀取文件

tell application "Finder" 
    set theItems to every file of folder folderName 
    repeat with theFile in theItems 
     open for access theFile 
     set fileContents to (read theFile) 
    end repeat 
end tell 

現在我得到這樣一個錯誤:

Finder got an error: Can’t make document file "index.html" of folder 
[...] of startup disk into type «class fsrf». 

我在做什麼錯?我跟着this的例子。 HTML文件不被識別爲文本?

回答

3

你必須到Finder文件對象轉換爲別名或文字。

read可以在沒有單獨的打開或關閉命令的情況下使用。它雖然讀取文件作爲MacRoman沒有as «class utf8»。 (as Unicode text是UTF-16)

tell application "Finder" to files of folder "HD:Users:lauri:Sites" as alias list 
repeat with f in result 
    read f as «class utf8» 
end repeat 
2

嘗試:

tell application "Finder" to set theItems to every file of folder folderName 
repeat with theFile in theItems 
    set aFile to POSIX path of (theFile as text) 
    set fileContents to do shell script "cat " & quoted form of aFile 
end repeat 
1

從原始代碼開始,這應該這樣做:

set folderPath to choose folder 
set someData to "" 
tell application "Finder" 
    set theItems to every file of folder folderPath as list 
    repeat with theFile in theItems 
     set theFilePath to theFile as text 
     if characters -5 thru -1 of theFilePath as string is ".html" then 
      set theFileHandle to (open for access file theFilePath) 
      set fileContents to (read theFileHandle) 
      -- for testing, call some function 
      set someData to someData & return & processHtml(fileContents) of me 
      close access theFileHandle 
     end if 
    end repeat 
    -- do something with someData here 
    return someData 
end tell 

on processHtml(theData) 
    -- do something with theData here 
    return theData 
end processHtml 

正如勞裏寫道,你可以加上 「«類UTF8»」 讀文件爲UTF8。你也可以使用UTF16的「作爲Unicode文本」。就我個人而言,我喜歡這個,因爲它是香草AppleScript,不需要shell腳本。

+0

我仍然在'open for access'中得到同樣的錯誤,它不能將文檔文件「blablabla.html」輸入到「class fsrf」類型中。 – noio

+1

我編輯了腳本。現在要求您選擇一個文件夾,以確保folderPath正確。將文件路徑轉換爲文本,然後將其顯式引用爲文件似乎可行。對不起,我不知道爲什麼在列表中使用別名不起作用,但可能是因爲按定義(?)列表項不是別名。我添加了一個條件,它可以防止加載圖片和其他二進制文件。我已經添加了一個函數processHtml來演示你可以用這個做什麼。 – Mark

1

使用open進行訪問確實是很難實現的。

如果要使用AppleScript讀取HTML文件,那麼最好的方法是使用AppleScript告訴HTML編輯器爲您讀取HTML文件。這是AppleScript工作的基本方式。這就是爲什麼「告訴」是最重要的命令。這就是爲什麼你可以完成的讀取HTML文件到一個變量,在短短3行自己的目標:

tell application "BBEdit" 
    open (choose file) 
    set theHTMLSource to the text of document 1 
    close document 1 
end tell 

下面的腳本擴展了上述從所選文件夾中讀取HTML文件的任意數量。它適用於BBEdit 9,並且還應該使用BBEdit的免費版本,該版本名爲「TextWrangler」,可在Mac App Store中使用。或者你可以很容易地修改這個腳本,用於HyperEdit或TextEdit,或者任何你喜歡使用的支持AppleScript的HTML /文本編輯器。

tell application "Finder" 
    set theFolder to (choose folder) 
    set theFiles to every file of folder theFolder 
    set theHTMLSourceList to {} 
    repeat with theFile in theFiles 
     if the kind of theFile is equal to "HTML document" then 
      set theName to the name of theFile 
      tell application "BBEdit" 
       open file (theFile as text) 
       set theSource to the text of document 1 
       copy {theName, theSource} to the end of theHTMLSourceList 
       close document 1 
      end tell 
     end if 
    end repeat 
end tell 

當上面的腳本執行完畢,變量「theHTMLSourceList」填充了名字和HTML文件的整個文件夾的源代碼,就像這樣:

{{name of file 1, source of file 1}, {name of file 2, source of file 2}, {name of file 3, source of file 3}} 

...依此類推,直到到任意數量的文件。但是,當然,您可以讓腳本以您喜歡的任何方式將HTML源代碼返回給您。關鍵在於支持AppleScript的HTML編輯器既可以讀取HTML,也可以設置AppleScript變量,因此您不必在小型AppleScript中編寫(調試和維護)自己的HTML閱讀器。