
Tclコマンド編
| スカラー変数 | 任意の文字列からなる変数。 | |||
| 例) | >set msg
"Hello !" >set msg Hello ! >puts "$msg Worlds" Hello ! Worlds |
|||
| 配列変数 | 配列名と要素名からなる変数。両者とも任意の文字列からなり、要素をかっこ{()}で括る。 要素名を任意の文字列で指定できることから、「連想配列」と呼ばれる。 |
|||
| 例) | >set msg(morning)
"Good Morning!" >set msg(GotoBed) "Oyasumi" >set msg(morning) Good Morning! >set msg can't read "msg": variable is array |
|||
| >set msg Ohayou >set msg_2 Konbanwa >set {msg ex. blank} "Konnitiwa " >puts $msg Ohayou >puts $msg_2=Samuidesune Konbanwa=Samuidesune >puts ${msg ex. blank}Atuidesune Konnitiwa Atuidesune >set arr(aisatu,thank)
"Arigato " |
変数名は、「msg」 変数名は、「msg_2」 変数名は、「msg ex. blank」 $ 以降、改行の手前までが変数名として認識される。 同様に、= の手前まで。 ブレースで囲むことで、空白のクォートおよび続く英字と分割されている。 配列名
arr 要素名 aisatu,thank |
| set | 変数の作成と参照をします。 set varName ?value? |
|||
| varName | 変数名。ドルマークの扱いに注意すること。 $ を付けると、変数置換後の文字列が渡されます。 |
|||
| ?value? | 変数に設定する任意の文字列。両脇の?は、省略可能の意味です。 省略すると参照になります。ただし、返値が変数の値であるため、作成時に参照もできます。 |
|||
| unset | 1つ以上の変数を削除します。 unset name ?name name ...? |
|||
| name | 削除したい変数名。 | |||
| 例) | >set msg "こんにちは" こんにちは >set week(mon) "Monday" Monday >set week(1) "Monday" Monday >unset msg week(mon) >array names week 1 |
スカラー変数へ定義 配列変数へ定義 配列変数の場合、全体も一部も可 |
||
| array | set
コマンドで作成された配列を操作します。 array option arrayName ?arg arg ...? |
|||
| option | 操作オプション。names get exists 等。 | |||
| arrayName | 配列変数名。 | |||
| ?arg arg ...? | 操作オプションごとの引数。 | |||
| 例) | >array exists week 0 >set week(mon) Monday >set week(tue) Tuesday >set week(thu) Thursday >array exists week 1 >array names week tue mon thu >array get week t* tue Tuesday thu Thursday |
配列変数 week
の有無は? 存在しない。 配列変数を作成。 配列変数 week の有無は? 存在する。 配列変数 week の要素は? tue mon thu の3つ。(順不同) 要素名 t で始まる要素の情報は? 要素名 値 … |
||
proc str_test1 {} {
set word_1 to;
set word_2 be;
set word_3 or;
set word_4 not;
set word_5 that's;
set word_6 the;
set word_7 question;
set word_8 .;
append dialogue [string totitle $word_1];
append dialogue " $word_2";
append dialogue [format { %s %s %s %s } $word_3 $word_4 $word_1 $word_2];
append dialogue " [string totitle $word_5] $word_6 $word_7$word_8";
puts $dialogue;
}
proc str_test2 {} {
catch {destroy .e};
entry .e;
place .e -x 10 -y 10;
puts "Please Input Strings!";
bind .e <Return> {str_test3};
}
proc str_test3 {} {
set wk [.e get];
if { [string compare $wk EOF] == 0 } {
puts "Thank you and see you next!";
destroy .e;
} {
puts [format {%s : %s} Inputted $wk];
puts [format {%s : %s} ToUpper [string toupper $wk]];
puts [format {%s : %s} ToLower [string tolower $wk]];
puts [format {%s : %s} ToTitle [string totitle $wk]];
puts [format {%s : %s} Length [string length $wk]];
}
}
|
| string | 文字列の各種操作を行います。 string option arg ?arg ...? |
|||
| option | 操作オプション。compare、length、match、range、trim等。 | |||
| ?arg arg ...? | 操作オプションごとの引数。 | |||
| 例) | >set wk1 "I
wish I were a bird." >set wk2 "i wish i were a bird." >string trim $wk1 I wish I were a bird. >string compare [string tolower $wk1] $wk2 0 >string match "I wish*" $wk1 1 |
左右から、I を取り除きます。 一番左に空白があることに注意! 小文字にして比較 同じ。 パターンマッチングも可。 結果は真。 |
||
| append | 変数に文字列を追加します。 append varName ?value..? |
|||
| varName | 変数名。あれば追加し、無ければ作成します。 | |||
| ?value..? | 追加する文字列。複数指定も可。 | |||
| 例) | >set wk can't read "wk": no such variable >append wk I wish I we >set wk IwishIwe >append wk "re a bird." >set wk IwishIwere a bird. |
変数 wk
を参照すると、 存在しない。 4つの文字列 I wish I wereを追加 再度 wk を参照すると、 作成されている。 さらに、文字列を追加して、 参照してみると、 文字列が追加されている。 |
||
| format | 文字列を書式に従って成形する。 format formatString ?arg arg ...? |
|||
| formatString | 書式。C言語の
sprintf 関数に準拠しています。ただし、 %p と %n 変換は未サポート。 %c 変換は 10進の文字列のみ。 l 修飾子は無視されます。 |
|||
| ?arg arg ...? | 書式に対応する文字列。 | |||
| 例) | >set wk1 100 >format {%s %10.2f%%} "Power" $wk Power 100.00% |
変数に文字列を設定する。 書式に従って成形。 結果の文字列。 |
||
| scan | 文字列から書式に従って文字列をパースする。format
の逆。 scan string format varName ?varName ...? |
|||
| string | 取り出し元の文字列。 | |||
| format | 書式。ただし、 %p と %n 変換は未サポート。 %c 変換は 1文字の文字コードが 10進文字列に変換後、varName へ代入 また、フィールド幅指定不可 l、 h、 L 修飾子は無視されます。 |
|||
| varName | パースした文字列を格納する変数名。 | |||
| 例) | >set wk "abc
100XYZ" >scan $wk {%3s%4d%s} str1 str2 str3 >puts "$str1;$str2;$str3" abc;100;XYZ |
元文字列を設定する。 取り出し。 それぞれ書き出してみる。 「 100」で無いことに注意! |
||
![]() |
![]() |
![]() |
![]() |