Javascript中的CSV分隔符自动检测

Ion*_*zău 6 javascript node.js

如何从Javascript/NodeJS中的字符串中检测CSV分隔符?

哪个是标准算法?

请注意,分隔符始终不是逗号.最常见的分隔符的存在;,,\t(标签).

Zir*_*rak 13

获取可能的分隔符的可能算法非常简单,并假设数据格式正确:

  1. 对于每个分隔符,
    1. 对于每一行,
      1. 用分隔符拆分线,检查length.
      2. 如果它length等于最后一行的长度,这不是一个有效的分隔符.

概念证明(不处理引用字段):

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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

length > 1检查是确保split不只是返回整条生产线.请注意,这会返回一个可能的分隔符数组 - 如果有多个项目,则会出现歧义问题.