Nodejs/javaScript操作CSV文件

Nodejs/javaScript操作CSV文件,javascript,node.js,csv,Javascript,Node.js,Csv,嗨,我有两个CSV文件 Spas.csv Customers.csv Spas.csv id | name ........................... 5 | Wasana spa ........................... 7 | Hot spring spa ........................... 8 | Colombo spa ........................... 10 | Sanhida spa .........

嗨,我有两个CSV文件

  • Spas.csv
  • Customers.csv
  • Spas.csv

    id  | name
    ...........................
    5   | Wasana spa
    ...........................
    7   | Hot spring spa
    ...........................
    8   | Colombo spa
    ...........................
    10  | Sanhida spa
    ...........................
    12  | Waruna spa
    ...........................
    
    id  | name  | spaId
    ........................
    1   |Hiran  |5
    ........................
    2   |Hirushi|5
    ........................
    3   |Mishani|8
    ........................
    4   |Chamod |12
    
    Customers.csv

    id  | name
    ...........................
    5   | Wasana spa
    ...........................
    7   | Hot spring spa
    ...........................
    8   | Colombo spa
    ...........................
    10  | Sanhida spa
    ...........................
    12  | Waruna spa
    ...........................
    
    id  | name  | spaId
    ........................
    1   |Hiran  |5
    ........................
    2   |Hirushi|5
    ........................
    3   |Mishani|8
    ........................
    4   |Chamod |12
    
    这两个CSV文件是从MYSQL数据库导出的。 我想要的是像这样更改
    Customers.csv
    文件的
    spaId

    id  | name  | spaId
    ........................
    1   |Hiran  |1
    ........................
    2   |Hirushi|1
    ........................
    3   |Mishani|3
    ........................
    4   |Chamod |5
    
    这些新的spaId来自Spas.csv文件的行号。 示例:-id 5位于行号1处,因此编号5替换为编号1

    如何在nodejs/javaScript中实现这一点。到目前为止,我所做的就是这样

    var fs = require('fs')
    var csv = require('fast-csv');
    
    fs.createReadStream('spas.csv')
        .pipe(csv())
        .on('data',function(data){
            console.log('DATA',data)
        })
        .on('end',function(data){
            console.log("FIN",data)
        })
    
    基本上,这将控制台将每行记录为一个数组,我不知道如何同时写入CSV。

    尝试以下方法:

    const fs = require("fs");
    
    const csv = require("fast-csv");
    
    async function getSpasIdMap(filePath){
    
       return new Promise(function(resolve, reject) {
    
         let map = {};
    
         let count = 0;
    
         let stream = fs.createReadStream(filePath);
    
         let csvStream = csv({ headers:true })
         .on("data", function(data){
             map[data.id] = ++count;
         })
         .on("error", (e) => {
             reject(e);
         })
         .on("end", function(){
             resolve(map);
         });
    
         stream.pipe(csvStream);
     })
    }
    
    async function computeAndWriteCustomerData(spasSource, customerSource, dest){
    
      let spasMap = await getSpasIdMap(spasSource);
    
      let customerStream = fs.createReadStream(customerSource);
    
      let csvCustomerStream = csv({headers:true})
      .transform(function(row) {
          return `${row.name},${spasMap[row.spaId]}\n`;
      });
    
      let writableStream = fs.createWriteStream(dest);
      customerStream.pipe(csvCustomerStream);
      csvCustomerStream.pipe(writableStream);
    }
    
    async function main() {
        await computeAndWriteCustomerData("spas.csv", "customer.csv", "my.csv");
    }
    
    main();
    

    这不是csvfile@JKK我更新了我的问题,并输入了我已经输入的代码。