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にポストしました。
パッチが採用されるかは不明ですが、こちらにパッチと修正版を置きました。