Chi*_*ron 5 javascript csv parsing node.js
我有一个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
Run Code Online (Sandbox Code Playgroud)
我想在 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] + "]");
}
}
Run Code Online (Sandbox Code Playgroud)
我的期望:
[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]
Run Code Online (Sandbox Code Playgroud)
当我运行它时,输出是:
]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]
Run Code Online (Sandbox Code Playgroud)
我是 JavaScript 和 NodeJS 新手,所以任何评论都会有帮助,谢谢。
不要同步读取文件。如果您正在读取大文件,您可以使用内置模块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`));
Run Code Online (Sandbox Code Playgroud)
阅读线
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');
});
Run Code Online (Sandbox Code Playgroud)
使用for await循环更好的语法
for await (let line of lineReader) {
console.log(line);
}
Run Code Online (Sandbox Code Playgroud)
请尝试这样
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"]]
Run Code Online (Sandbox Code Playgroud)