我正在尝试使用 Univocity format auto-detection用于解析此 CSV 表:
HEADER1, HEADER2, HEADER3
11, 12, 13
21, 22, 23
31, 32, 33
如您所见,逗号 ',' 和空格 ' ' 的数量相同。 问题在于,查找分隔符的启发式方法优先考虑“”而不是“,”字符。
因此在这种情况下检测到的分隔符是空格“”。然后,单元格的值是错误的,因为逗号被视为值的一部分:
我看到有一个功能setDelimiterDetectionEnabled按优先级顺序定义分隔符,但我无法使其工作。
我这样使用它:setDelimiterDetectionEnabled(true, ',', ' ')
,但仍然选择空格作为分隔符。
如果我在 CSV 表中删除 1 个空格(因此逗号多于空格),则选择逗号作为分隔符。
这是代码,是 scala,但我认为这不相关,因为该库是用 java 编写的:
val settings = new CsvParserSettings
settings.setDelimiterDetectionEnabled(true, ',', ' ')
val parser = new CsvParser(settings)
val spaceAndCommaTable = new File("/home/pr/SPACE_AND_COMMA.csv")
val parsed = parser.parseAll(spaceAndCommaTable, "UTF-8")
val format = parser.getDetectedFormat
我希望 format.getDelimiter 包含逗号“,”,但实际的分隔符是空格“”
最佳答案
这里是该库的作者。我刚刚修复了这个问题,并将于明天发布最终版本 2.8.3,其中包括为此工作所需的调整。为了进行测试,您已经可以使用最新的 2.8.3-SNAPSHOT。
谢谢
关于java - Univocity - 如何定义 "format auto-detection"上分隔符的优先顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57357387/