首页 > 解决方案 > 如何在 NodeJS 中解析 CSV 文件

问题描述

我有一个Task.csv包含以下内容的文件:

task1,01/05/2020, 20/05/2020, Active
task2,03/05/2020, 17/05/2020, Active
task3,10/05/2020, 25/05/2020, Active
task4,02/05/2020, 21/05/2020, Active
task5,07/05/2020, 28/05/2020, Active

我想在 JavaScript (NodeJS) 中解析它并显示用括号括起来的每一行。以下是我正在使用的代码:

function readCsvFile()
{
    var fs = require('fs');
    var textByLine = fs.readFileSync('Tasks.csv').toString().split("\n");   
    var i;<br>

    for (i=0; i<textByLine.length; i++)
    {
        console.log("[" + textByLine[i] + "]");
    }
}

我的期望:

[task1,01/05/2020, 20/05/2020, Active]
[task2,03/05/2020, 17/05/2020, Active]
[task3,10/05/2020, 25/05/2020, Active]
[task4,02/05/2020, 21/05/2020, Active]
[task5,07/05/2020, 28/05/2020, Active]

当我运行它时,输出是:

]task1,01/05/2020, 20/05/2020, Active
]task2,03/05/2020, 17/05/2020, Active
]task3,10/05/2020, 25/05/2020, Active
]task4,02/05/2020, 21/05/2020, Active
[task5,07/05/2020, 28/05/2020, Active]

我是 JavaScript 和 NodeJS 的新手,所以任何评论都会有所帮助,谢谢。

标签: javascriptnode.jscsvparsing

解决方案


不要同步读取文件。如果您正在阅读大文件,您可以使用内置模块readline逐行读取文件并处理您不必担心 CLRF 的每一行。或者,使用fast-csv 之类的模块具有许多功能。

快速csv

const fs = require('fs');
const path = require('path');
const csv = require('fast-csv');

fs.createReadStream('Tasks.csv')
    .pipe(csv.parse({ headers: true }))
    .on('error', error => console.error(error))
    .on('data', row => console.log(row))
    .on('end', rowCount => console.log(`Parsed ${rowCount} rows`));

阅读线

   const readline = require('readline');
    const fs = require('fs');
    
    cost lineReader = readline.createInterface({
      input: fs.createReadStream('Tasks.csv')
    });
    
    let lineno = 0;
    lineReader.on('line', function (line) {
         lineno++
       // process line here
       // let colValues=  line.split(",") 
    });
  
   lineReader.on('close', () => {
    console.log('Done reading file');
   });

for await使用循环更好的语法

for await (let line of lineReader) {
       console.log(line);
      }
 

推荐阅读