Вопрос:

цикл по текстовому файлу в nodejs

javascript node.js

5000 просмотра

3 ответа

106 Репутация автора

Я довольно новичок в nodejs. Я могу читать построчно и печатать на консоль, но не могу перебрать текстовый файл, как в VBScript или Python. Вот что я хочу сделать.

Перебрать файл для слова. Как только я найду слово, программа перейдет к следующей строке текстового файла и распечатает его на экране, следующей строке и т. Д., Пока не доберусь до пустой строки (там я остановлю цикл).

Прямо сейчас все, что происходит, это читает слово и останавливается. Я не нашел способ онлайн зациклить текстовый файл в nodejs.

Я заблудился от того, как добраться до следующей строки в текстовом файле.

Пожалуйста, подробно объясните, как обойти эту проблему, которая у меня есть. Что еще можно добавить, чтобы заставить lineReader перейти на следующую строку. код ниже. Это было убрано. Я попытался сделать еще один цикл внутри оператора if, но он не работает. Я попробовал 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);
     }

   }


});

Вот пересмотренная версия. Я изменил пример 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 );


    }

  }


 });

}
Автор: Nb_me Источник Размещён: 22.08.2016 09:46

Ответы (3)


1 плюс

1159 Репутация автора

Используйте этот код, который использует массив, чтобы иметь возможность перемещаться назад и вперед в данных. Остерегайтесь, это может потребовать много памяти, но помогает вам:

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

});
Автор: spooky Размещён: 22.08.2016 09:57

0 плюса

1 Репутация автора

Если вы посмотрите на последний пример здесь: 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 в свое условие. Здесь следует помнить, что предоставляемая вами функция будет вызываться как обратный вызов со строкой, передаваемой в качестве параметра, поэтому нет необходимости во внешнем цикле.

Автор: KARLockhart Размещён: 22.08.2016 10:09

1 плюс

106 Репутация автора

Это то, что я хотел. Я изменил пример 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 );


    }

  }


});

}
Автор: Nb_me Размещён: 23.08.2016 06:42
Вопросы из категории :
32x32