2010-09-01 37 views
1

我想解析一个csv文件到2d数组中,其中每一行是一个数据项,每列是该项中的一个字段。如何正确解析CSV文件到2d数组?

一次做到这一切简化和分离我的处理代码从我的解析代码。

我试着编写一个简单的解析器,使用String.Split以逗号分隔文件。我发现这是一种可怕的方法。它完全无法解析任何特殊情况,如双引号,换行符和其他特殊字符。

正如我所描述的,将CSV文件解析为二维数组的正确方法是什么?

Java代码示例将不胜感激。 该数组可以是一个动态列表对象或向量或类似的东西,它只需要索引两个索引器。

回答

0

看一看Commons CSV

CSVParser parser = new CSVParser(new FileReader(file)); 
String[] line; 
while ((line = parser.getLine()) != null) { 
    // process 
} 
0

这里是another reader

+0

您正在链接一个C#项目,而不是一个java项目 – jontro 2012-07-18 10:02:37

0

如果你的文件有包含分离器和领域与换行,比我怀疑这是一个真正的csv文件用双引号条目场......一个适当的CSV文件是这样的

1;John;Doe;engineer,manager 
2;Bart;Foo;engineer,dilbert 

而这是“别的东西”:

1;John;Doe;"engineer;manager" 
2;Bart;Foo; 
    "engineer,dilbert" 

以及第一例子是可分析与String.split每行。

+0

CSV文件可能要复杂得多。在这里阅读这个正式的规范:http://supercsv.sourceforge.net/csvSpecification.html,你会看到在报价中允许使用换行符和双引号等 – CodeFusionMobile 2010-09-01 14:00:03

0

我们几个月前就有这种问题,所以后来我们在C#创造了一个解决方案,约实现的IEnumerable接口,并在每个互为作用读取CSV的新生产线的读取器。

我不知道我是否可以提供代码,如果您对解决方案有兴趣,我可以深入细节以帮助您创建新代码。