JSFiddle - React, Tailwind, and code Playground
by vvakame
JavaScript
var result = parseCsv("hoge,fuga\n\"ho\nge\",piyo");
alert(JSON.stringify(result, null, 2));
alert(result[0][0] + "&" + result[0][1] + "&" + result[1][0] + "&" + result[1][1]);
function parseCsv(csv) {
// from http://xoihazard.blogspot.jp/2012/10/javascriptcsv.html
var table = [];
var rows = [];
var cell = "";
var quoted = false;
// 改行コードを\nに統一
csv = csv.replace(/\r?\n|\r/g, "\n");
// ファイルの終端を改行にする
if (csv.charAt(csv.length - 1) !== "\n") {
csv += "\n";
}
// 一文字ずつ処理
for (var i = 0; i < csv.length; i++) {
switch (csv.charAt(i)) {
case "\"":
if (rows.length === 0 && quoted) {
cell += csv.charAt(i);
}
quoted = !quoted;
break;
case ",":
if (quoted) {
cell += csv.charAt(i);
} else {
rows.push(cell);
cell = "";
}
break;
case "\n":
if (quoted) {
cell += csv.charAt(i);
} else {
rows.push(cell);
cell = "";
if (rows.length > 0) {
table.push(rows);
rows = [];
}
}
break;
default:
cell += csv.charAt(i);
}
}
if (0 < table.length && table[table.length - 1].length === 1 && table[table.length - 1][0] === "") {
table.pop();
}
return table;
}