我想分割一个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')
只有分裂我想要的线条。这比我使用的正则表达式快得多,但它不适用于所有数据,所以我不认为它是我的问题的答案。这是我将用来代替更好的解决方案。
在使用split或CSV解析器进行解析之前,您是否厌倦了使用str.replace(/ \“/ gi,”“)替换/删除引号? –
谢谢,但同样的事情发生.CCS解析和拆分,在换行处拆分成行,无论引号还是输出 – Mullenb