2017-02-14 6 views
0

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

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

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

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

Код:

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. Я не уверен, почему

+0

Просто хочу, чтобы убедиться, что вы ждете 'не список-2.txt'' list.txt', как показано здесь: 'вход: fs.createReadStream (» ./ список-2.txt '), ' – Nijikokun

+0

' list-2.txt' был опечаткой, проблема осталась такой, как есть. Но мне это удалось. Я отправлю ответ. благодаря – user1207289

ответ

0

Мне удается решить проблему с помощью линейного модуля, и теперь результат будет точным, как ожидалось. 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; 
Смежные вопросы