2011-03-09 47 views
6

Groovy的分裂我解析CVS文件类似如下:没有最终修整

"07555555555",25.70,18/11/2010,01/03/2011,N,133,0,36,,896,537,547,,Mr,John,Doe,, 
"07555555555",10.15,26/01/2011,01/03/2011,N,16,0,100,,896,537,547,,Mrs,Jane,Doe,,[email protected] 

的事情是,使用这样的脚本时:

file.eachLine{ line -> 

    items = line.split(",") 
    println items.length 
} 

结果是类似如下:

16 
18 

这让我的事情是,分裂功能删除一个最终价值。我需要它拥有所有的物品,即使它们是空的。任何想法?

+2

这可能是值得你使用的不是重新创建的分析逻辑与CSV自己的图书馆。我建议使用opencsv或groovycsv https://github.com/xlson/groovycsv/,一个常规包装为opencsv(免责声明:我groovycsv的作者)。您可以在此处详细了解Groovy中解析CSV:http://www.kellyrob99.com/blog/2010/07/01/groovy-and-csv-how-to-get-your-data-out/ – xlson 2011-03-09 13:40:32

回答

4

我想你想做的事:

items = line.split(',', -1) 

,以确保您得到(根据the javadoc)中的所有令牌

极限参数控制 数倍的图案被施加 并因此影响的 所得阵列的长度。如果限制n大于零,那么图案 将至多n被施加更大的 - 1次, 数组的长度将没有 大于n,并且该阵列的最后一个条目 将包含超出匹配的最后一个 所有输入分隔符。 如果n是 非正则模式将被应用 多次尽可能和 阵列可具有任何长度。如果n是 为零,则该模式将被应用 多次可能,阵列 可以具有任何长度,并且拖尾 空字符串将被丢弃。

+0

谢谢您非常! – 2011-03-10 07:46:05