5

我想以二维数组的形式读入 CSV 文件,然后将其返回到 CSV 文件。假设这是我的 CSV 文件。它是一个 excel 文件和 | 表示相邻单元格:

family | type
Doctor | Pediatrics
Engineer | Chemical

据我了解,applescript 上没有数组,只有列表和记录。如果使用 XLSX 文件执行此操作会更好,请告诉我。

4

3 回答 3

7

Nigel 的 CSV-to-list 转换器是我见过的最好的...

http://macscripter.net/viewtopic.php?pid=125444#p125444

对于您的示例,请使用以下设置:

set csvText to "family | type
Doctor | Pediatrics
Engineer | Chemical"
csvToList(csvText, {separator:"|"}, {trimming:true})

v2

set csvText to read "/Users/user1385816/Desktop/yourfile.csv"
csvToList(csvText, {}, {trimming:true})
于 2012-05-13T04:13:58.400 回答
4

数组只是 applescript 中的一个列表,因此您需要一个二维数组或 applescript-speak 中的列表列表。如果您了解 applescript 的文本项分隔符,那么您的任务就是将字符串转换为列表的简单操作,反之亦然。所以我给你写了几个处理程序来让你轻松完成任务;textToTwoDArray() 和 twoDArrayToText()。第一个示例展示了如何使用 textToTwoDArray() 将字符串转换为列表列表。

注意:您必须注意文本文件中的行尾,因为它们可以是回车(字符 id 13)或换行符(字符 id 10)。您可以看到我在代码中使用了字符 id 10,但如果您没有得到正确的结果,请尝试“13”。

set fileText to "family | type
Doctor | Pediatrics
Engineer | Chemical"

textToTwoDArray(fileText, character id 10, " | ")

on textToTwoDArray(theText, mainDelimiter, secondaryDelimiter)
    set {tids, text item delimiters} to {text item delimiters, mainDelimiter}
    set firstArray to text items of theText
    set text item delimiters to secondaryDelimiter
    set twoDArray to {}
    repeat with anItem in firstArray
        set end of twoDArray to text items of anItem
    end repeat
    set text item delimiters to tids
    return twoDArray
end textToTwoDArray

以下是如何使用 twoDArrayToText() 将列表列表转换回您的字符串。

set twoDArray to {{"family", "type"}, {"Doctor", "Pediatrics"}, {"Engineer", "Chemical"}}

twoDArrayToText(twoDArray, character id 10, " | ")

on twoDArrayToText(theArray, mainDelimiter, secondaryDelimiter)
    set {tids, text item delimiters} to {text item delimiters, secondaryDelimiter}
    set t to ""
    repeat with anItem in theArray
        set t to t & (anItem as text) & mainDelimiter
    end repeat
    set text item delimiters to tids
    return (text 1 thru -2 of t)
end twoDArrayToText

所以现在你所要做的就是弄清楚如何用 applescript 读写文本文件。祝你好运 ;)

于 2012-05-12T23:45:42.990 回答
0

如果您的问题只是关于在 AppleScript 中对 CSV 数据进行建模,则解决方案是使用如下记录列表:

set csvData to {{family:"Doctor", type:"Engineer"}, {family:"Engineer", type:"Chemical"}}

repeat with aRow in csvData然后,您可以在循环中再次读取它。

技术说明:AppleScript 列表是作为向量实现的,这意味着它们是有序的并且可以通过数字索引(从索引 1 开始)访问——它们的行为与大多数其他语言中的数组非常相似。

于 2012-05-12T22:52:20.347 回答