2017-02-20 100 views
0

我想分割一个csv文件中的数据以在我的脚本中使用。我通常用newline分割数据,然后用逗号分隔这一行。在分割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分裂成一个数组。我现在发现它不适用于单元格中引用的换行符或逗号。

我通常会处理csv数据,如'value1,value2 \ n value3,value4'。现在我有一个csv文件,其数据如''value1 \ nvalue1',value2 \ n value3,value4'。

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

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

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

编辑:

这不回答这个问题,如何使正则表达式分裂快,但我已经找到了我的特定数据的解决方法。

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

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

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

+0

在使用split或CSV解析器进行解析之前,您是否厌倦了使用str.replace(/ \“/ gi,”“)替换/删除引号? –

+0

谢谢,但同样的事情发生.CCS解析和拆分,在换行处拆分成行,无论引号还是输出 – Mullenb

回答

0

解析CSV的实用程序功能不适用于您? CsvParser Doc

+0

我可以用于常规的CSV文件,我没有问题,我只是在我正在处理的文件上尝试过,它处理换行符在引号中就好像它是一个换行符一样。与我的例子有同样的问题。 – Mullenb