Univocity 解析器 - 提供的信息太少时会自动检测错误的定界符
Univocity parser - false delimiter autodetection when too little information given
我将解析器设置为自动检测定界符
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();
我只有一条记录:47W2E2qxPs, http://usda.gov/mattis.html
我得到了什么:
code: 47W2E2qxPshttp url: //usda.gov/mattis.html
我希望分隔符是 ,
而不是 :
所以我的预期结果是 47W2E2qxPs
和 http://usda.gov/mattis.html
.
我可以用优雅的方式修复它吗?
这里是图书馆的作者。检测过程是一种启发式方法,它使用从输入的多行部分收集的统计信息。因此它在很大程度上取决于输入的大小。
其目的是处理您无法轻易确定什么是 CSV 格式的情况 - 例如当用户向您上传随机文件时。如果您已经知道什么是正确的分隔符,请不要使用检测过程。
在您的情况下,一行数据绝对不足以可靠地检测分隔符,尤其是在存在多个符号的情况下。除了在继续之前测试检测到的定界符之外,您无能为力:
parser.beginParsing(new File("/path/to/your.csv"));
CsvFormat format = parser.getDetectedFormat();
//check if the format is sane.
下一个版本 (2.6.0) 将包括更多选项来帮助启发式算法,例如提供一组允许的字符用作分隔符 - 这可能对您的情况有所帮助。
我将解析器设置为自动检测定界符
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();
我只有一条记录:47W2E2qxPs, http://usda.gov/mattis.html
我得到了什么:
code: 47W2E2qxPshttp url: //usda.gov/mattis.html
我希望分隔符是 ,
而不是 :
所以我的预期结果是 47W2E2qxPs
和 http://usda.gov/mattis.html
.
我可以用优雅的方式修复它吗?
这里是图书馆的作者。检测过程是一种启发式方法,它使用从输入的多行部分收集的统计信息。因此它在很大程度上取决于输入的大小。
其目的是处理您无法轻易确定什么是 CSV 格式的情况 - 例如当用户向您上传随机文件时。如果您已经知道什么是正确的分隔符,请不要使用检测过程。
在您的情况下,一行数据绝对不足以可靠地检测分隔符,尤其是在存在多个符号的情况下。除了在继续之前测试检测到的定界符之外,您无能为力:
parser.beginParsing(new File("/path/to/your.csv"));
CsvFormat format = parser.getDetectedFormat();
//check if the format is sane.
下一个版本 (2.6.0) 将包括更多选项来帮助启发式算法,例如提供一组允许的字符用作分隔符 - 这可能对您的情况有所帮助。