3

我正在开发一个解析 CSV 文件的程序,然后将相应的数据移动到不同的数组中,这些数组将用它们制作电子表格。但是,我的电子表格有额外的空白行,每行一个单元格。经过进一步检查,我发现这些额外的单元格每个都包含一个换行符。我已经过滤了我的数组,使它们不包含任何换行符,但问题仍然存在。我正在与 AngularJS 一起执行此操作,虽然我怀疑这是导致问题的原因,但在实现 Angular 之前我没有遇到此问题。

有没有人有过这样的事情?在不应该出现的地方动态创建换行符。

这是我的一些代码:

        headers = breakText[0];
        function isDefined(element, index, array){
            return (element !== undefined || element !=='\n');
            //I tried to stop the newlines here, but this did nothing
        };


        //new header file including ONLY desired titles; no undefines
        $scope.clearHeaders = headers.filter(isDefined);
        $scope.clearPatients = [];
        for(var i=1; i<breakText.length; i++){
            if breakText[0] {
                $scope.clearPatients.push(breakText[i].filter(isDefined));
            }
        };

breakText 是一个 2D 数组,其中包含我已删除内容的未定义区域。所以上面的代码创建了一个新的标题数组和另一个二维数组来保存每个人的数据数组,所有这些都没有未定义的空格。这些数组包含空格""和数据,但没有\nor \r\n

这是 AngularJS 实现的一部分:

$scope.columns = $scope.clearHeaders;
$scope.cells = {};
$scope.values = $scope.clearPatients.map(function(c,row){
    return c.map(function(data){
        return {
            content: data,
            color: $scope.makeColors(data)
        };
    });
});

我们已经尝试使用替换函数来替换\n''禁止它返回数据,''但这会导致问题,因为我们的一些初始数据也是空白的。它也不会停止新单元格的创建。我们还尝试将其包装在诸如此类的东西中,if(data !== '\n')但这并没有改变。

编辑1

您可以看到它在此处实时运行,但它旨在与可在此处下载的这个小型 CSV 文件一起使用。上传文件后表格下方的文字显示了每个单元格绑定的内容,如果单击并编辑单元格,您可以看到内容动态变化。通过单击行之间的额外单元格,您可以看到它们包含换行符。

我只是尝试创建一个新的过滤器函数,它会检查clearPatients数组中的换行符,然后将所有内容过滤到一个新数组中,即 sans-newline。然后将这个新数组调用到表中,而不是带有换行符的数组。然而,这引发了许多无法确定其来源的错误。

编辑2

在 Mike P 的回答和其他一些输入之后,确定解决此问题的最佳方法是将行var allTextLines = $scope.csv.split(/\r\n|\n/); 与正则表达式交换/\r?\n/

谢谢你的帮助!

4

1 回答 1

1

您的问题看起来与 AngularjS 无关。您已经在 $scope.csv 中获得了文本数据,并拆分了正则表达式,这会在 allTextLines 中创建一个字符串数组。

这个字符串数组中有一些无用的行(在 idx 1、3 和 4 处)。所以你要么想修改你的正则表达式拆分表达式,要么循环遍历这个数组并删除你不想要的东西。

你可能想看看这个人的 CSV to Array JS code @Javascript code to parse CSV data

我可以清楚地看到您的电子表格代码为 allTextLines 的这些部分创建行和单元格。所以删除这些,你就开始做生意了。

代码调试

于 2013-07-18T18:38:40.647 回答