1

我正在尝试使用 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));
}

我错过了什么。为什么输出中缺少右引号?

4

2 回答 2

1

找到答案 myslef.. 必须删除以下行

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

如果删除上述行,代码可以正常工作

于 2017-10-11T05:20:48.537 回答
0

您使用的是 2.5.8 版吗?如果不是,那么这看起来与我最近修复的一个错误有关。只需更新,它就会工作。

一点解释:

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

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

于 2017-10-19T02:02:47.243 回答