1. ホーム
  2. node.js

[解決済み】Nodeでstdinから一行ずつ読み込む方法

2022-04-05 18:02:24

質問

テキストファイルをnodeで処理したいのですが、コマンドラインから以下のように呼び出すことができます。

node app.js < input.txt

ファイルの各行を個別に処理する必要がありますが、一度処理した入力行は忘れてもかまいません。

stdinのon-dataリスナーを使うと、入力された蒸気がバイトサイズでチャンクされるので、これを設定する。

process.stdin.resume();
process.stdin.setEncoding('utf8');

var lingeringLine = "";

process.stdin.on('data', function(chunk) {
    lines = chunk.split("\n");

    lines[0] = lingeringLine + lines[0];
    lingeringLine = lines.pop();

    lines.forEach(processLine);
});

process.stdin.on('end', function() {
    processLine(lingeringLine);
});

しかし、これではとてもぞんざいな印象を受けます。lines配列の最初と最後の項目をマッサージする必要があります。もっとエレガントな方法はないのでしょうか?

どのように解決するのですか?

を使用することができます。 リードライン モジュールは、標準入力から一行ずつ読み込むことができます。

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

rl.on('line', function(line){
    console.log(line);
})