RFC 4180対応版 CSVレコードの分解
Posted feedbacks - JavaScript
JavaScriptでの投稿が無いようなので。ちょっと修正すれば複数レコードのパーズも対応できるはず。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | function unquote(val) {
return (val.indexOf('"') == 0) ? val.substring(1, val.length-1).replace(/""/g, '"')
: val;
}
function splitCsv(csv) {
// カラム分離用パターン
// グループ1⇒ 行頭 or カンマ or 改行
// グループ2⇒ 空文字列 or 非quoted文字列 or quoted文字列
// 非quoted文字列⇒ 改行, カンマ, " を含まない1文字 +
// 改行, カンマを含まない文字を0文字以上
// quoted文字列⇒ " + ( "" or " 以外の1文字 ) を0回以上 + "
// (?=,|\\r?\\n|$)⇒ 次に カンマ, 改行, 行末が続くこと(幅0肯定先読み)
var reg = new RegExp('(^|,|\\r?\\n)(|[^"\\r\\n,][^\\r\\n,]*|(?:"(?:""|[^"])*"))(?=,|\\r?\\n|$)', 'g');
var ary = [];
var match = null;
while(match = reg.exec(csv)) {
ary.push(unquote(match[2]));
}
return ary;
}
function printCsv(input) {
var values = splitCsv(input);
var ary = [];
for(var i=0; i<values.length; i++) {
ary.push((i+1) + ' => ' + values[i]);
}
alert(ary.join("\n"));
}
printCsv('"aaa","b\n\
bb","ccc",zzz,"y""Y""y",xxx');
|


raynstard
#3389()
Rating1/1=1.00
[ reply ]