Поиск текстового файла с помощью readline node.js

Пожалуйста, рассмотрите ниже код. То, что я хочу сделать, - это выбрать имя из names.txt в createStream функцию по очереди и оттуда вызывать функцию FileSearch с nameToSearch в качестве параметра и искать list.txt по строкам. Итак, одно имя и поиск list.txt по строкам, другое имя и поиск list.txt по строкам и т.д....

list.txt - большой файл. Если находит совпадение, выведите строку поиска и номер строки. Я думал, что он выберет одно имя и номера строк, а затем перейдет к второму имени и так далее, но это

  • Пропуск строк. Я искал несколько имен вручную, а соответствующие номера строк там не выводятся)

  • Смешивание имен. Я могу видеть имена в начальной части вывода, а затем где-то еще на выходе.

код:

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

var nameToSearch

var createStream = function (){
var lineNumber=0;
var ended = false;
var rlName = readline.createInterface({
      input : fs.createReadStream('./names.txt'),
      output: process.stdout,
      terminal: false
      })
rlName.on('line',function(lineInNameFile){
     ++lineNumber;
      nameToSearch=lowercase(lineInNameFile);
     FileSearch(nameToSearch);
     })
}


var lowercase=function(str){
     return String(str).toLowerCase();
}

var  FileSearch = function (searchString){
var listlineNumber=0;
var rlList = readline.createInterface({   
      input : fs.createReadStream('./list-2.txt'),
      output: process.stdout,
      terminal: false
})
rlList.on('line',function(lineInListFile){
     ++listlineNumber;
     if (lineInListFile===searchString){
         console.log( searchString+ ":" + listlineNumber);
     } 

})

} 

var runSearch = createStream();
exports.createStream = createStream; 

names.txt выглядит следующим образом

OLIVER
CHARLOTTE
LIAM
AMELIA
.
.

и list.txt выглядит так, в основном одно слово в строке в обоих файлах

a
aah
aahed
aahing
aback
abacus
abacuses
abaft
abalone
abalones
.
.

Мой выход на консоли - это что-то вроде этого

grayson:2322
emmett:3756
emmett:6399
lily:3739
lily:6340
.
.

Я не правильно использую модуль readline?

РЕДАКТИРОВАТЬ:, просмотрев больше, и поиск обнаружил, что он может что-то сделать с чтением последней строки. Он не читает последнюю строку list.txt. Я не уверен, почему

Ответы

Ответ 1

Мне удается решить проблему с помощью линейного модуля, и теперь результат будет точным, как ожидалось. heres код

var nameToSearch

//Function to retrieve names

var createStream = function (){

var lineNumber=0;
var nameLine = require('line-by-line')
lrName = new nameLine('./names.txt');
//lrName = new nameLine('./names-testFile.txt');

var ended = false;

 lrName.on('line', function (lineInNameFile) {
    ++lineNumber;
    nameToSearch=lowercase(lineInNameFile);
    FileSearch(nameToSearch);
 });     


}


var lowercase=function(str){
     return String(str).toLowerCase();
}

 //Function to search in list file

var  FileSearch = function (searchString){

    var LineByLineReader = require('line-by-line'),
    lr = new LineByLineReader('./list.txt');
    //lr = new LineByLineReader('./list-testFile.txt');
    var listlineNumber=0
    var arr = []

    lr.on('line', function (lineInListFile) {
        ++listlineNumber;
        if (lineInListFile===searchString){
            arr.push(listlineNumber);

        } 
     });

     lr.on('end', function () {
            console.log( searchString+ ":" + arr);
     });

} 

var runSearch = createStream();

exports.createStream = createStream;