2017-02-20 3 views
0

ich die Daten in einer CSV-Datei aufteilen versuchen in meinem Skript zu verwenden. Normalerweise teile ich die Daten mit Newline und spalte diese Zeile dann mit Komma.zitierten Zeilenumbrüche ignorieren, während CSV-Daten Aufspalten

wie folgt aus:

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); 
}; 

Es funktioniert gut eine csv in ein Array aufzuteilen. Ich finde jetzt heraus, dass es nicht mit zitierten Zeilenumbrüchen oder Kommas in Zellen funktioniert.

ich in der Regel mit csv Daten wie dieses 'Wert1, Wert2 \ n value3, value4' beschäftigen. Jetzt habe ich eine CSV-Datei, die Daten wie folgt hat: "value1 \ nvalue1", value2 \ n value3, value4 '.

fand ich eine Regex Weise Daten von spliting. str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");here

ich addapeted es zu '\ n' so. var newline = dataFile.split("\n(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");

Jetzt funktioniert es, aber es ist sehr langsam. Ich weiß nichts über Regex, gibt es eine Möglichkeit, diesen Regex-Split zu bearbeiten, um schneller zu arbeiten? alles was ich tun möchte, ist die Newline in doppelten Anführungszeichen zu ignorieren.

EDIT:

Das beantwortet nicht die Frage, wie die Regex machen geteilt schneller, aber ich habe eine Lösung für meine bestimmten Daten gefunden.

Meine Daten haben leeren Platz vor einem Zeilenumbruch, so dass es ein Komma davor haben wird wie ", \ n", aber der Zeilenumbruch in Anführungszeichen hat zwei Wörter dazwischen keine Kommas. "Wert \ nWert" Dazu habe ich den Split so geschrieben.

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

Nur die Zeilen teilen, die ich will. Dies funktioniert viel schneller als die Regex, die ich hatte, aber es würde nicht für alle Daten funktionieren, also halte ich es nicht für eine Antwort auf meine Frage. Es ist das, was ich anstelle einer besseren Lösung verwenden werde.

+0

Haben Sie müde, die Anführungszeichen zu ersetzen/entfernen wie so str.replace (/ \ "/ gi, ""), bevor Parser mit Split oder CSV-Parsing? –

+0

Danke, aber das gleiche passiert. Parsen Beide CSV und Split, in Zeilen aufgeteilt bei Newline, egal ob in Anführungszeichen oder out. – Mullenb

Antwort

0

Die Utilities-Funktion zum Parsen von CSV funktioniert nicht für Sie? CsvParser Doc

+0

Ich könnte für die normale CSV-Datei, die ich habe keine Probleme mit. Ich habe es gerade in der Datei, die ich gerade arbeite, und es behandelt die Newline in Anführungszeichen, als wäre es eine Zeilenumbruch, das gleiche Problem habe ich mit meinem Beispiel. – Mullenb

Verwandte Themen