2011年7月24日日曜日

Erlang zip sample サンプル

Erlangのzip:zipについてどう動作するのか確認したくて、プログラミングしたので、そのソースを載せる。

そのまとめみたいなメモをgoogle Docに作ったので、合わせて参照あれ。
https://docs.google.com/document/d/1lQmkEN8UxggewyHtPGLfwhW5_r8qR1e7yeedYkdnR2M/edit?hl=ja


ソース:

-module(zipTest).
-include_lib("wx.hrl").

-export([start/0]).

%% -*- coding: shift-JIS -*-
%% Current Directory -> C:\Users\andre\erlwork
start() ->
    %myzipMem().
    %myzipVerbose().
    %myzipCwd().
    %myzipUcp().
    myzipCmt().

%% @doc write to file on memory data that compress by zip:zip/3
%% in C:\Users\andre\erlwork\auiTest.erl
%% out C:\Users\andre\erlwork\ngs_bin.zip
myzipMem() ->
    Option = [memory],
    case zip:zip("ngs.zip",["auiTest.erl"],Option) of
{ok,{"ngs.zip",Mem}} -> file:write_file("ngs_bin.zip",Mem),
ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.

%% @doc compress the directory
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs.zip
myzipDrct() ->
    Option = [],
    case zip:zip("ngs.zip",["zip"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.

%% @doc compress the file
%% in C:\Users\andre\erlwork\auiTest.erl
%% out C:\Users\andre\erlwork\ngs.zip
myzip() ->
    Option = [],
    case zip:zip("ngs.zip",["auiTest.erl"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.

%% @doc compress the directory with option [verbose]
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs.zip
myzipVerbose() ->
    Option = [verbose],
    case zip:zip("ngs.zip",["zip"],Option) of
{ok,"ngs.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.

%% @doc compress the directory and change current directory
%% in C:\Users\andre\erlwork\zip_work\test
%% out C:\Users\andre\erlwork\ngs_cwd.zip
myzipCwd() ->
    Option = [verbose,{cwd,"zip_work"}],
    case zip:zip("ngs_cwd.zip",["test"],Option) of
{ok,"ngs_cwd.zip"} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.

%% @doc compress the directory but uncompress the extension "*.erl".
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs_ucp.zip
%% ucp -> uncompress
myzipUcp() ->
    ZipName = "ngs_ucp.zip",
    Option = [verbose,{uncompress,{add,[".erl"]}}],
    case zip:zip(ZipName,["zip"],Option) of
{ok,ZipName} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.

%% @doc compress the directory but uncompress the extension "*.erl".
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs_cmt.zip
%% cmt -> comment
myzipCmt() ->
    ZipName = "ngs_cmt.zip",
    Option = [verbose,{comment,"This is test."}],
    case zip:zip(ZipName,["zip"],Option) of
{ok,ZipName} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.

wx.hrlはErlangのインストールディレクトリ内を検索するとあるので、それを本ソースと同一ディレクトリに配置してください。

ディレクトリ構成がちょっと面倒かも。C:\Users\andre\erlwork\に実行モジュール(beam)がある。それと同一ディレクトリにzipディレクトリとかzip_workディレクトリとかある。

毎回のことだけど、解説がつかないブログで申し訳ありません :-<



追記:2011/07/27


%% @doc compress the directory and compress the extension "*.zip".
%% in C:\Users\andre\erlwork\zip
%% out C:\Users\andre\erlwork\ngs_uncm.zip
%% uncm -> uncompress
myzipUncm() ->
    ZipName = "ngs_uncm.zip",
    Option =  [{uncompress,{del,[".zip"]}}],
    case zip:zip(ZipName,["zip"],Option) of
{ok,ZipName} -> ok;
{error,Reason} -> io:format("Reason:~p~n",[Reason])
    end.


このコードも追加して、実行したら、ファイルのサイズが若干違った。
普通に圧縮したものとこのコードで圧縮したものを比較すると、このコードでやったもののほうが5バイト大きかった。

0 件のコメント:

コメントを投稿