し
指定したディレクトリ内のすべてのサブディレクトリのパスを得る
真と偽
実数
ジョイントに設定されたキーポイントの数を得る
指定したディレクトリ内のすべてのサブディレクトリのパスを得る
[していしたでぃれくとりないのすべてのさぶでぃれくとりのぱすをえる]
フォルダの中にサブフォルダがあって、その中のどこかにあるファイルを
探したいというような場合に使えるかもしれません。
proc
inspect_directry {path} {
global
path_
list
proc
subfolders {path} {
global
path_
list
if {[
file
exists $path] == 1 && [
file
owned $path] == 1} {
if [
catch
{
cd
$path
} er_msg] {
show_
message
_box $er_msg
}
} else {
show_
message
_box "$pathが存在しません。" cancel 0
return
}
set
file
_
list
[glob -nocomplain *]
set
subfolder_
list
{}
foreach
file
_name $
file
_
list
{
if {[
file
isdirectory $
file
_name]} {
lappend
subfolder_
list
[
file
join $path $
file
_name]
}
}
foreach
subfolder $subfolder_
list
{
lappend
path_
list
$subfolder
#
message
$subfolder
subfolders [
file
join [
pwd
] $subfolder]; #再帰的に呼び出し
}
}
set
current_path [
pwd
]
set
path_
list
{}
subfolders $path
cd
$current_path
return
$path_
list
}
# 以下は呼び出しの例 現在のディレクトリ内のサブフォルダを調べる場合
inspect_directry [
pwd
]
2003.6.12(木) 18:42:14[
編集
]
真と偽
[しんとぎ]
if 文や
while
文では、条件式が真か偽かによって、処理を分岐します。また、実行されたときに真や偽の値を返すコマンドもあります。Tcl の場合、真は 1、偽は 0 となります。普通、正しければ真、正しくなければ偽と考えていいと思います。条件式は
3 > 1 は真、つまり 1
20 < -5 は偽、つまり 0
(20 < -5) == 0 は、括弧の中が 0 なので、左右が等しく、真、つまり 1
のように評価されます。
expr
3 > 1
のような文を実行してみると確認できると思います。if {3 > 1} のように、条件式として使われる場合は、
expr
を使ったときと同じように真偽が評価されるようです。
真か偽の値を返すときは、 1 か 0 ですが、条件式に入れる真の値は、1以外でもいいようです。
set
ex 2
if {$ex} {
message
"$exは真"
}
というスクリプトで、ex をいろいろ変えてやってみると、
200 -10 0.5 03 などは真。0 0.0 などは偽ということになるようです。要は、0 以外の数値はすべて真ということだと思います。
また、abc テスト などの文字列にすると、エラーになります。
2003.6.11(水) 16:39:11[
編集
]
実数
[じっすう]
.(小数点)のついた数値です。
整数
より広い範囲の値を扱えます。
整数
を
実数
にするには、
set
inte 10
set
rea [
expr
1. * $inte]
のように、
実数
との計算をおこなうか、
set
inte 10
set
rea [
expr
double
($inte)]
のように、
double
を使います。
実数
で扱える範囲は12桁までで、それを超えると
1e+012
のように、べき乗表示になります。
2003.7.2(水) 21:48:19[
編集
]
ジョイントに設定されたキーポイントの数を得る
[じょいんとにせっていされたきーぽいんとのかずをえる]
ジョイントに設定されたキーポイントの数を得る
プロパティがないようなので、書いてみました。
選択しているのがジョイントでない場合は -1 を返します。
proc
number_of_key_points {} {
global
object_type part_type key_point_number
if {!($object_type == 2 && ($part_type != 0 && $part_type != 1))} {
return
-1; #ジョイントでない場合は-1を返す
}
if [
catch
{; #念のため
set
ckn $key_point_number
}] {
return
-1; #ジョイントでない場合は-1を返す
}
set
KPN -1
set
i -1
while
{$KPN == $i} {
incr
KPN
set
key_point_number $KPN
set
i $key_point_number
}
set
key_point_number $ckn
return
$KPN
}
# 呼び出し例
number_of_key_points
2003.6.12(木) 19:26:55[
編集
]
Sakura Dictionary Ver. 1.09a
Scripted by
UTANO Lime
(c)
Pastel Carrot
1999-
All rights Reserved.