csv2array.nut 926 B

123456789101112131415161718192021222324252627282930
  1. function fromCSV (s){
  2. local t = []; // table to collect fields
  3. local fieldstart = 0;
  4. local slen = s.len();
  5. //local count = 0;
  6. do {
  7. //print("Count", ++count);
  8. // next field is quoted? (start with `"'?)
  9. if (s[fieldstart] == '"') {
  10. local i = s.find_close_quote(fieldstart+1);
  11. if (i<0) throw("unmatched \"");
  12. local f = s.slice(fieldstart+1, i);
  13. //print(f, f.replace("\"\"", "\""));
  14. t.push(f.replace("\"\"", "\""));
  15. local nextc = s.find(",", i);
  16. if(!nextc) nextc=slen-1;
  17. fieldstart = nextc + 1;
  18. }
  19. else // unquoted; find next comma
  20. {
  21. local nexti = s.find(",", fieldstart);
  22. if(!nexti) nexti = slen-1;
  23. //print("nn", fieldstart, nexti, s.slice(fieldstart, nexti))
  24. t.push(s.slice(fieldstart, nexti));
  25. fieldstart = nexti + 1;
  26. }
  27. } while(fieldstart < slen);
  28. if(s[slen-1] == ',') t.push("");
  29. return t;
  30. }