使用AppleScript将CSV文件读取为Array

时间:2012-05-12 21:24:46

标签: csv applescript applescript-excel

我想将CSV文件作为2D数组读入,然后将其返回CSV文件。 假设这是我的CSV文件。这是一个excel文件和|暗示相邻的单元格:

family | type
Doctor | Pediatrics
Engineer | Chemical

根据我的理解,AppleScript上没有数组,只有列表和记录。如果使用XLSX文件更好,请告诉我。

3 个答案:

答案 0 :(得分:5)

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})

答案 1 :(得分:4)

数组只是applescript中的一个列表,所以你需要一个二维数组或一个在applescript中的列表列表。如果您了解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读取和写入文本文件。祝你好运;)

答案 2 :(得分:0)

如果您的问题只是在AppleScript中对CSV数据进行建模,那么解决方案就是使用这样的记录列表:

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

然后你可以在repeat with aRow in csvData循环中再次读出它。

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