読者です 読者をやめる 読者になる 読者になる

【node.js】TransformStreamを使ってみた

node.js javascript

はじめに

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で動くように変換してくれるので、こういう形でやるのかというのがなんとなくわかってよかった。
以上です