将文本文件读入Applescript中的列表

时间:2012-04-08 17:32:56

标签: file text applescript

我尝试创建一个读取文本文件并将内容放入列表的AppleScript。该文件是一个简单的文本文件,其中每一行都如下所示:example-"example"

第一个是文件名,另一个是文件夹名。

现在是我的代码:

set listOfShows to {}
set theFile to readFile("/Users/anders/Desktop/test.txt")
set Shows to read theFile using delimiter return
repeat with nextLine in Shows
    if length of nextLine is greater than 0 then
        copy nextLine to the end of listOfShows
    end if
end repeat
choose from list listOfShows


on readFile(unixPath)
    set foo to (open for access (POSIX file unixPath))
    set txt to (read foo for (get eof foo))
    close access foo
    return txt
end readFile

当我运行输出时,我得到了这个:

error "Can not change \"Game.of.Thrones-\\\"Game Of \" to type file." number -1700 from "Game.of.Thrones-\"Game Of " to file"

我的列表看起来像这样:Game.of.Thrones-“权力的游戏”和另外两行。

4 个答案:

答案 0 :(得分:6)

错误在于您尝试读取文件的内容(您读取的第一个文件)作为文件。获取文本的段落会在返回/换行边界处将其分开,这通常比尝试猜测文件中使用的行尾字符更好。

在阅读文件时,您也不需要整个打开访问的东西,因此您的脚本可以简化为

set listOfShows to {}
set Shows to paragraphs of (read POSIX file "/Users/anders/Desktop/test.txt")
repeat with nextLine in Shows
    if length of nextLine is greater than 0 then
        copy nextLine to the end of listOfShows
    end if
end repeat
choose from list listOfShows

答案 1 :(得分:2)

默认情况下,

read使用MacRoman,因此除非添加as «class utf8»,否则它会在UTF-8文件中混乱非ASCII字符。 (as Unicode text是UTF-16。)

paragraphs of (read POSIX file "/tmp/test.txt") as «class utf8»

paragraphs of也适用于CRLF和CR行结尾。这不,但如果它是空的,它会忽略最后一行:

read POSIX file "/tmp/test.txt" as «class utf8» using delimiter linefeed

答案 2 :(得分:1)

set milefile to ((path to desktop as text) & "Alert.txt")
set theFileContents to (read file milefile)
display dialog theFileContents

答案 3 :(得分:0)

AppleScript的语言参考在第120页说明:

一系列字符,紧跟在前一段结尾之后的第一个字符或文本的开头之后,以回车字符(\ r),换行符(\ n),返回/换行符对结束(\ r \ n),或文本的结尾。不支持Unicode“段落分隔符”字符(U + 2029)。

因此,U + 8232被忽略,AppleScript从文件中返回整个文本......

U + 8232在TextEdit中用作CR字符......