5

我试图创建一个读取文本文件并将内容放入列表的 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

4 回答 4

8

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

仅在读取文件时,您也不需要全部打开以供访问,因此您的脚本可以简化为

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
于 2012-04-08T18:05:04.963 回答
2

read默认情况下使用 MacRoman,因此它会混淆 UTF-8 文件中的非 ASCII 字符,除非您添加as «class utf8». (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
于 2013-04-01T22:03:47.817 回答
1
set milefile to ((path to desktop as text) & "Alert.txt")
set theFileContents to (read file milefile)
display dialog theFileContents
于 2016-04-27T09:34:50.147 回答
0

AppleScript 的语言参考在第 120 页指出:

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

因此,U+8232 被忽略,AppleScript 从文件中返回整个文本……</p>

U+8232 在 TextEdit 中用作 CR 字符...</p>

于 2014-01-26T09:02:51.100 回答