Text::CSV::BulkData-0.01 Released

とちょっとおおげさに書いてみました*1


Text::CSV::BulkData
http://search.cpan.org/dist/Text-CSV-BulkData/

システム開発現場ではしばしば大量のテストデータを作成する機会がありますよね。

私の関わるプロジェクトではCSVファイルを入力ファイルにして試験をする事が多々あります。

あとはOracle SQL*LoaderのINFILEのCSVファイルで万単位のレコードをimportして試験の準備したりとかもよくある作業です。

これは、そういうときに工数をかけずに少しでも商用に即した試験データがつくるためにチームで使用していたものを基にしたものです。

インクリメントした値にカラムによっては四則演算と剰余を組み合わせる事が出来ます。またそのパターンの適用範囲を指定する事ができます。

use Text::CSV::BulkData;

my $output_file = "/your/dir/example.dat";
my $format = "0907000%04d,JPN,160-%04d,type000%04d,0120444%04d,20080418100000\n";

my $gen = Text::CSV::BulkData->new($output_file, $format);

my $pattern_1 = [undef,'*2','+2',undef];
$gen->initialize
    ->set_pattern($pattern_1)
    ->set_start(1)
    ->set_end(5)
    ->make;
my $pattern_2 = [undef,'/10','-2','%2'];
$gen->set_pattern($pattern_2)
    ->set_start(6)
    ->set_end(10)
    ->make;

これによって/your/dir/example.datの内容は

09070000001,JPN,160-0002,type0000003,01204440001,20080418100000
09070000002,JPN,160-0004,type0000004,01204440002,20080418100000
09070000003,JPN,160-0006,type0000005,01204440003,20080418100000
09070000004,JPN,160-0008,type0000006,01204440004,20080418100000
09070000005,JPN,160-0010,type0000007,01204440005,20080418100000
09070000006,JPN,160-0000,type0000004,01204440000,20080418100000
09070000007,JPN,160-0000,type0000005,01204440001,20080418100000
09070000008,JPN,160-0000,type0000006,01204440000,20080418100000
09070000009,JPN,160-0000,type0000007,01204440001,20080418100000
09070000010,JPN,160-0001,type0000008,01204440000,20080418100000

のようになります。

乱数や他の演算方法とかも追加していくつもりです。

*1:普通こういうタイトルはそのモジュールの公開や更新を待ってる人がいるときに書くのでしょうけど、やってみたかったので(笑)