2个相同的csv文件,但有回车和换行问题

时间:2016-07-04 02:28:18

标签: javascript angularjs regex csv parsing

我有2个相同的测试文件。对它们进行差异返回:

<(od -c file1.csv)<(od -c file2.csv)
file1: a b c \ r \ n a b c \ r \ n a b c

file2: a b c \ r \ n a b c \ r \ n a b c \ r \ n

显然,Excel在创建.csv文件

时附加\ r \ n

我的csv解析功能:

var reader = new FileReader();        
       reader.onload = function(e) {
       var contents = e.target.result;    
       var rows = contents.split(/[\r\n]{1,}/g);
    }

如何在上面的解析函数中修复我的正则表达式?我的hasDups()函数仅适用于文件2

function toLowerCase(s) {
    if (typeof(s) === 'string') {
        return s.toLowerCase();
    }

    return s;
}

function hasDups(arr) {
    return (arr.length !== _.uniq(arr, false, toLowerCase).length);
}

$scope.add= function() {

            var subs = [];


                    angular.forEach($scope.csvModel, function(sub) {

                        var subCopy = angular.copy(sub);

                        // Concatenates each field into one separated by spaces
                        subs.push(Object.keys(subCopy).map(function(key) {
                            return subCopy[key];
                        }).join(' '));
                    });



            }

            if ($scope.hasDups(subs)) {
console.log("dups exsist")
}
}

示例文件test.csv:

ABC
ABC
ABC

ABC

ABC

输出(行)应该删除所有不相关的换行符,空格等,并且每行只显示一个abc。

1 个答案:

答案 0 :(得分:0)

如果您的目标是完全省略\r \n,请不要使用方括号,因为它适用于范围和字符类,例如[a-d] or [a-zA-Z0-9]

您可以尝试将正则表达式更改为var rows = contents.split(/ *\r \n */g);

它应该为测试文件1和2提供相同的数组

希望它有所帮助!