encoding [encoding]
エンコーディングを処理します。使えるのはShade6以降のようです。
encoding names
を実行すると、利用可能なエンコードの名前のリストが表示されます。
Shade6では、utf-8 identity unicode
と表示されました。
identity というのがよくわかりませんが
Tclは基本的にunicodeでコード化されるらしいので、実質ほかの文字コードとしては
utf-8しか使えないということでしょうか。
オプションがいくつかあります。
convertfrom オプションは指定した文字コードのデータをunicodeに変換します。
文字コードがutf-8の$dataがあったとして
encoding convertfrom utf-8 $data
は$dataをunicodeに変換します。
convertto オプションはunicode の文字列を指定した文字コードに変換します。
unicodeの文字列$strがあったとして
encoding convertto utf-8 $str
はutf-8に変換した文字列を返します。
Shade6ではutf-8しか扱えなくなったので、このencodingコマンドを使って
スクリプト側で何とかできないかと思いましたが、utf-8しか使えなさそうなので、
今のところ使い道がわかりません。
2005.6.17(金) 12:43:25[
編集]
env [env]
環境変数です。システムの情報を得るのに使います。配列 になっています。たとえば、
message $env(HOME)
でホームディレクトリが得られるようです。他にどういう要素(()の中に入れる文字)が使えるか、array コマンドを使って調べてみました。
message [array name env]
を実行してみると、
HOME PROCESSOR_IDENTIFIER ComSpec HOMEDRIVE ALLUSERSPROFILE PROCESSOR_REVISION PATHEXT LOGONSERVER USERDOMAIN PROCESSOR_LEVEL USERPROFILE USERNAME COMPUTERNAME Os2LibPath TMP SystemRoot PROCESSOR_ARCHITECTURE OS ProgramFiles APPDATA CommonProgramFiles windir Path TEMP HOMEPATH SystemDrive NUMBER_OF_PROCESSORS
と表示されました。つまり、
env(HOME) env(PROCESSOR_IDENTIFIER) env(ComSpec)
のように使えるということですが、どれがどういう情報なのかというのは、よくわかりません(^^;;)。使える要素は、OSによっても違うようです。
set a [array name env]
foreach b $a {
message "env($b) = $env($b)"
}
というようなスクリプトを実行してみると、いろいろ表示されます。
eval [eval]
文字列をスクリプトとして実行するコマンドです。たとえば
set msg "message test"
[$msg]
とすると、変数msg には message test という文字列が代入されますが、あくまでも文字列としか認識されず、
[$msg] としても、message test というコマンド名は無効というエラーメッセージが出ます。
ここでeval コマンドを使って
set msg "message test"
eval $msg
とすると、
test
と表示されます。つまり、変数msg に代入された文字列がコマンドとして認識されたということになります。
このeval コマンドを使うと、たとえば他のTclファイルを読み込んでスクリプトとして実行するということも可能です。
expr [expr]
数式を計算するコマンドです。tcl では expr をつけないと、数式も単なる文字列と認識されるようです。
計算した結果を得るには、実行したコマンドの値を返す [ ] で囲みます。
set kotae [expr (1+2)*3]
というように使います。
set kotae (1+2)*3
とすると、(1+2)*3 という文字列が代入されます。