2017-01-05 5 views
2

私はCodeAbbeyの目的のために、このような何かを行う便利な関数を作成したいと思います:Node.jsでreadlineを使用してすべての入力行を配列に取得するにはどうすればよいですか?

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout 
}); 

var lines = []; 

rl.on('line', (line) => { 
    lines.push(line); 
}); 

return lines; 

しかし、私は戻って取得すべては空の配列がどのようにreadline機能当然のイベントハンドラとしての。

ここで希望の動作を実行するためにreadlineを取得するにはどうすればよいですか?あるいは私は他の図書館を利用していますか?私はむしろ単に "デフォルト"のコンポーネントを使用したいと思いますが、私は別のものを使用しなければならないでしょう。

答えて

2
var lines = []; 

rl.on('line', (line) => { 
    lines.push(line); 
}).on('close',() => { 
    // Do what you need to do with lines here 
    process.exit(0); 
}); 

Node.jsとして実行され、Readlineを含む多くのパッケージで利用可能な機能の多くは、非同期です。 closeイベントが発生すると、通常はlinesを処理する必要があります。

あなたは、この非常に類似した解決の質問は役に立つかもしれません: node.js: read a text file into an array. (Each line an item in the array.)

は、この情報がお役に立てば幸い!

+0

今、私たちは、そのリンクされた質問から何かをしています。 'fs.readFileSync( 'file.txt')。toString()を変換するベストプラクティス。split(" \ n ");' stdin? – Sadiq

0

あなたはcloseイベントにラインアレイにアクセスすることをお勧めします:

var readline = require('readline'); 

var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout 
}); 

var lines = []; 

rl.on('line', (line) => { 
    lines.push(line); 
}); 

rl.on('close',() => { 
    console.log(lines); 
}); 

このコードはcreateInterfaceを確立し、そして配列linesの空を初期化します。プロンプトで、ユーザーがEnterキーを押すと、 "line"イベントが発生し、前に書き込まれた行がlines配列に追加されます。インターフェイスを閉じると(プロセスを強制終了するか、コードを手動で閉じる)、アレイをログアウトします。イベント・ループ上

$ node readlines.js 
this is 
the second line 
third 
[ 'this is', 'the second line', 'third' ] 
+0

'close'イベントの中の関数から行を返すことはできません – Sadiq

+0

行を返すことはどういう意味ですか?これの意図されたユースケースは何ですか? – hackerrdave

+0

これは、CommonJSモジュールを介してアクセスするgetLinesという引数を持たない関数になることを意図していますが、最も関連性の高い部分ではなかったため省略しました。 – Sadiq

関連する問題