2016-08-22 8 views
0

私はnodejsではなく、新しいです。私は行単位で読み込み、コンソールに出力できますが、vbscriptやpythonのようにテキストファイルをループすることはできません。ここに私がしたいことがあります。nodejsのテキストファイルをループします

単語のファイルをループします。単語を見つけたら、プログラムをテキストファイルの次の行に移動して、それを画面と次の行に印刷して、空の行(ループを止める場所)に移動します。

今のところ起こっているのは、単語を読み込んで停止することだけです。私はnodejのテキストファイルをループする方法をオンラインで見つけられませんでした。

テキストファイルの次の行にどのように手が届くのか分かりません。

私はこの問題を回避する方法を完全に説明してください。 lineReaderを次の行に移動させるために追加できるものは何ですか?コードは以下の通りです。それはきれいにされています。 if文の中で別のfor-loopを実行しようとしましたが、動作しません。私はArrayを試しましたが、どちらも動作しません。

var lineReader = require('readline').createInterface({ 
input: require('fs').createReadStream('text.txt') 
}); 


lineReader.on('line', function (line) { 
    for (var x= 0; x < line.length; x++) 
    if(line === "word"){ 

     console.log(line); 
    } 

    } 


}); 

改訂版です。私は恐ろしいの例を修正しました。

function find(){ 
var Arry = []; 
var lineReader = require('readline').createInterface({ 
input: require('fs').createReadStream(text.txt) 
}); 

lineReader.on('line', function (line) { 
Arry.push(line); 
}); 

lineReader.on('close', function (line) { 

    var Ncount = 0; 
    for(var x =0; x < Arry.length; x++){ 
     if (Arry[x] == 'cat'){ 

     do { 
      Ncount +=1;  
      x +=1; 
      if (Arry[x] == "") { 
      Ncount = 700; 
      } 
     console.log(Arry[x]); 
     } while (Ncount<700); 


    } 

    } 


}); 

} 
+2

[Node.jsの中に一度にファイル1行を読む](http://stackoverflow.com/questions/6156501/read-a-file-one-line-at-の可能性のある重複a-time-in-node-js) – LBes

+0

は重複していません。他の投稿は私の質問に対処していません –

+0

あなたはnode.jsの方法でファイル行を行番号で読みたいと思っていましたか? – LBes

答えて

0

このコードを使用すると、データ内を前後に移動することができます。これが原因メモリ集約することができますに役立つことができます注意してください:

var fileLineArray = []; 
var lineReader = require('readline').createInterface({ 
input: require('fs').createReadStream('text.txt') 
}); 

lineReader.on('line', function (line) { 
//  console.log(line); 
     fileLineArray.push(line); 

}); 

lineReader.on('close', function(){ 
     for(var i=0; i<fileLineArray.length;i++){ 
      var wordIs = fileLineArray[i]; 
      if(wordIs === "word"){ 
       console.log(wordIs); 
       } 
     } 
}); 

旧答えだった: は、このコードを使用します。

var lineReader = require('readline').createInterface({ 
input: require('fs').createReadStream('text.txt') 
}); 


lineReader.on('line', function (line) { 
//  console.log(line); 
    if(line === "word"){ //I am checking for word "word" 

     console.log(line); 
    } 

}); 
+0

text.txtには各行に単語を1単語ずつ入れます。各行に複数の単語がある場合は、tokenizerを実装する必要があります。 – spooky

+0

それは各行を読むべきものですが、単語を含む行が見つかると次の行に行き、それを読むなどの方法では操作できません。 –

+0

@Nb_me私は今あなたがしようとしていることを理解しています...ファイルを配列に読み込んだり、必要に応じて操作する必要がありますか?あなたはそれを試しましたか? – spooky

0

あなたがここに最後の例を見れば:https://nodejs.org/api/readline.html

const readline = require('readline'); 
const fs = require('fs'); 

const rl = readline.createInterface({ 
    input: fs.createReadStream('sample.txt') 
}); 

rl.on('line', (line) => { 
    console.log('Line from file:', line); 
}); 

各行について、関数は行変数で呼び出され、ログがトリガーされます.console.logを条件付きでラップすることができます。ここで覚えておくべきことは、提供する関数がパラメータとして渡される行をコールバックとして呼び出されるため、外部ループが不要なことです。

+0

Ok ...もっと理解できるように助けてください。ここに私がしたいことの例があります。このファイルには「cat」という単語が含まれています。 ifステートメントはこれを検出します。今では、テキストがない行があるまで、20行のテキストがあります(空で、これを印刷を止めたいところです)。あなたは私の状態でconsole.logをラップすると言った。 console.logは、条件が満たされた場合に変数がどこにあるかだけを出力します。上の行に移動して、行変数が停止した場所を超えて読むことができます。 –

+0

開始条件でprint = falseのような外部(グローバル)変数をtrueに設定し、それが真であるときにのみ印刷することができます。つまり、終了条件でfalseに設定します。これは私には素朴な解決策のように思えます。私はそれを行うよりエレガントな方法があると確信しています。しかし、今は最も簡単な方法として私を襲う。 – KARLockhart

+0

@KARLockhart ...ありがとう、私はうんざりの例を使用しました。コードは、私の元のポストの近くで一番上にあります。 –

0

これは私が欲しかったものです。私は変態の例を修正しました。

function find(){ 
var Arry = []; 
var lineReader = require('readline').createInterface({ 
input: require('fs').createReadStream(text.txt) 
}); 

lineReader.on('line', function (line) { 
Arry.push(line); 
}); 

lineReader.on('close', function (line) { 

var Ncount = 0; 
for(var x =0; x < Arry.length; x++){ 
    if (Arry[x] == 'cat'){ 

     do { 
      Ncount +=1;  
      x +=1; 
      if (Arry[x] == "") { 
      Ncount = 700; 
      } 
     console.log(Arry[x]); 
     } while (Ncount<700); 


    } 

    } 


}); 

} 
関連する問題