2017-02-20 13 views
0

Я пытаюсь разделить данные в файле csv, который будет использоваться в моем скрипте. Я обычно разделяю данные с помощью новой строки, а затем разделяю эту запятую запятой.Игнорирование цитируемых строк в процессе разделения 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(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

Теперь он работает, но он очень медленный. Я ничего не знаю о регулярном выражении, есть ли способ отредактировать этот ракурс регулярного выражения, чтобы работать быстрее? все, что я хочу сделать, это игнорировать новую строку в двойных кавычках.

EDIT:

Это не дает ответа на вопрос, как сделать регулярное выражение разделить быстрее, но я нашел обходной путь для моих конкретных данных.

Мои данные имеют пустое пространство перед символом новой строки, поэтому перед ним это будет означать «, \ n», но в новой строке, которая находится в кавычках, между ними нет запятых. "Значение \ nvalue". Сделай это, я написал такой раскол.

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

Только разделение линий, которые я хочу. Это работает намного быстрее, чем регулярное выражение, которое у меня было, но оно не работает для всех данных, поэтому я не считаю его ответом на мой вопрос. Это то, что я буду использовать вместо лучшего решения.

+0

У вас есть возможность заменить/удалить цитаты так, как str.replace (/ \ "/ gi," "), перед разбором с использованием парсера или CSV-парсера? –

+0

Спасибо, но то же самое происходит. split, split в строки в строке новой строки, независимо от того, кавычки или нет. – Mullenb

ответ

0

Функция утилиты для разбора CSV не работает для вас? CsvParser Doc

+0

Я мог бы использовать обычный CSV-файл, с которым у меня нет проблем. Я просто попробовал его в файле, над которым я работаю, и обработал новую строку в кавычках, как если бы это была новая строка. Такая же проблема у меня с моим примером. – Mullenb