循环遍历nodejs中的文本文件

时间:2016-08-22 21:46:46

标签: javascript node.js

我对nodejs比较陌生。我能够逐行读取并打印到控制台,但不能像在vbscript或python中那样遍历文本文件。这就是我想要做的。

循环浏览一个单词的文件。一旦我找到了这个单词,程序就会转到文本文件的下一行并将其打印到屏幕和下一行,依此类推,直到我到达一个空行(这就是我将停止循环的地方)。

现在发生的一切都是它读取并停止。我没有找到一种在线循环通过nodejs中的文本文件的方法。

我对如何到达文本文件中的下一行感到很遗憾。

请详细解释如何解决我目前遇到的这个问题。还可以添加什么来让lineReader转到下一行。代码如下。它已被清理干净。我试图在if语句中做另一个for循环,但它不起作用。我试过Array,但它也不会工作。

var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('text.txt')
});


lineReader.on('line', function (line) {
   for (var x= 0; x < line.length; x++)
     if(line === "word"){

        console.log(line);
     }

   }


});

以下是修订版。我修改了幽灵般的例子

function find(){
var Arry = [];
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream(text.txt)
});

lineReader.on('line', function (line) {
Arry.push(line);
});

lineReader.on('close', function (line) {

   var Ncount = 0;
   for(var x =0; x < Arry.length; x++){
      if (Arry[x] == 'cat'){

      do { 
           Ncount +=1;    
           x +=1;
           if (Arry[x] == "") {
            Ncount = 700;
           }
         console.log(Arry[x]);
      } while (Ncount<700 );


    }

  }


 });

}

3 个答案:

答案 0 :(得分:1)

使用此代码,使用Array可以在数据中来回传递。请注意这可能是内存密集型,但有助于您:

var fileLineArray = [];
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('text.txt')
});

lineReader.on('line', function (line) {
//      console.log(line);
        fileLineArray.push(line);

});

lineReader.on('close', function(){
        for(var i=0; i<fileLineArray.length;i++){
             var wordIs = fileLineArray[i];
             if(wordIs === "word"){
                console.log(wordIs);
                }
        }
});

旧答案是: 使用此代码:

var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('text.txt')
});


lineReader.on('line', function (line) {
//      console.log(line);
     if(line === "word"){ //I am checking for word "word"

        console.log(line);
     }

});

答案 1 :(得分:1)

这就是我想要的。我修改了幽灵般的例子。

function find(){
var Arry = [];
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream(text.txt)
});

lineReader.on('line', function (line) {
Arry.push(line);
});

lineReader.on('close', function (line) {

var Ncount = 0;
for(var x =0; x < Arry.length; x++){
   if (Arry[x] == 'cat'){

      do { 
           Ncount +=1;    
           x +=1;
           if (Arry[x] == "") {
             Ncount = 700;
           }
        console.log(Arry[x]);
      } while (Ncount<700 );


    }

  }


});

}

答案 2 :(得分:0)

如果你看一下这里的最后一个例子:https://nodejs.org/api/readline.html

const readline = require('readline');
const fs = require('fs');

const rl = readline.createInterface({
  input: fs.createReadStream('sample.txt')
});

rl.on('line', (line) => {
  console.log('Line from file:', line);
});

对于每一行,将使用行变量调用该函数并触发日志,您可以在条件中包装console.log。这里需要记住的是,你提供的函数将被调用为一个回调,其中传入的行作为参数,因此不需要外部循环。