Node.js でファイルを一行ずつ読み込む
fs.ReadStream
だけを使う方法が Stack Overflow にあるけど、readline
で簡単にできた。ライブラリを使うなら byline を使うとよさそう。
var fs = require('fs'), readline = require('readline'), rs = fs.ReadStream('readline.js'), rl = readline.createInterface({'input': rs, 'output': {}}); var i = 0; rl.on('line', function (line) { console.log(i++ + ': ' + line.trim()); }); rl.resume();
% node readline.js
0: var fs = require('fs'),
1: readline = require('readline'),
2: rs = fs.ReadStream('readline.js'),
3: rl = readline.createInterface({'input': rs, 'output': {}});
4:
5: var i = 0;
6: rl.on('line', function (line) {
7: console.log(i++ + ': ' + line.trim());
8: });
9: rl.resume();
readline.createInterface
の output は writableStream
を受け取るので、writableStream
を継承したオブジェクトを作ってもいいけど、大げさな場合が多いと思う。
ファイルが大きくないなら全部読み込んで改行で分割したほうが早い。
http://nodejs.org/api/readline.html
http://nodejs.org/api/stream.html#stream_writable_stream