Dou*_*ner 6 javascript csv arrays
我有一个包含文件中CSV数据的长字符串.我想将它存储在JavaScript Array of Arrays中.但是一列中有任意文本.该文本可能包含双引号和逗号.
将CSV字符串拆分为单独的行字符串是没有问题的:
var theRows = theCsv.split(/\r?\n/);
但那我怎么能最好地划分每一行呢?
由于它是CSV数据,我需要用逗号分割.但
var theArray = new Array();
for (var i=0, i<theRows.length; i++) {
theArray[i] = theRows[i].split(',');
}
Run Code Online (Sandbox Code Playgroud)
不适用于包含引号和逗号的元素,如下例所示:
512,"""Fake News"" and the ""Best Way"" to deal with A, B, and C", 1/18/2019,media
Run Code Online (Sandbox Code Playgroud)
如何确保第二个元素正确存储在单个数组元素中
"Fake News" and the "Best Way" to deal with A, B, and C
Run Code Online (Sandbox Code Playgroud)
谢谢.
不幸的是,当我在那里尝试CSVtoArray函数时,看起来类似的建议解决方案不起作用.而不是返回数组元素,返回null值,如下面的评论中所述.
这应该可以做到:
let parseRow = function(row) {
let isInQuotes = false;
let values = [];
let val = '';
for (let i = 0; i < row.length; i++) {
switch (row[i]) {
case ',':
if (isInQuotes) {
val += row[i];
} else {
values.push(val);
val = '';
}
break;
case '"':
if (isInQuotes && i + 1 < row.length && row[i+1] === '"') {
val += '"';
i++;
} else {
isInQuotes = !isInQuotes
}
break;
default:
val += row[i];
break;
}
}
values.push(val);
return values;
}
Run Code Online (Sandbox Code Playgroud)
它将返回数组中的值:
parseRow('512,"""Fake News"" and the ""Best Way"" to deal with A, B, and C", 1/18/2019,media');
// => ['512', '"Fake News" and the "Best Way" to deal with A, B, and C', ' 1/18/2019', 'media']
Run Code Online (Sandbox Code Playgroud)
要获取请求的数组数组,您可以执行以下操作:
let parsedCsv = theCsv.split(/\r?\n/).map(parseRow);
Run Code Online (Sandbox Code Playgroud)
该代码可能看起来有点晦涩。但主要思想如下:我们逐个字符地解析字符串。当我们遇到一个"我们就设定了isInQuotes = true。,这将改变解析和的行为""。当我们遇到一个人时,"我们会再次设置isInQuotes = false。
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |