【node.js】TransformStreamを使ってみた
はじめに
babelifyとかいうモジュールのコードを見てたらstreamというのが出てきてよくわからなくなったのでとりあえずいじってみた
内容はcsvを読み込んでtsvに変換して出力するだけ
test.js
#!/usr/bin/env node
var fs = require("fs"),
inherits = require("util").inherits,
Transform = require("readable-stream/transform");
// input
var reader = fs.createReadStream("input.csv", "utf-8", {bufferSize: 10});
reader.setEncoding("utf8");
// output
var writer = fs.createWriteStream("output.tsv");
// csv → tsvへ
inherits(TransformCsv2tsv, Transform);
function TransformCsv2tsv(opts) {
Transform.call(this, opts);
}
TransformCsv2tsv.prototype._transform = function(chunk, encoding, done) {
chunk = chunk.replace(/,/g, "\t");
this.push(chunk);
done();
};
var transform = new TransformCsv2tsv({ objectMode: true });
// 実行
reader.pipe(transform).pipe(writer);動作確認
$ cat input.csv 1,一郎 2,二郎 3,三郎 $ ./test.js $ cat out.csv 1 一郎 2 二郎 3 三郎
おわりに
babelifyはes6形式のファイルをes5で動くように変換してくれるので、こういう形でやるのかというのがなんとなくわかってよかった。
以上です