« WindowsとVMWare開発においてpbcopy的なやつ | メイン | awkの代わりにperlを使おう »

2012年6月17日

DBIx::CSVDumperっての作った

DBIx::CSVDumper

SQLの結果をそのままCSVで出力したいと思って作った。使い方はSynopsisまんまだけどこんな感じ。

use DBIx::CSVDumper;
my $dbh = DBI->connect(...);
my $dumper = DBIx::CSVDumper->new(
    encoding    => 'cp932', # 出力エンコーディング(デフォルト: utf-8)
);
my $sth = $dbh->prepare('SELECT * FROM item');
$sth->execute; # プレースホルダーなければ省略可能
$dumper->dump(
    sth     => $sth,
    file    => 'tmp/item.csv',
    #fh     => $fh # ファイルハンドル渡したりも出来る
);

別にシェルでゴニョればできるしPerlでやる必要はなさそうなんだけど、Excelで食えるCSVを出力したいとかそういう大人の事情があったので、カッとなってモジュールを書いた次第。

あんまPerl環境が整ってない環境(Windows機とか)でもサクッと使えれば良いなと思っているので、Text::CSVくらいにしか依存しておりません。Text::CSV_XSが入っていればそちらを良しなに使ってくれたりします。

最初はいろいろな形式にダンプ出来るとか壮大なこと考えてたけど、とりあえずCSVだけで良いやとか考えなおしてこんな感じになりました。ちなむとText::CSV(_XS)?使ってるので、それで出せる形式であれば出力可能です。TSVとか。

DBIx::DumpってのがCPANにあったのですが、ちょっと古くてマルチバイト対応が怪しかったりしたので別のを作りました。インターフェースはなんとなく似た感じになっております。

もうちょっと整えてCPANに上げるかもね。

投稿者 Songmu : 2012年6月17日 23:06