javascript - 使用 readline node.js 搜索文本文件

标签 javascript node.js readline

请考虑以下代码。我想要做的是从 createStream 函数中的 names.txt 中一一选取名称,然后使用 调用 FileSearch 函数nameToSearch 作为参数并逐行搜索list.txt。因此,一个名称并逐行搜索 list.txt,另一个名称并逐行搜索 list.txt 等等......

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 的最后一行。我不知道为什么

最佳答案

我设法使用逐行模块解决了该问题,现在输出与预期完全一致。代码如下

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;

关于javascript - 使用 readline node.js 搜索文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42232026/

相关文章:

javascript - 使用 Express 下载图像并使用 AJAX 在 Vue 中显示

node.js - 使用 require() 并导入私有(private) npm 模块失败

vba - 是否有任何相当于 vba 中的 readline 的命令?

python - 提取 = 和 ; 之间的整数

javascript - 在 Angular 中从 nodejs 获取 JSON

javascript - 如何使用 nodejs 从 stdin 读取值

javascript - Express 中的并发

javascript - chart.js:将堆叠条形图的工具提示放在条形图的顶部

javascript - JS中的类和函数?

node.js - 重命名文件夹时出现间歇性 EPERM 错误