如何读取一个csv文件并将其存储在对象数组中?

时间:2019-12-12 06:51:53

标签: node.js typescript promise nestjs

我想读取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子句中重新分配给另一个变量似乎也不起作用。请查看并提出解决方案

3 个答案:

答案 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); } });