我正在开发一个解析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数组,我删除了这些区域。因此,上面的代码创建了一个新的头数组,另一个是2D数组,用于保存每个人的数据数组,所有这些都没有未定义的空格。这些数组包含空格""
和数据,但不包含\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,但它可以使用这个可以下载的小型CSV文件here。 上传文件后,表格下方的文本显示每个单元格绑定的内容,如果单击并编辑单元格,则可以看到内容动态变化。通过单击行之间的额外单元格,您可以看到它们包含换行符。
我刚刚尝试创建一个新的过滤器函数,它会检查clearPatients
数组中的换行符,然后将所有内容过滤到一个新数组中,即sans-newline。然后调用此新数组在表中而不是具有换行符的数组。然而,这引发了许多无法确定其来源的错误。
EDIT2 :
在Mike P的回答和其他一些意见之后,确定解决此问题的最佳方法是交换行var allTextLines = $scope.csv.split(/\r\n|\n/);
使用正则表达式/\r?\n/
感谢您的帮助!
答案 0 :(得分:1)
你的问题看起来与AngularjS无关。你已经在$ scope.csv中得到了你的文本数据,你拆分了你的正则表达式,并在allTextLines中创建了一个字符串数组。
这个字符串数组中有一些无用的行(idx 1,3和4)。所以你要么想要修改你的正则表达式分割表达式,要么循环遍历这个数组并删除你不想要的东西。
您可能想查看这个人的CSV到Array JS代码@ Javascript code to parse CSV data
我可以清楚地看到您的电子表格代码创建行&amp; allTextLines的这些部分的单元格。所以删除那些,你就是在做生意。