Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何解析NodeJS中的CSV文件_Javascript_Node.js_Csv_Parsing - Fatal编程技术网

Javascript 如何解析NodeJS中的CSV文件

Javascript 如何解析NodeJS中的CSV文件,javascript,node.js,csv,parsing,Javascript,Node.js,Csv,Parsing,我有一个包含以下内容的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)解析这一点,并显示用括号括起来的每一行。

我有一个包含以下内容的
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]
我不熟悉JavaScript和NodeJS,所以任何评论都会很有帮助,谢谢。

请像这样尝试

function readCsvFile()
{
    var fs = require("fs");
    var textByLine = fs.readFileSync("Tasks.csv").toString().split("\n");
    console.log(textByLine);
    const res = textByLine.map((line) => line.split(","));
    console.log(res)
}

output

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

不要同步读取文件。您可以使用内置模块
readline
逐行读取文件,并在不必担心CLRF的情况下处理每一行。或者使用具有许多功能的模块

快速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`));
Readline

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

要修复代码,只需使用Javascript的.split()方法以所需格式获得结果。我对你的代码做了一点小改动,得到了你提到的回应

function readCsvFile() {
    var fs = require('fs');
    var textByLine = fs.readFileSync('data.csv').toString().split("\n");
    var i;
    for (i = 0; i < textByLine.length-1; i++) {
        console.log(textByLine[i].split("\t"))
    }
}
函数readCsvFile(){ var fs=需要('fs'); var textByLine=fs.readFileSync('data.csv').toString().split(“\n”); var i; 对于(i=0;i尽管出于琐碎的目的导入node.js模块可能会有问题,但CSV文件的解析有足够的边缘案例和漏洞,可以更好地完成,但这是经过良好测试的。NPM的最高结果是:

使用模块还可以减少您需要维护的复杂而脆弱的代码量


这里有一个链接到RFC for CSV文件,这是我所知道的最接近于CSV文件标准的东西:希望这将为您提供有关我提到的边缘案例的足够信息,以理解使用模块的必要性

谢谢大家的反馈!它解决了我的问题。我先尝试了@PatrickEvans的建议,结果成功了!基本上,在Windows中创建CSV文件时,我应该使用“\r\n”将文件拆分为单独的行

这就是工作代码

function readCsvFile()
{

    var fs = require('fs');
    var textByLine = fs.readFileSync('Tasks.csv').toString().split("\r\n"); 
    var i;

    for (i=0; i<textByLine.length; i++)
    {
        console.log("[" + textByLine[i] + "]");
    }
}
函数readCsvFile() { var fs=需要('fs'); var textByLine=fs.readFileSync('Tasks.csv').toString().split(“\r\n”); var i;
对于(i=0;iNote),如果您在Windows中编写csv文件,您很可能正在处理CRLF(回车和换行)行尾,例如
\r\n
而不仅仅是
\n
。请检查您的文本编辑器,它可能有一个设置,您可以更改该设置以告知它使用unix样式的行尾
function readCsvFile()
{

    var fs = require('fs');
    var textByLine = fs.readFileSync('Tasks.csv').toString().split("\r\n"); 
    var i;

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