プログラムTIPS

DEMO PROGRAM ヘキサドライブでは様々な研究開発をしています。その一部を紹介。

合体っ!(2010年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から実行した場合などは、
ファイル数を減らす事による読み込み時間の減少を実感できると思います。 

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

【免責事項】

本サイトが提供している情報に関しては、安全性等、いかなる保証もされません。 株式会社ヘキサドライブは、これらの情報をあなたが利用することによって生ずるいかなる損害に対しても一切責任を負いません。

【著作権】

本サイトが提供しているコンテンツについては、特に断りのある場合を除き、株式会社ヘキサドライブが著作権を有します。