2017-10-11 84 views
1

我想解析一个使用Univocity CSV引号的CSV,我发现在解析某些值时缺少关闭引号。Univocity CSV:解析后缺少引号

CSV: 
ACCT,NAME,AGE,ADDRESS 
700,GINI,23,"AB,ECITY-1" 
800,HANNAH,30,"AB,ECITY-1" 
900,IAN,40,"XYZ,ECITY-1" 
1900,LYDIA,40,"XYZ,ECITY-1" 

输出:

[GINI, "AB,ECITY-1] 
[HANNAH, "AB,ECITY-1] 
[IAN, "XYZ,ECITY-1] 
[LYDIA, "XYZ,ECITY-1] 



CsvParserSettings settings = new CsvParserSettings(); 
settings.getFormat().setLineSeparator("\n"); 
settings.setKeepQuotes(true); 
settings.setQuoteDetectionEnabled(false); 
settings.trimValues(true); 
settings.excludeFields(excludeHeaders.split("ACCT,AGE")); 
CsvParser baseFileParser = new CsvParser(settings); 
String[] baseRow; 
baseFileParser.beginParsing(baseFile); 
while((baseRow = baseFileParser.parseNext())!= null){ 
     System.out.println(Arrays.toString(baseRow)); 
} 

我在想什么。为什么输出中缺少关闭报价?

回答

1

找到了答案myslef ..不得不删除以下行,如果上述线路是否使用版本2.5.8删除

0

settings.getFormat().setLineSeparator("\n"); 

代码工作正常?如果不是,那么这看起来与我最近修复的a bug有关。只是更新,它会工作。

一点解释:

在你的情况下,错误将体现出来,如果你设置settings.getFormat().setLineSeparator("\n");但输入文件具有\r\n作为分隔符。 \r将由解析器作为空白处理并触发该错误。

这就是为什么要删除settings.getFormat().setLineSeparator("\n");为你工作 - 如果你在Windows上,解析器使用的默认行分隔符将是\r\n。这将避免该错误,因为在行结束之前没有尾随空白。