在node.js中一次读取一行文件?

我试图一次读一行大文件。我在Quora上找到了一个关于这个主题的问题,但我缺少了一些联系,无法将整个问题结合起来

var Lazy=require(“Lazy”);
新延迟(process.stdin)
线
弗雷奇先生(
函数(行){
console.log(line.toString());
}
);
process.stdin.resume();

我想弄清楚的一点是,如何从文件中一次读取一行,而不是像本示例中的STDIN

我试过:

fs.open('./VeryBigFile.csv','r','0666',进程);
功能过程(err、fd){
如果(错误)抛出错误;
//懒散地读书吗
}

但它不起作用。我知道在紧要关头我可以回到使用PHP之类的东西,但我想弄清楚这一点

我认为另一个答案行不通,因为文件比我运行它的服务器的内存大得多

从Node.js v0.12到Node.js v4.0.0,有一个稳定的readline核心模块。以下是从文件中读取行的最简单方法,无需任何外部模块:

const fs=require('fs');
const readline=require('readline');
异步函数processLineByLine(){
const fileStream=fs.createReadStream('input.txt');
const rl=readline.createInterface({
输入:fileStream,
crlfDelay:无穷大
});
//注意:我们使用crlfDelay选项来识别CR LF的所有实例
//input.txt中的('\r\n')作为一个换行符。
用于等待(rl的常量行){
//input.txt中的每一行都将在此处依次作为“行”使用。
log(`Line from file:${Line}`);
}
}
processLineByLine();

或者:

var lineReader=require('readline')。createInterface({
输入:require('fs').createReadStream('file.in'))
});
lineReader.on('line',函数(line){
log('文件中的行:',行);
});

即使没有最终的\n,最后一行也被正确读取(从节点v0.12或更高版本开始)

更新:此示例已添加到节点的API官方文档中

发表评论