MENU閉じる

LAB

RubyプログラムTIPS

研究室プログラムTIPSRuby2010.2.5

合体っ!

今回は、何回かぶりにRubyについて書いてみたいと思います。
以前、色々な種類のテキストデータを読み込み、バイナリデータとして出力する方法を書いてみました。
続きとして、その出力したバイナリデータを合体!!して、1つのファイルにしてみたいと思います。

サンプルとして、「3つのファイルを読み込み、ファイルサイズを付加して中身を繋げる」スクリプトを書いてみます。

 # 繋ぎ合わせるファイルの名前
 fileNameArray = ["file1.dat", "file2.dat", "file3.dat"]

 # 書き込み先のファイルをバイナリで開く
 File.open("result.dat", "wb") do | dstFile |
     # 繋ぎ合わせるバイナリファイルを順に開く
     fileNameArray.each do | fileName |
         File.open(fileName, "rb") do | srcFile |
             # データを読み込み
             data = srcFile.read

             # データサイズを書き込み
             dstFile.write [data.size].pack("L")

             # データを書き込み
             dstFile.write data
         end
     end
 end

実行して貰えれば、3つのファイルを繋げた1つのファイルが出来上がることが確認できると思います。 

このスクリプトでは、読み込むファイルを固定していたり、
ファイルの中身に関する情報がサイズしかありません。 

読み込むファイルを「指定したディレクトル内のファイル全部」に変えたり、
ファイルサイズの直後にファイルの種類を追加したりすれば、
さらに汎用性が増していきますね。 

ちなみに、複数のファイルを1つのファイルにする理由は色々あるのですが、
その1つに「少ないファイル数の方が、読み込み時間が少なくなる」というのがあります。 

例えば、10000バイトのファイルを1つ読み込むより、
100バイトのファイルを100個読み込む方が多く時間がかかります。 

提出作品をハードディスクから実行する場合は、さほど気にならないかもしれません。
ですが、極端にファイル数が多い場合や、CDから実行した場合などは、
ファイル数を減らす事による読み込み時間の減少を実感できると思います。 

今は役に立たなくても、いつか役に立つかもしれませんよ?
良ければ、頭の片隅にでも覚えておいて下さいな。

RECRUIT

大阪・東京共にスタッフを募集しています。
特にキャリア採用のプログラマー・アーティストに興味がある方は下のボタンをクリックしてください

RECRUIT SITE