猿问

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

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

我试着一次读一个大文件。我发现关于Quora的问题这是关于这个问题的,但我错过了一些联系,以使整件事合二为一。

 var Lazy=require("lazy");
 new Lazy(process.stdin)
     .lines     .forEach(
          function(line) { 
              console.log(line.toString()); 
          }
 );
 process.stdin.resume();

我想弄清楚的一点是,我可以一次从一个文件中读取一行,而不是像这个示例中的STDIN那样。

我试过:

 fs.open('./VeryBigFile.csv', 'r', '0666', Process);

 function Process(err, fd) {
    if (err) throw err;
    // DO lazy read 
 }

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

我不认为另一个答案会起作用,因为文件比我正在运行它的服务器的内存要大得多。


拉丁的传说
浏览 1201回答 3
3回答

素胚勾勒不出你

对于这样简单的操作,不应该有任何依赖第三方模块。放轻松点。var fs = require('fs'),     readline = require('readline');var rd = readline.createInterface({     input: fs.createReadStream('/path/to/file'),     output: process.stdout,     console: false});rd.on('line', function(line) {     console.log(line);});

BIG阳

有一个非常好的模块,用于逐行读取文件,它称为线路阅读器用它你只需写:var lineReader = require('line-reader');lineReader.eachLine('file.txt', function(line, last) {   console.log(line);   // do whatever you want with line...   if(last){     // or check if it's the last one   }});如果需要更多的控制,甚至可以使用“java样式”接口迭代文件:lineReader.open('file.txt', function(reader) {   if (reader.hasNextLine()) {     reader.nextLine(function(line) {       console.log(line);     });   }});
随时随地看视频慕课网APP
我要回答