Scala:自动检测 CSV 文件中的分隔符/分隔符

YoB*_*Bre 5 csv split scala separator opencsv

我正在使用 OpenCSV 库来拆分我的 CSV 文件。现在我需要绝对确定地检测分隔符/分隔符。我在网上搜索过,但我只找到了一些例子,你可以创建一个候选人列表并尝试其中一个。我认为这不是最好的方法,因为您可能会出错。我的拆分器应该可以在任何 CSV(我无法控制)上正常工作,因此它必须尽可能通用。有没有人有好的解决方案?

joh*_*cip 5

您可能已经看过这个相关的 SO 问题,其中列出了好的策略,例如计算潜在分隔符出现的次数,和/或在使用假设分隔符时验证每行具有相同的列数。

不幸的是,绝对确定性是不可能的,因为该格式不包含在文件中明确指定分隔符的方法。我认为使其尽可能通用的最佳解决方案是让用户指定它何时不是逗号(这就是 opencsv 处理它的方式),或者如果您或他们确定,则允许客户端指定分隔符自动检测失败。如果这不能是交互式的,那么我认为你能做的最好的事情就是记录你认为失败的案例,以便他们稍后处理。

另外,我认为错误率会低于您的预期。我的猜测是,99% 的情况下分隔符都是逗号、分号、句点或制表符。不幸的是,我看到懒惰的编码人员在假设数据不包含字段的情况下使用脱字符号、竖线或波形符之类的东西来分隔字段,因此他们不必进行适当的转义。但这不是常态,也不应该将其视为 CSV。

Python csv 模块有一个Sniffer类,它可以猜测分隔符(用户提供候选列表);你可能想看看它的实现