我想读取CSV文件并将其存储在变量中,以备将来以对象数组的形式进行访问。 但是请执行以下操作
const csv = fs
.createReadStream('data.csv')
.pipe(csv.default({ separator: '|' }))
.on('data', (data) => {
results.push(data);
})
.on('end', () => {
console.log(results);
});
仅让我在on('end')
子句中获得数据。在其外部,访问变量结果会给出空变量,甚至在end子句中重新分配给另一个变量似乎也不起作用。请查看并提出解决方案
答案 0 :(得分:2)
这是因为,即使在程序读取数据之前,外部代码也将执行。看下面的代码:
let results = [];
const csv = fs
.createReadStream('data.csv')
.pipe(csv.default({ separator: '|' }))
.on('data', (data) => {
results.push(data);
})
.on('end', () => {
console.log(results);
});
console.log(results); <- This line would execute before reading the file. So, results array is empty.
仅在.on('end', ...)
中获得数据,因为完成读取文件后,将执行.on('end')
回调。因此,执行.on('end)
回调后,您的results
数组中将填充数据。这就是为什么仅在end
回调中获取数据的原因。
现在,无论您想对results
数组做什么,都应该在.on('end')
回调中完成。
答案 1 :(得分:1)
您可以将results
变量传递给需要使用的任何函数,
const csv = fs
.createReadStream('data.csv')
.pipe(csv.default({ separator: '|' }))
.on('data', (data) => {
results.push(data);
})
.on('end', () => {
console.log(results);
someFunction(results);
});
function someFunction(data) {
// do anything with data
}
答案 2 :(得分:0)
将CSV文件读取到JSON对象
我正在使用toArrays()方法将CSV转换为数组。
var data;
$.ajax({
type: "GET",
url: "csv_raaja_file.csv",
dataType: "text",
success: function(response)
{
data = $.csv.toArrays(response);
generateHtmlTable(data);
}
});