C catch
cd
ceil
clock
close
concat
continue
create_sphere


catch [catch]

スクリプトを実行し、エラーが出れば、実行せずにスキップします。

通常、スクリプトの途中で、エラーが出ると、エラー発生個所で中断され、そのあとの部分は実行されません。
しかし、エラーの内容によっては、中断せずに、エラー個所をスキップすればすむようなケースもあります。
こういうときに catch コマンドを使うと、エラーが出た部分だけをスキップして、次を実行することができます。
たとえば、

set a 0
set c 0
set d 0
set list [list a b c d]
foreach l $list {
    unset $l
    message $lをunset
}
というスクリプトの場合、変数 b は set されていないので、unset しようとすると、エラーになります。
実行すると、

aをunset
can't unset "b": no such variable

というエラーメッセージが出て中断されます。catch コマンドを使って次のように書き換えると、

set a 0
set c 0
set d 0
set list [list a b c d]
foreach l $list {
    catch {
        unset $l
        message $lをunset
    }
}
エラーが出た部分は、スキップして次を実行します。実行結果は、

aをunset
cをunset
dをunset

となります。

2003.6.9(月) 15:35:31[編集]



cd [cd]

現在の作業ディレクトリを移動します。

たとえば

set c_d [pwd]
set n_d [string range $c_d 0 [expr [string last [file tail $c_d] $c_d] - 1]]
cd $n_d

とすると、現在のディレクトリの親ディレクトリに移動します。

親ディレクトリのパスを得るには、もっといい方法があると思うのですが(^^;;
2005.6.17(金) 12:44:40[編集]



ceil [ceil]

実数の小数部分を繰り上げます。マイナスのときは、切り捨てます。

set a 34.567
set b -34.567
message "a = [expr ceil($a)]"
message "b = [expr ceil($b)]"

を実行すると、

a = 35.0
b = -34.0

と表示されます。整数にするためには、さらに int を使って

[expr int(ceil($a))]

のようにする必要があるようです。

小数部分の切り捨ては、floor を使います。
2003.6.9(月) 15:49:31[編集]



clock [clock]

時刻や日付を得るコマンドです。clock のあとに、オプションをいろいろとつけられるようですが、よく使うのは、seconds です。

set sec [clock seconds]

で得た値に、さらにformat オプションをつけてclock コマンドを実行することによって、現在の時刻が得られます。

set sec [clock seconds]
message [clock format $sec -format "今日は%m月%d日。時刻は%Xです。"]

clock seconds で得られるのは、特定の時刻からの経過秒数のようです。
これ を 0 として計算してみると、1970年1月1日午前9時ちょうどからの秒数のようです。

Shade のスクリプトで使う場合は、スクリプト開始からの経過時間のように、
相対的な時間を使う場合が多いと思います。スクリプトの最初に

set start_t [clock seconds]

最後に

set fin_t [clock seconds]
message "[expr $fin_t - $start_t]秒で終了"

と書いておくと、スクリプトの実行に要した時間を表示することができます。


2003.6.9(月) 17:48:54[編集]



close [close]

open コマンドを使って、ファイルにアクセスした場合は、必ずclose コマンドで開いたファイルを閉じておきます。

set file_ID [open test.tcl r]
set cnt [read $file_ID]
close $file_ID

2003.6.9(月) 17:49:58[編集]



concat [concat]

要素をつなぎ合わせて、リストにしますが、要素リストになっている場合、要素をばらばらにしてつなぎ合わせます。

set list1 {1 2 3}
set list2 {4 5 6}
message [concat $list1 $list2]

を実行すると、

1 2 3 4 5 6

と表示されます。

同じくリストを作るコマンド list の場合は、リストをつなぐ場合は、リストのまま、つなぎます。

set list1 {1 2 3}
set list2 {4 5 6}
message [list $list1 $list2]

を実行すると、

{1 2 3} {4 5 6}

と表示されます。

2003.6.9(月) 17:50:33[編集]



continue [continue]

ループをスキップします。

for {set i 0} {$i <= 9} {incr i} {
    if {$i == 4} {
        continue
    }
    message $i
}
を実行すると、

1
2
3
5
6
7
8
9

と表示されます。4 が抜けています。

ループを中止する break コマンドと同様に、一番内側のループ文だけスキップします。


2003.6.9(月) 17:51:33[編集]



create_sphere [create_sphere]

Shade のコマンドです。

球を作成します。

create_sphere at {110.0 60.0 300.0} r 70.0 as "球の名前"

の様に指定します。
at のあとに作成される球の中心座標値、r のあとに球の半径、
as のあとに作成される球の名前を指定します。
as 以降を省略すると標準の名前になります。
2003.6.17(火) 12:52:40[編集]


Sakura Dictionary Ver. 1.09a
Scripted by UTANO Lime
(c)Pastel Carrot 1999-
All rights Reserved.