2010-09-01 39 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的新生產線的讀取器。

我不知道我是否可以提供代碼,如果您對解決方案有興趣,我可以深入細節以幫助您創建新代碼。