我想将CSV文件作为2D数组读入,然后将其返回CSV文件。 假设这是我的CSV文件。这是一个excel文件和|暗示相邻的单元格:
family | type
Doctor | Pediatrics
Engineer | Chemical
根据我的理解,AppleScript上没有数组,只有列表和记录。如果使用XLSX文件更好,请告诉我。
答案 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开始)访问 - 它们的行为与大多数其他语言中的数组非常相似。