拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
PerlでZipファイルを作る
Movable Type用に今後作りたいと考えているプラグインで、Zipファイルを作成する処理が必要になります。
そこで、PerlでZipファイルを作る方法を調べてみました。
Archive::Zip
PerlでZipファイルを操作するには、Archive::Zipを使うのが簡単です。
Archive::ZipはZipファイルの作成や読み込みの機能を持ったクラスで、シンプルな記法でZipファイルを読み書きすることができます。
Perlのプログラムに以下の行を入れると、Archive::Zipを使うことができます。
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
Zipファイルのオブジェクトを作成
Archive::ZipでZipファイルを作る場合、まずメモリ上にZipファイルのオブジェクトを作ります。
オブジェクトを変数$zipに割り当てるなら、以下のように書きます。
my $zip = Archive::Zip->new();
ファイルを圧縮する
ファイルを圧縮するには、オブジェクトのaddFileメソッドを使います。
オブジェクトを変数$zipに割り当てている場合に、カレントディレクトリにある「sample1.txt」ファイルを圧縮するには、以下のように書きます。
$zip->addFile('sample1.txt');
サブディレクトリにあるファイルを圧縮するには、サブディレクトリ名も含めてファイル名を指定します。
例えば、カレントディレクトリの中に「dir」というディレクトリがあり、その中の「sample2.txt」ファイルを圧縮するには、以下のように書きます。
$zip->addFile('dir/sample2.txt');
また、ファイル名を変えて圧縮したい場合は、addFileメソッドの2つ目のパラメータでそのファイル名を指定します。
例えば、「sample1.txt」を圧縮し、ファイル名を「otherfile.txt」にしたい場合は、以下のように書きます。
$zip->addFile('sample1.txt', 'otherfile.txt');
テキストデータを圧縮する
テキストデータを直接に圧縮することもできます。
それには、「addString」というメソッドを使います。
例えば、変数$strに入っているテキストデータを圧縮し、「string.txt」というファイル名を付けたい場合は、以下のように書きます。
$zip->addString($str, 'string.txt');
圧縮せずに格納する
Zipファイルにファイルや文字列を追加する際に、圧縮せずに単に格納だけしたい場合もあります(例:短いファイルで、圧縮するとかえってサイズが大きくなる場合)。
このような時には、addFileやaddStringのメソッドを実行した後に、その戻り値のオブジェクトに対して「desiredCompressionMethod」というメソッドを実行し、パラメータとして「COMPRESSION_STORED」を渡します。
例えば、「sample1.txt」というファイルを格納するだけの場合、以下のように書きます。
my $sample1 = $zip->addFile('sample1.txt'); $sample1->desiredCompressionMethod(COMPRESSION_STORED);
Zipファイルに保存する
Zipファイルのオブジェクトを作り終わったら、最後にその内容をZipファイルに保存します。
それには「writeToFileNamed」というメソッドを使い、パラメータとしてファイル名を指定します。
戻り値が「AZ_OK」なら、保存に成功しています。
例えば、変数$zipに割り当てたオブジェクトを「sample.zip」というファイルに保存するには、以下のようにします。
if ($zip->writeToFileNamed('sample.zip') == AZ_OK) { print "sample.zip is successfully saved.\n"; } else { print "sample.zip save error.\n"; }