2017-02-14 59 views
0

請考慮下面的代碼。我想要做的是從names.txt中選取createStream函數中的名字,然後從012那裏撥打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 
. 
. 

我的OU t把控制檯是這樣的事情是這樣的

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

我不正確使用readline模塊?

編輯:查看更多和搜索發現它可能不得不做一些事情,閱讀最後一行。它沒有閱讀list.txt的最後一行。我不知道爲什麼

+0

只是想驗證你正在期待'list-2.txt'而不是'list.txt'如下所示:'input:fs.createReadStream('./ list-2.txt '),' – Nijikokun

+0

'list-2.txt'是一個錯字,問題依然存在。但我已經設法解決它。我會發布答案。謝謝 – user1207289

回答

0

我設法通過使用逐行模塊來解決問題,現在輸出結果與預期一致。繼承人的代碼

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;