我正在尝试使用Univocity CSV解析带引号的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));
}
我错过了什么。为什么输出中缺少密切报价?
答案 0 :(得分:1)
找到答案myslef ..必须删除下面的行
settings.getFormat().setLineSeparator("\n");
如果删除上面的代码,代码就可以正常工作
答案 1 :(得分:0)
您使用的是2.5.8版本吗?如果没有,那么这看起来与我最近修复的a bug有关。只需更新即可。
一点解释:
在您的情况下,如果您设置settings.getFormat().setLineSeparator("\n");
但输入文件具有\r\n
作为分隔符,则错误将自行显示。 \r
将由解析器作为空格处理并触发错误。
这就是为什么删除settings.getFormat().setLineSeparator("\n");
为你工作的原因 - 如果你在Windows上,解析器使用的默认行分隔符将是\r\n
。这将避免错误,因为在行结束之前没有尾随空格。