我有一个简单的CSV(使用JQuery的$.ajax
从同一网站上的/data/league.csv
导入),其格式为三行:
"Kimberlin Library","Queen's Building","Innovation Centre","etc etc"
8,2,0,-2
1,0,-1,0
我想进入这种格式(使用building
和percent
作为Highcharts中xy轴的数据,并使用所有三种填充列表):
var leaguetable = {
building: ["Kimberlin Library","Queen's Building","Innovation Centre","etc etc"],
percent: [8,2,0,-2],
change: [1,0,-1,0]
};
尽管尝试了其他人的方法(包括split(/\r\n|\n|r/)
,搜索/^(.*)$/m
)和this question),但我仍然在绘制一个空白,但是我一直在画空白。我需要一些尽可能简单的东西,无论是JQuery还是纯Javascript。对于类似的问题,我最终将文件转换为JSON,但如果可能,我想避免这种情况。
答案 0 :(得分:1)
试试这个。它将通过下面代码中的正则表达式模式处理简单的CSV,单引号或双引号CSV。你必须调整processCSV()
的结束才能做你想做的事情,因为我只是将物体放回空气中。
$(document).ready(function() {
$.ajax({
type: "GET",
url: "my_csv.txt",
dataType: "text",
success: function(data) {processCSV(data);}
});
});
function processCSV(allLines) {
var allLinesArray = allLines.split(/\r\n|\n/);
var leaguetable = { 'building': [], 'percent': [], 'change': [] };
var pattern = /([^,'"]*"[^"]*"[^,'"]*)|([^,'"]*'[^']*'[^,'"]*)|([^,"']*)/ig;
var fieldValues;
for (var i=0; i<allLinesArray.length; i++) {
fieldValues = allLinesArray[i].match(pattern);
if (fieldValues) {
for (var j=0; j<fieldValues.length; j++) {
// if begins with single- or double-quote, strip specified quotes
if (fieldValues[j].charAt(0) === '"' || fieldValues[j].charAt(0) === "'") {
fieldValues[j] = fieldValues[j].replace(fieldValues[j].substr(0,1), "");
}
}
// I'll trust your CSV to have the right number of fields, but...
// you may want to build some validation in before doing the next 3 lines
leaguetable.building.push(fieldValues[1]);
leaguetable.percent.push(fieldValues[2]);
leaguetable.change.push(fieldValues[3]);
}
}
return leaguetable;
}
答案 1 :(得分:0)
假设您的CSV很简单,您可能希望执行以下操作:
building
数组。percent
解析后,将第二部分附加到parseInt
数组。change
数组执行相同的操作。