如何将CSV转换为多个列表(applescript)?

时间:2013-02-18 09:34:52

标签: macos list csv applescript

我一直在为此寻找一段时间而无法找到解决方案。我有一个CSV,例如以下数据:

1,2,3,A,B,C,4,5,6,d,E,F,7,8,9,0
0,9,8,G,H,I,7,6,4,K,L,M,5,4,3,2
等...

除了某些字段为true或false之外,每行主要包含不同的数据。

我需要的是将每一行拉成一个列表,然后才能解析数据。

我希望能够删除所有列表中的项目编号3,然后保存要在电子表格中使用的数据。

请记住,我对Applecript相对较新,所以仍然试图抓住它,买了一本似乎在很多网站上都非常推荐的书,但还没有交付! : - )

另外,如果你知道一种不同/更好的方法,那么我很乐意尝试。

目前我有以下内容:

  

块引用    - 设置变量
  将LF设置为ASCII字符10
   - 选择文件
  将prompt1设置为“请找到您的设备CSV文件...”   将csvDevices设置为“testfile.csv”
   - 将csvDevices设置为(选择带有提示prompt1的文件)
   - 将文件读入内存
  设置csvLines以读取csvDevices
  将AppleScript的文本项分隔符设置为{LF}
  将csvEntries设置为csvLines的段落
  将AppleScript的文本项分隔符设置为{“,”}
   - 过滤垃圾
  将csvNoTitle设置为csvEntries的其余部分 - 删除标题行
  将lineCount设置为count csvNoTitle

之后我能打印出内容,但它会给我

{ “1,2,3,A,B,C,4,5,6,d,E,F,7,8,9,0”,“0,9,8,G,H,I ,7,6,4,K,L,M,5,4,3,2" , “等...”}

而不是我想要的

{ “1”, “2”, “3”, “一”, “B”, “C”, “4”, “5”, “6”, “d”, “E”,“F ”, “7”, “8”, “9”, “0”}
{ “0”, “9”, “8”, “G”, “H”, “I”, “7”, “6”, “4”, “K”, “L”, “M”,” 5" , “4”, “3”, “2”}
{ “等...”}

顺便说一句,我删除了脚本中的第一行,因为它是一条没有实际有用数据的描述行,或者不管我是不是。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您应该将文本CSV文件分成记录(单行),然后将每个记录分成值(以逗号分隔)。您可以从CSV文本文件的这一点开始,以字符串形式(csvLines)。

-- getting records (you don't need to set applescript's text item delimiters here)
set recs to paragraphs of csvLines

-- getting values for each record
set vals to {}
set applescript's text item delimiters to ","
repeat with i from 1 to length of recs
    set end of vals to text items of (item i of recs)
end repeat

-- this is true
(item 1 of vals) = {"1","2","3","a","b","c","4","5","6","d","e","f","7","8","9","0"} 

这将解析整个文件而不进行过滤。但这只是为了给出正确的CSV解析的想法。您已经知道如何过滤数据。