proc [proc]
繰り返し実行するような処理を、proc を使ってプロシージャにすることができます。
proc Test {} {
○○○
return
}
Test
というのが、基本形でしょうか。プロシージャ名の後ろに引数を入れると、
proc Test {a b} {
set c [expr $a + $b]
return $c
}
set v1 3
set v2 5
Test $v1 $v2
たとえば、こんな感じになります。これを実行すると、Test プロシージャを呼び出すときに、
変数 v1 v2 に代入された値がTest プロシージャ内の変数 a b にそれぞれ渡されてプロシージャ内が実行されます。
return のあとに書いた値が、プロシージャそのものの値ということになります。
プロシージャで計算した値を変数に記録する場合は、
set d [Test $v1 $v2]
のようにします。
プロシージャは、それを呼び出す部分より、前に書いておかないと、エラーになる場合があるようです。
2003.6.10(火) 13:01:22[
編集]
puts [puts]
Shade のスクリプトでは、open コマンドで開いたファイルの書き込みに使う場合がほとんどだと思います。
set file_ID [open test.tcl w]
puts $file_ID "書き込み内容"
close $file_ID
を実行すると、作業ディレクトリにある test.tcl ファイルを開いて、
書き込み内容
と書き込みます。
test.tcl がすでに存在していた場合は、その内容は、いったんすべて消され、書き込んだ内容と置き換えられます。
test.tcl が存在しなかった場合は、新たに作られます。puts のあとに、-nonewline とオプションをつけると、最後の改行を省略します。
2003.6.11(水) 16:35:36[
編集]
pwd [pwd]
現在の作業ディレクトリ(カレントディレクトリ)のパスを返します。
set c_d [pwd]
とすると、変数 c_d にパスが記録されます。Windows の場合、Shade 起動時には、
C:/Program Files/Shade 6/Professional
のようになっていますが、ファイルを読み込んだり、保存したりすると、そのディレクトリに変わります。
ひとつ上の階層に移動するには、
set c_d [pwd]
set up_folder [string range $c_d 0 [expr [string last [file tail $c_d] $c_d] - 2]]
cd $up_folder
のようにするといいようです。
[file tail $c_d] で最後のパス区切り文字以降の文字を得て(Professional)、
[string last [file tail $c_d] $c_d] でその文字が、パスの文字中の何番目にあるかを調べます(26)。
26番目の文字はProfessional の P なので、-2 として、string range で指定した範囲の文字列を得ます。
[string range $c_d 0 [expr [string last [file tail $c_d] $c_d] - 2]] とすると、元のパスから /Professional を削ったパスが得られます。
2003.6.11(水) 16:31:40[
編集]