function parseCSV(input){ var file = OpenRawFile(input); var in_data = file.read(file.getSize()); var out_Rdata = CreateByteArray(200); var R_length = 0; var out_data = [[]]; var in_quotes = false; function convert_data(Rdata) { if(!(Rdata * 1)) { out_data[out_data.length-1].push(Rdata); } else { out_data[out_data.length-1].push(Rdata*1); } } for(var i = 0; i<in_data.length; ++i) { if(in_quotes) { if(in_data[i] == 0x22) { in_quotes = false; } else { out_Rdata[R_length]=in_data[i]; ++R_length; } } else { switch(in_data[i]) { case(0x2C)://comma { if(R_length > 0) { convert_data(CreateStringFromByteArray(out_Rdata.slice(0,R_length))); } else { out_data[out_data.length-1].push(""); } R_length =0; break; } case(0x22)://quotes { in_quotes = true; break; } case(0x0D)://Carriage Return -ignored as followed by LineFeed { break; } case(0x0A)://Line Feed - push the data and then move down a line { if(R_length > 0) { convert_data(CreateStringFromByteArray(out_Rdata.slice(0,R_length))); } else { out_data[out_data.length-1].push(""); } R_length = 0; out_data.push([]); break; } default://anything else { out_Rdata[R_length]=in_data[i]; ++R_length; } } } } if(out_Rdata.length > 0)//push the last piece of data as there's no terminator character { convert_data(CreateStringFromByteArray(out_Rdata.slice(0,R_length))); } else { out_data[out_data.length-1].push(""); } return out_data; }
miniSphere doesn't let you dynamically resize byte arrays
var file = OpenRawFile(filename);var input = file.read(file.getSize());var lines = CreateStringFromByteArray(input).split(/\r?\n/);var output = [];for (var i = 0; i < lines.length; ++i) { output[i] = []; // parse a CSV line here (String#split won't work because you might have quoted commas)}file.close();
I think you have to do one character at a time in case you have a quoted new line (which doesn't count as and to a field) - I won't but I wanted to support it.
Huh, CSV is a weird format.
I've never seen any language where putting a newline between quotes wasn't a syntax error (usually they are escaped as, e.g. \n).