我有一個實施作為電子表格項目的一部分。
這段代碼還沒有經過徹底的測試,但是歡迎任何人使用它。
但是,正如一些答案所指出的那樣,如果您實際擁有的話,您的實現可能要簡單得多。DSV或TSV文件,因為它們不允許在值中使用記錄和字段分隔符。另一方面,csv實際上可以在字段中有逗號和換行符,這破壞了大多數正則表達式和基于拆分的方法。
var?CSV?=?{parse:?function(csv,?reviver)?{
????reviver?=?reviver?||?function(r,?c,?v)?{?return?v;?};
????var?chars?=?csv.split(''),?c?=?0,?cc?=?chars.length,?start,?end,?table?=?[],?row;
????while?(c?<?cc)?{
????????table.push(row?=?[]);
????????while?(c?<?cc?&&?'\r'?!==?chars[c]?&&?'\n'?!==?chars[c])?{
????????????start?=?end?=?c;
????????????if?('"'?===?chars[c]){
????????????????start?=?end?=?++c;
????????????????while?(c?<?cc)?{
????????????????????if?('"'?===?chars[c])?{
????????????????????????if?('"'?!==?chars[c+1])?{?break;?}
????????????????????????else?{?chars[++c]?=?'';?}?//?unescape?""
????????????????????}
????????????????????end?=?++c;
????????????????}
????????????????if?('"'?===?chars[c])?{?++c;?}
????????????????while?(c?<?cc?&&?'\r'?!==?chars[c]?&&?'\n'?!==?chars[c]?&&?','?!==?chars[c])?{?++c;?}
????????????}?else?{
????????????????while?(c?<?cc?&&?'\r'?!==?chars[c]?&&?'\n'?!==?chars[c]?&&?','?!==?chars[c])?{?end?=?++c;?}
????????????}
????????????row.push(reviver(table.length-1,?row.length,?chars.slice(start,?end).join('')));
????????????if?(','?===?chars[c])?{?++c;?}
????????}
????????if?('\r'?===?chars[c])?{?++c;?}
????????if?('\n'?===?chars[c])?{?++c;?}
????}
????return?table;},stringify:?function(table,?replacer)?{
????replacer?=?replacer?||?function(r,?c,?v)?{?return?v;?};
????var?csv?=?'',?c,?cc,?r,?rr?=?table.length,?cell;
????for?(r?=?0;?r?<?rr;?++r)?{
????????if?(r)?{?csv?+=?'\r\n';?}
????????for?(c?=?0,?cc?=?table[r].length;?c?<?cc;?++c)?{
????????????if?(c)?{?csv?+=?',';?}
????????????cell?=?replacer(r,?c,?table[r][c]);
????????????if?(/[,\r\n"]/.test(cell))?{?cell?=?'"'?+?cell.replace(/"/g,?'""')?+?'"';?}
????????????csv?+=?(cell?||?0?===?cell)???cell?:?'';
????????}
????}
????return?csv;}};