溢れ出る加齢臭

カレー臭に加え加齢臭が溢れ出る年齢になりました。

バイナリ→テキスト変換

仕事でデータ集計をせにゃならんのだけど、送られてきたデータがテキストデータをバイナリデータに変換したものだったので、昨日からバイナリデータを読み込むプログラムを作っていた。

バイナリデータの読み込みはCでしか作ったことがなかったので、記憶とリファレンスを頼りにまず作成した。しかしデータファイルが3000以上あるので、全てのファイルリストをプログラム中に書くのは面倒だ。そこで集計に用いるファイルを正規表現で抽出するスクリプトをPerlで書いて、Cのプログラムからビルドした実行ファイルもそのPerlから呼び出すようにした。

今はデータを読み込んでテキストに変換するだけのプログラムだが、集計プログラムまで拡張する際に、CとPerlを混在させるのがどうも非効率であるような気がしたので、同じスクリプトで書く方がよさげ。(正規表現で使用するデータファイルの選別を行うので、C言語で全てを実装する気はさらさらなかった)

Google先生にまずお伺いを立ててみると、Rubyでの方法が先に見つかった。どうやらバイト単位で読み込みを行って、unpackでテキストもしくは数値に変換するようだ。

できあがったスクリプトを動かしてみたが、やはりRubyは遅い。最終的には3000以上のデータファイル(1ファイルあたり720KB)から読み書きをするには、遅さが致命傷になる。unpackならPerlでもあるんじゃないかと思って、本を見ながらPerlで書き直した。

Rubyより早いので満足。