CSV分隔符自动检测在Javascript中
如何检测从JavaScript / NodeJS中的string的CSV分隔符?
哪个是标准algorithm?
请注意,分隔符总是不是逗号。 最常见的分隔符是;
,和\t
(制表符)。
获取可能的分隔符的一种可能的algorithm非常简单,并且假设数据是完整的:
- 对于每个分隔符,
- 对于每一行,
- 按分隔符分行,检查
length
。 - 如果它的
length
不等于最后一行的长度,这不是一个有效的分隔符。
- 按分隔符分行,检查
- 对于每一行,
概念certificate(不处理引用的字段):
function guessDelimiters (text, possibleDelimiters) { return possibleDelimiters.filter(weedOut); function weedOut (delimiter) { var cache = -1; return text.split('\n').every(checkLength); function checkLength (line) { if (!line) { return true; } var length = line.split(delimiter).length; if (cache < 0) { cache = length; } return cache === length && length > 1; } } }
length > 1
检查是为了确保split
不只是返回整行。 请注意,这将返回一个可能的分隔符数组 – 如果有多个项目,则会产生歧义问题。