Поиск текстового файла с помощью 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;