2013-07-18 35 views
3

我正在研究解析CSV文件的程序,然后将各自的数据移动到不同的数组中,这些数组将使电子表格不在其中。但是,我的电子表格有多余的空行,每行都有一个单元格。进一步检查后,我发现这些额外的单元格每个都包含一个换行符。我筛选了我的数组,以便它们不包含任何换行符,但问题仍然存在。我正在和AngularJS一起做这件事,虽然我怀疑这是导致问题的原因,但在实施Angular之前,我没有这个问题。JavaScript数组中额外的换行符

有没有人有过这样的事情?动态创建换行符不应该在那里。

下面是我的一些代码:

 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是含在那里我已经删除的东西未定义区域的二维数组。因此,上面的代码创建了一个新的标题数组和另一个二维数组来存放每个人的数据数组,所有这些都没有未定义的空格。这些数组包含空格""以及数据,但不包含\n\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')之类的东西中,但没有任何改变。

EDIT1

你可以看到它的工作现场here,但它被设计为可以下载here这个小CSV文件的工作。 上传文件后,表格下方的文本显示每个单元格绑定的内容,并且如果单击并编辑单元格,则可以看到内容动态更改。通过单击行之间的额外单元格,可以看到它们包含换行符。

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

EDIT2

迈克普的答案和一些其他的输入之后,确定了解决这个问题的最好办法是换行var allTextLines = $scope.csv.split(/\r\n|\n/); 与正则表达式/\r?\n/

感谢你的帮助!

+0

任何机会,你可以提供的jsfiddle或Plnkr演示发生了什么? –

+0

您在spreadsheetController.js的第31行的allTextLines变量中分割了CSV后会有一些新行。你会想要检查你的正则表达式,或者至少通过该字符串数组循环,并擦除那些不需要的行。我会尝试发布调试的屏幕截图。 –

+0

我希望你看看我发布的有关JS代码解析CSV数据的链接。许多人已经讨论过为什么split()方法不应该用于这个任务,并且提供了几个CSV解析器的实现,可以让你的生活变得更容易。 –

回答

1

您的问题看起来不像AngularjS有什么关系。你已经在$ scope.csv中获得了你的文本数据,并且你分离了你的正则表达式,并且在所有文本行中创建了一个字符串数组。

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

你可能想看看这个家伙的CSV到阵列JS代码@Javascript code to parse CSV data

我可以清楚地看到你的电子表格代码allTextLines的这些部分创建行&细胞。所以删除这些,你就是在做生意。

debug of code

+0

对于它的价值,它看起来像使用split()是解析CSV数据最鄙视的方法之一。 –