我有一个以下格式的csv文件。如果程序读取了其中一个beow csv数据,我会遇到问题
“D”,abc“def”,“,”0429“292”0“,”11“,”IJ80“,”Feb10_1.txt-2“,”文件记录“,”05/02/2010“ , “04/03/2010”, “”, “1”, “ - 91”, “” “”
“D”,“abc”def“,”“,”04292920“,”11“,”IJ80“,”Feb10_1.txt-2“,”文件记录“,”05/02/2010“,” 04/03/2010" , “”, “1”, “ - 91”, “” “”
下面的split命令用于忽略双引号内的逗号,我从之前的帖子中获得了下面的split命令。粘贴我使用此命令的URL
String items [] = line.split(“,(?=([^ \”] \“[^ \”] \“) [^ \”] $)”,15); 的System.out.println( “items.length” + items.length);
Regarding Java Split Command Parsing Csv File
将items.length打印为14而不是15. abc“def不被识别为单个字段,并且它被错误地存储为 “D”,abc“def in items [0]。我希望它以下面的方式存储
项目[0]应为“D”,项目[1]应为abc“def
当存在值“abc”def“时会发生同样的问题。我希望将其存储为
项目[0]应为“D”,项目[1]应为“abc”def“
如果在双引号内重复双引号(字段值为D,“abc”“def”,1),则此split命令也能正常工作。
如何解决此问题。
答案 0 :(得分:4)
我认为编写解析器来解析CSV文件而不是尝试使用正则表达式会好得多。一旦你开始处理行内回车的CSV文件,那么正则表达式可能会崩溃。编写一个遍历所有字符并分割数据的简单while循环不需要那么多代码。当你有一个解析器而不是正则表达式时,处理诸如你的“非标准”* CSV文件要容易得多。
*我说非标准,因为没有真正的CSV官方标准,当你处理来自许多不同系统的CSV文件时,你会看到很多奇怪的东西,比如abc“def field,如图所示上方。
答案 1 :(得分:3)
opencsv是一个非常简单,重量轻的Java解析器。它可以轻松处理您的数据。
答案 2 :(得分:0)
如果可能,更改CSV格式会使解决方案变得非常简单。
有关Delimiter Separated Values的概述,请参阅以下内容,这是基于Unix的系统上的常见格式:
答案 3 :(得分:0)
Opencsv是非常简单且最佳的CSV解析API。在使用Java进行处理之前,可以使用Linux SED命令完成此操作。如果File格式不正确,则将其转换为适当的分隔符(即#34;,")到管道或其他唯一分隔符,因此可以通过Opencsv轻松区分内部字段值和列分隔符。使用权限你的java代码的linux。