★圧縮・解凍

データを実際の大きさよりも小さくして保存します。

英数1文字1バイトとります。10文字で10バイト100文字で100バイトとるわけです。

じゃあ、どうやって圧縮するのでしょうか?文字数を減らす方法を考えるのです。

例えば、スペースを圧縮することを考えます。

This     is     a     pen.    {間に5文字のスペースが入っています}

という文があったとします。文字数を数えると、11文字+スペース15文字で、全部で

26文字ですから、26バイトの量があるのです。

これを

This5is5a5pen.      {5文字のスペースの変わりに数字の5を挟んでいく}

とすると、全部で、11文字+3文字(数字)で18バイトになるわけです。

This5is5a5pen.

が圧縮した形になるわけです。


★★★
実際に作ってみましょう。


This     is     a     pen.

をファイルで作ってみてください。 ls -l (ファイル名) で大きさを確認してみます。 なんかおかしくないか?全部で26文字なのに、、、、 さて、なんででしょう?余計な1文字とはどこから来るのだろうか? ヒント: od -c (ファイル名)   とすると解明できるぞ! 答え:    おしえてあげないよ。 ★★★ 次に

This5is5a5pen.

を作ってみてください。 ls -l (ファイル名) でサイズを確認します。 ★★★ スペースを圧縮するsed

    cat {ファイル名}  |  sed -e 's/     /5/g'

※ / /5/ は、 / / を  /5/ に変えるという意味です。    ここでは、スペースを5個見つけたらそれを5に置き換えてます。 ★★★ スペースを展開するsed

    cat {ファイル名}  |  sed -e 's/5/     /g' 

※ /5/ / は、/5/を / / に置き換えるという意味です。 ★★★ unixについてくるzip unzipを使ってみましょう。 準備:1000文字のファイルを作成します。    viを使うと簡単です。

   vi test   {テストファイルを作成します}
   1000ix    {1000回 挿入 xを}
      Esc       {エスケープ}
      :wq       {終了します}

ls -l をとると1001バイトになっているはずです。    最後の改行も含めると1001になるわけです。 ★★ 圧縮してみましょう

   zip test.zip test

とすると、test.zip を testから作成してくれます。    作成し終わったら大きさを比べてみましょう。    test 1001バイト    test.zip ________ バイト かなりサイズが小さくなっていることがわかりますね。 ★★ やってみましょう。 ★★

   10000文字のファイルを作成します。 ファイル名:mojimoji

   これを圧縮してください。          ファイル名:mojimoji.zip


大きさがどのくらい小さくなったか確認しましょう。 ★★ もっとやってみよう ★★    10万文字のファイルと100万文字のファイルを2つ作ります:mojimoji10man mojimoji100man 二つまとめて圧縮します:110mojimoji.zipをつくってください。 ★★    作り方:    PERLで作りましょう。

   open(F, ">mojimoji100man");

      for(1..1000000) {
           
           print F, "x";

     }

 このプログラムで100万文字のファイルを作ることができます。