base64, |
※実は、最近出没したC言語で記述されたTclライブラリTATも気になります。(^^;)
こちらも動向を見守りたいと思います。
package require base64 # JISコードに変換した日本語をエンコードする set code [::base64::encode [encoding convertto iso2022-jp 本日は晴天なり]] => GyhCGyRAS1xGfCRPQDJFNyRKJGo= # デコードしたJISコードをUNICODEに変換する encoding convertfrom iso2022-jp [::base64::decode $code] => 本日は晴天なり |
package require uuencode # JISコードに変換した日本語をエンコードする set code [::uuencode::encode [encoding convertto iso2022-jp 本日は晴天なり]] => GyhCGyRAS1xGfCRPQDJFNyRKJGo= # デコードしたJISコードをUNICODEに変換する encoding convertfrom iso2022-jp [::uuencode::decode $code] => 本日は晴天なり |
assert文はプログラムに診断機能を付け加えます。デバッグ時に役立ちます。
引数で指定した条件が偽の場合、エラーメッセージを出力します。それ以外の場合は何もしません。
package require control # assertionを有効にする ::control::control assert enabled 1 # Tclが8.3でなければassertionが発生する ::control::assert {$tcl_version == 8.3} |
assertでエラーが発生した時のコールバックを設定できます。
以下の例はassert発生時に、tk_messageBoxを呼び出し、メッセージボックスにエラーを表示します。
package require control # assertionを有効にする ::control::control assert enabled 1 # コールバックを設定する ::control::control assert callback {tk_messageBox -message} # Tclが8.3でなければassertionが発生する ::control::assert {$tcl_version == 8.3} |
do whileは引数で指定した条件の間ループします。
Tclのbreak, continue, error等の制御文と組み合わせて使えます。
package require control # 初期値を0にする set i 0 # 10になるまでループする ::control::do { incr i } while {$i < 10} |
do untilは引数で指定した条件までループします。
Tclのbreak, continue, error等の制御文と組み合わせて使えます。
package require control # 初期値を0にする set i 0 # 10になるまでループする ::control::do { incr i } until {$i >= 10} |
Tcl Coreのwhile文とTcllibのdo while(until)文はcatch文の振る舞いが異なります。
package require control # while文 proc a {} { while 1 { return -code error a } } # do while文 proc b {} { ::control::do { return -code error b } while 1 } catch a => 1 catch b => 0 |
no-op文は、何もしない文です。無効なassert文と同じ振る舞いをします。
package require control # 何もしない ::control::no-op {set a 1} # 何もしない ::control::no-op set b 1 |
package require csv # リスト形式をCVS形式に変換する ::csv::join {a b c {x y}} => a,b,c,x y # リストのリスト形式をCVS形式に変換する ::csv::joinlist {{a b} {1 2} {x y}} => a,b => 1,2 => x,y => # CVS形式をリスト形式に変換する ::csv::split {a,b,c,x y} => a b c {x y} |
使い方はとっても簡単で、指定した配列変数にカメラ情報を返します。
package require exif # ファイルを開く set fd [open hoge.jpg r] # カメラ情報を解析する array set answer [::exif::analyze $fd] parray answer # 有効な要素名を得る ::exif::fieldnames # ファイルを閉じる close $fd |
標準のタグに対応する以外に、CanonのG1とD30の独自タグにも対応しています。
今のところ、EXIFファイル内のサムネイル画像を抽出するような機能はありません。
不幸なことに、オリジナルexif.plのバグまで忠実に移植されています。(^^;)
仕方ないので、修正パッチを作成してSourceForgeにポストしました。
パッチが採用されるかは不明ですが、こちらにパッチと修正版を置きました。