その2から初登場になるTcl/Tkです。 joinの引数がPerlやPHPと逆なのと、array namesの配列変数名に$を付けないことぐらいが注意点でしょうか。
# ◆文字列から"b"の文字が最初に現れる位置(先頭が0)を得る
# string firstの引数の順番に注意。検索パターン文字列、検索対象文字列の順
set a "orange melon strawberry grape"
set n [string first "b" $a]
puts $n
# ◆その位置から5文字を切り出す
# string rangeは開始位置、終了位置で指定する
set b [string range $a $n [expr $n+5-1]]
puts $b
# ◆文字列の一部置き換え
puts [regsub mel $a lem]
# ◆数値と文字列をそれぞれ加算、文字列連結する
set v1 10.2
set v2 "15.3"
set v3 [expr $v1+$v2]
set v4 "$v1$v2"
set v5 [expr $v2+$v1]
set v6 "$v2$v1"
puts "$v3 $v4 $v5 $v6"
# ◆配列の3番目の要素から3個を取り出し、文字列に連結して出力する
set arr {"orange" "melon" "strawberry" "grape" "apple" "banana"}
set arrsub [lrange $arr 2 [expr 2+3-1]]
# joinの引数の順番に注意。区切り文字が後ろ
puts [join $arrsub " "]
# ◆要素の追加
lappend arr "peach"
# ◆要素の検索
puts "index of 'peach' is:[lsearch $arr "peach"]"
# ◆配列要素を変数に一括代入する
lassign $arrsub e1 e2 e3
puts "$e1 $e2 $e3"
array set harr {"orange" 80 melon 1200 "strawberry" 350}
# 要素名に二重引用符を付けてしまうとそれもキーの一部と扱われるので注意
# $harr(grape)と$harr("grape")は別の要素になってしまう
set harr(grape) 450
# ◆配列キーの存在有無をチェックする
puts [expr [info exists harr(melon)] ? "yes" : "no"]
puts [expr [info exists harr(lemon)] ? "yes" : "no"]
# ◆配列キー一覧をソートして、キーと値を出力する
# array namesの引数は配列の「名前」なので$は付けない
set keys [lsort -ascii [array names harr]]
foreach k $keys { set v $harr($k); puts "$k\t$v" }
# ◆既定値付き引数を持つ関数を定義する
proc get_file_names {dir {ext ""}} {
return [glob -nocomplain "${dir}/*${ext}"]
}
puts [join [get_file_names "."]]
puts [join [get_file_names "." "txt"]]
# ◆可変長引数を持つ関数を定義する
proc get_sum args {
set sum 0
foreach v $args { incr sum $v }
return $sum
}
puts [get_sum 10 11 12 13]
# end.