2015-03-19 51 views
0

我有一个CSV文件看起来像这样:阅读从CSV文件中的记录头 - java的

Field 1 field 2        field 3    
TestData MARTIN,12/2/2/2:JOHN 12/2/2  2015/12/12 

我想从field 2提取,例如姓名MartinJohn。我在文件中读取并拆分了,。这并不完全正常,因为field 2里面包含逗号,它会分裂它。有没有解决这个问题的方法或从特定单元格中提取数据的方法(例如,只需将文件中的所有字段2都提供给我)?

+0

这看起来不像一开始的CSV文件。并且在CSV语法中,通常使用双引号(例如:“John”,“1,231.23”,“Male”')包装内容来转义逗号。 – gerrytan 2015-03-19 11:16:19

+0

如果字段中存在未转义的逗号,则这不是CSV文件,而是TSV(制表符分隔值)格式。 – hexafraction 2015-03-19 11:16:30

回答

0

通常,如果CSV中的字段包含逗号,则需要引用它们。所以一行应该看起来像这样:

TestData,"MARTIN,12/2/2/2:JOHN 12/2/2",2015/12/12是一个正确的CSV。

您确定您没有TSV(制表符分隔值)文件吗?在这种情况下,您可以分开做

String[] fields = line.split('\t') 
String[] persons = split(1).split(',') 
+0

虽然仔细检查“马丁,12/2/2/2:约翰12/2/2”似乎也不太经常。你似乎在马丁和约翰之后有一个','。所以你可能不得不使用'String.indexOf'和'String.substring'来写更多的定制 – 2015-03-19 11:19:19

0

处理CSV文件的最佳方法是使用CSV库。我使用OpenCSV http://opencsv.sourceforge.net/,但也有其他的。 OpenCSV处理转义逗号以及阅读标题等,它还处理制表符分隔的文件。

0

包含逗号的字段应在CSV中引用,并且包含引号的字段将使它们被另一个引号转义。例如:

"here's a comma, and some ""quoted text"" as well" 

然而,CSV “格式” 是有点梦魇,with no proper specification的。

我不会建议在good ones already exist的时候尝试编写自己的解析器。