在拆分CSV数据时忽略引用的换行符

时间:2017-02-20 20:07:41

标签: javascript csv google-apps-script

我正在尝试将数据拆分为csv文件以在我的脚本中使用。我通常用换行符拆分数据,然后用逗号分隔该行。

像这样:

 var i;
 var fileData = [];
 var id = 'csv file';
 var file = DriveApp.getFileById(id).getAs('text/plain').getDataAsString();
 var newline = dataFile.split('\n');
 for(i in newLine){
  var splitLine = newline[i].split(',');
  fileData.push(splitLine);
};

将csv拆分为数组效果很好。我现在发现它不适用于单元格中引用的换行符或逗号。

我通常处理像'value1,value2 \ n value3,value4'这样的csv数据。现在我有一个csv文件,其数据类似于“value1 \ nvalue1”,value2 \ n value3,value4'。

我找到了一种分割数据的正则表达方式。 str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)"); here

我把它添加到'\ n'这样的话。 var newline = dataFile.split("\n(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

现在它有效,但速度很慢。我对正则表达式一无所知,有没有办法编辑这个正则表达式分割以更快地工作?我想要做的就是忽略双引号中的换行符。

修改

这不能回答这个问题,如何让正则表达式分裂更快,但我找到了一个解决方法来处理我的特定数据。

我的数据在换行符之前有空格,所以在它之前会有一个逗号“,\ n”,但引号中的换行符之间有两个单词,没有逗号。 “价值\ n值”。对此,我写了这样的分裂。

var newline = dataFile.split(',\n')

只拆分我想要的线条。这比我的正则表达式要快得多,但它对所有数据都不起作用,所以我不认为它是我的问题的答案。我将使用它来代替更好的解决方案。

0 个答案:

没有答案