【问题标题】:How to read a csv file and store it in and array of objects?如何读取 csv 文件并将其存储在对象数组中?
【发布时间】:2020-04-05 12:36:25
【问题描述】:

我想读取一个 CSV 文件并将其存储在一个变量中以供将来访问,最好作为对象数组。 但是执行以下操作

const csv = fs
  .createReadStream('data.csv')
  .pipe(csv.default({ separator: '|' }))
  .on('data', (data) => {
    results.push(data);
  })
  .on('end', () => {
    console.log(results);
  });

仅在 on('end') 子句中获取我的数据。在它之外,访问变量结果会给出空变量,甚至在 on end 子句中重新分配给另一个变量似乎不起作用。请查看并提出解决方案

【问题讨论】:

    标签: node.js typescript promise nestjs


    【解决方案1】:

    这是因为即使在您的程序完成读取数据之前,外部代码也会执行。看看下面的代码:

    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') 回调中执行。

    【讨论】:

      【解决方案2】:

      您可以将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
      }
      

      【讨论】:

      • 当我使用函数时它似乎确实有效。但是,为了更好的可读性,如果我在函数之外获取数据会更好。否则我所有的逻辑工作数据都必须进入其中。无论如何我可以将结果数据传递给变量而不是传递给函数吗?
      【解决方案3】:

      将 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); } });

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 2023-01-19
        • 1970-01-01
        • 1970-01-01
        • 2015-07-19
        相关资源
        最近更新 更多