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这里有一个链接到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] + "]");
}
}