Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环浏览nodejs中的文本文件_Javascript_Node.js - Fatal编程技术网

Javascript 循环浏览nodejs中的文本文件

Javascript 循环浏览nodejs中的文本文件,javascript,node.js,Javascript,Node.js,我对nodejs还不太熟悉。我能够逐行读取并打印到控制台,但不能像在vbscript或python中那样循环遍历文本文件。这是我想做的 在文件中循环查找一个单词。找到单词后,让程序转到文本文件的下一行,并将其打印到屏幕和下一行,依此类推,直到找到一个空行(这是我停止循环的地方) 现在所发生的一切就是它读到这个词然后停下来。我还没有找到一种在线循环浏览nodejs中文本文件的方法 我不知道如何到达文本文件中的下一行 请详细解释如何解决我目前的问题。还可以添加什么以使lineReader转到下一行。

我对nodejs还不太熟悉。我能够逐行读取并打印到控制台,但不能像在vbscript或python中那样循环遍历文本文件。这是我想做的

在文件中循环查找一个单词。找到单词后,让程序转到文本文件的下一行,并将其打印到屏幕和下一行,依此类推,直到找到一个空行(这是我停止循环的地方)

现在所发生的一切就是它读到这个词然后停下来。我还没有找到一种在线循环浏览nodejs中文本文件的方法

我不知道如何到达文本文件中的下一行

请详细解释如何解决我目前的问题。还可以添加什么以使lineReader转到下一行。代码如下。它已经打扫干净了。我尝试在if语句中执行另一个for循环,但它不起作用。我尝试了数组,但它也不起作用

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);
     }

   }


});
var lineReader=require('readline')。createInterface({
输入:require('fs').createReadStream('text.txt'))
});
lineReader.on('line',函数(line){
对于(变量x=0;x
这是修订版。我修改了spooky的示例

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 );


    }

  }


 });

}
函数find(){
var-Arry=[];
var lineReader=require('readline')。createInterface({
输入:require('fs').createReadStream(text.txt)
});
lineReader.on('line',函数(line){
Arry.推(线);
});
lineReader.on('close',函数(行){
var-Ncount=0;
对于(变量x=0;x}while(Ncount使用此代码,它使用数组在数据中来回移动。请注意,这可能会占用大量内存,但有助于解决以下问题:

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);
                }
        }
});

如果您看最后一个示例:


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

这就是我所做的想要。我修改了spooky的示例。

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 );


    }

  }


});

}
函数find(){
var-Arry=[];
var lineReader=require('readline')。createInterface({
输入:require('fs').createReadStream(text.txt)
});
lineReader.on('line',函数(line){
Arry.推(线);
});
lineReader.on('close',函数(行){
var-Ncount=0;
对于(变量x=0;x}当(n不重复的可能重复。另一篇文章没有回答我的问题。你想要一种node.js方式逐行读取文件吗?否?是的…只是为了将文件放入程序中。我想循环浏览文件,然后逐行打印,直到满足一个条件,这就是在与p链接一起提供的答案中所做的可能重复如果我没有错…text.txt每行包含一个单词。如果每行有多个单词,则必须实现标记化器。它执行每行应该读取的操作,但我无法进行操作,例如在找到包含单词的行后转到下一行读取。@Nb\u我现在理解它你想做的是…也许你应该将文件读入数组,然后按照你的意愿进行操作?你试过了吗?@Nb\u me我已经根据你的需要更新了我的答案…祝你好运,我的朋友。谢谢,伙计…我修改了它以适应我的需要。我仍然不清楚使用“开”两次会发生什么,但我是新的,所以我必须继续边走边学。好的……帮助我了解更多。下面是一个我想做的示例。该文件包含一个单词say“cat”。if语句找到了这个词。现在有20行文本,直到有一行没有文本(空。这是我要停止打印的地方)。您说过在我的条件中包装console.log。console.log仅在满足条件的情况下打印变量所在的位置。我如何转到顶部并读取超出其行变量停止位置的内容。可以想象,您可以设置外部(全局)变量变量print=false,在开始条件下为true,只有在为true时才打印,即在结束条件下将其设置为false。这对我来说似乎是一个天真的解决方案,我相信有一种更优雅的方法。但现在我觉得这是最简单的方法。@KARLockhart…谢谢我使用了spooky的示例。代码在我的ori附近基纳尔柱。
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);
});
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 );


    }

  }


});

}