csv parser

by gaby de wilde

CSS

td,table{border:1px solid}

JavaScript

csv = String.raw`foo,bar,banana,baz,kiwi,orange
foobar,"baz\"
bar
boat","304,84",304,"0,84","0,84"
foobar,"bazbar","304,84",304,"0,84","0,84"
foobar,"b""azbar","304,84",304,"0,84","0,84"
foobar,bazbar,"304,84",304,"0,84","0,84"`;

// csv parser
rand =o=>Math.floor(Math.random()*100000000);
lineBreak = rand();
comma = rand();
escapedQuote1 = rand();
escapedQuote2 = rand();
csv = csv
	.split('\\"')
  .join(escapedQuote1)
	.split('""')
  .join(escapedQuote2)
	.split('"');
for(x=1;x<csv.length;x+=2){
  csv[x] = csv[x]
  	.split('\n')
    .join(lineBreak)
  	.split(',')
    .join(comma);
}
csv = csv
	.join('')
	.split('\n')
	.map(function(row){
    return row
      .split(lineBreak)
      .join('\n')
      .split(',')
      .map(function(cell){
        return cell
          .split(comma)
          .join(',')
          .split(escapedQuote1)
          .join('\"')
          .split(escapedQuote2)
          .join('"');
      });
  });


htmlout = "";

csv.forEach(function(x){
    htmlout += "<tr>";
    x.forEach(function(z,m){
    /* if you want to remove columns do it like so
      if(m==0){return}
      if(m==1){return}
      if(m==2){return}
      if(m==3){return}
      if(m==4){return} */
      htmlout += "<td>" + z + "</td>";
    });
    htmlout += "</tr>";
  //}
});
document.body.innerHTML = "<table><tbody>" + htmlout + "</tbody></table>"