我正在Angular js项目中工作,我必须使用javascript读取CSV文件列。我检索了CSV并将其打印在控制台中。我能够明智地拆分csv行。如何根据列进行操作?
提前致谢。
答案 0 :(得分:0)
CSV只不过是一个2 dim数组。通过使用2 for循环,你可以做到。
例如:
for(var i=0;i<col.length;i++){
for(var j=0;j<rows.length;j++){
arr[i][j]
}
}
答案 1 :(得分:0)
有趣的是,解析CSV文件听起来很容易,但是会很快变得复杂(取决于CSV的来源:用户生成的,API格式的固定格式,...)
;
而不是,
),
代替.
作为小数分隔符)这就是为什么npm(https://www.npmjs.com/search?q=csv)上有很多CSV解析器的原因。一些专注于解析速度(例如https://www.npmjs.com/package/fast-csv),一些专注于便利性(例如https://www.npmjs.com/package/papaparse)。
但据我所知,所有人都有一个共同点,那就是按行返回。通常会导致它能够处理将按行而不是按列传递数据的流。
下面是一个代码示例,可让您的数据列更明智:
const input = `header_1,header_2
value 1,value 2
value 3,value 4`
// get rows -> here \n as line ending is known
const rows = input.split('\n');
// get the first row as header
const header = rows.shift();
// get number of columns by splitting the header
// , as delimiter is known here. Could be different ...
const numberOfColumns = header.split(',').length
// initialize 2D-array with a fixed size
const columnData = [...Array(numberOfColumns)].map(item => new Array());
for(var i=0; i<rows.length; i++) {
var row = rows[i];
var rowData = row.split(',');
// assuming that there's always the same
// number of columns in data rows as in header row
for(var j=0; j<numberOfColumns; j++) {
columnData[j].push(rowData[j]);
}
}
console.log("columnData = " + JSON.stringify(columnData, null, 4));
输出将是:
columnData = [
[
"value 1",
"value 3"
],
[
"value 2",
"value 4"
]
]
不包括剥离空格,转换数字,...
为方便起见,您可以使用papaparse
明智地获取数据行,然后再次使用嵌套的for
循环:
const Papa = require('papaparse');
// example data with delimiter ; and empty lines
const input = `header_1;header_2
1;"2"
3;4`;
// options for papaparse
const parseOptions = {
quoteChar: '"', // quoting character
delimiter: ';',
skipEmptyLines: true, // ignore empty lines
dynamicTyping: true, // parse numbers automatically
}
const parseResult = Papa.parse(input, parseOptions);
const parsedData = parseResult.data;
// get the first row as header
const header = parsedData.shift();
const numberOfColumns = header.length;
// initialize 2D-array with a fixed size
const columnData = [...Array(numberOfColumns)].map(item => new Array());
for(var i=0; i<parsedData.length; i++) {
var rowData = parsedData[i];
for(var j=0; j<numberOfColumns; j++) {
columnData[j].push(rowData[j]);
}
}
console.log("columnData = " + JSON.stringify(columnData, null, 4));
输出将是:
columnData = [
[
1,
3
],
[
2,
4
]
]