2017-06-08 1 views
0

基本的には、私はファイル内の各行で見つけなければならないクライアントからの複数の検索文字列を持っています。ファイル(fs)の各行を読み込んで結果を得るときに複数の文字列キーワードをマッチングする方法は?

どのように各検索文字列をループして一致を見つけることができ、ループが完了すると、一致するすべての行がresultsにプッシュされます。

searchLogs.js

/* Example client input 
    var searchStr = [{"text":"457383",{"text":"requestPdr"}] 
    */ 
async.eachSeries(filesData.logFiles, function(logfile, done) { 
     // read file 
     readStream = fs.createReadStream('./logs/' + filesData.searchEnv + '/' + logfile.filename, 'utf8') 
     readStream.pipe(split()) 
      .on('data', function(line) { 
       for (var i = 0; i < searchStr.length; i++) { 
        if (line.toLowerCase().indexOf(searchStr[i].toLowerCase()) != -1) 
         results.push({ 
          filename: logfile.filename, 
          value: line 
         }); 

       } 
      }); 

    }, 
    function(err) { 
     if (err) { 
      console.log('error', err); 
     } 
     readStream.on('end', function() { 
      callback(results); 
     }); 
     results = []; 
    }); 
+0

searchStr[i].toLowerCase()

を変更してみてください、私は2つのシナリオがありますと仮定します。コードがエラーをスローしますが、 'err'は空のままになり、if文は決して真ではありません。後者は可能性が高いと思いますが、結果を確認して投稿することはできますか? –

答えて

0

searchStr[i]['text'].toLowerCase()

+0

TypeError:未定義の 'toLowerCase'プロパティを読み取ることができません – hussain

+0

'searchStr'は入力した例のようですか?もしそうなら、それは 'toLowerCase'メソッドをどのように持っていますか? searchStr [i]はオブジェクトですか? –

関連する問題