CSVのパースは単純に考えるとこんな感じ
const simpleParseCSV=(csv)=>{
return csv.split("\n").map((row)=>row.split(','));
},
しかしCSVは値の中にコンマや改行やはたまたダブルクォーテーションが入ってたりもする
ダブルクォーテーションはあんまりないだろうけど
値にコンマや改行が入るケースというのは結構ある
ということでそれらに対応したCSVのパース処理
const parseCSV=(csv)=>{
let tmp=[];
csv=csv.replace(/("[^"]*")+/g,(match)=>{
tmp.push(match.slice(1,-1).replace(/""/g,'"'));return '[TMP]';
});
return csv.split("\n").map((row)=>{
return row.split(',').map((val)=>val==='[TMP]'?tmp.shift():val)
});
};
ダブルクォーテーションで囲まれてない値に
ダブルクォーテーションがある場合に対応できてないけど
Excelから書き出してもPHPのfputcsvでもそうはならないので
そういうCSVはまずないものとしてそこは妥協