Skip to content

Instantly share code, notes, and snippets.

@RandomEtc
Created September 18, 2010 00:43
Show Gist options
  • Save RandomEtc/585199 to your computer and use it in GitHub Desktop.
Save RandomEtc/585199 to your computer and use it in GitHub Desktop.
function loadCSV(url, columns, callback) {
var req = new XMLHttpRequest();
req.open('GET', url, true);
req.onreadystatechange = function (aEvt) {
if (req.readyState == 4) {// && req.status == 200) {
callback(parseCSV(req.responseText, columns));
}
};
req.send(null);
}
function parseCSV(txt, columns) {
var rows = [];
var lines = txt.split('\n');
for (var i = 0; i < lines.length; i++) {
var words = lines[i].split(',');
var realwords = [];
for (var j = 0; j < words.length; j++) {
var word = words[j];
while (word.charAt(0) == '"' && word.match(/"/g).length % 2 != 0 && j < words.length) {
word += ',' + words[j+1];
j+=1;
}
realwords.push(word);
}
if (realwords.length == columns.length) {
var row = {};
for (var j = 0; j < columns.length; j++) {
row[columns[j]] = realwords[j];
}
rows.push(row);
}
else {
console.warn('bad line: ' + lines[i]);
console.warn('realwords: ' + realwords);
}
}
return rows;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment