に基づいて、TCLのテーブルを表現するための非常に便利な方法は、単純な配列によるものです。次に例を示します。
array set xy {}
foreach i {1 2 3} {
foreach j {10 20 30} {
set xy($i,$j) [expr $i + $j]
}
}
今xy
は、キーがテーブルのインデックスのように見えるの配列です。ここで:
% array names xy
3,10 2,20 1,30 3,20 2,30 3,30 1,10 2,10 1,20
以上クリア:
% foreach k [array names xy] {puts $k}
3,10
2,20
1,30
3,20
2,30
3,30
1,10
2,10
1,20
ここでは、それらにアクセスする方法を示します。
% puts $xy(3,10)
13
括弧内の3,10
は文字列です!配列は、上記のループで関連付けられた、その文字列に関連付けられた値を返します。 (したがって、コンマの後にスペースを入れてはいけません)。
インデックスが変数に与えられている場合には、値にアクセスするのは簡単です:
% set x 3
3
% set y 10
10
% puts $x,$y
3,10
最後のコマンドは、明示的な引用符と同等です:
% puts "$x,$y"
3,10
そしてここでは、我々は、アレイにアクセスする方法でありますそのキーの要素:
% puts $xy($x,$y)
13
キーが存在しない場合:
% puts $xy(4,10)
can't read "xy(4,10)": no such element in array
のは、配列のキーと値を印刷すると結論してみましょう:
% foreach k [array names xy] {puts "$k: $xy($k)"}
3,10: 13
2,20: 22
1,30: 31
3,20: 23
2,30: 32
3,30: 33
1,10: 11
2,10: 12
1,20: 21
ADDED
は今、あなたはx
を見つけるのですか、あなたはy
とz
値があると?
すべての特別な、強力なtclのプロパティが文字列で使用
set y 20
set z 23
:
set results [array get xy *,$y]
見てみましょう:
ここでは、キーパターン*,20
と一致するすべてのキーと値を見つけます
puts $results
% 2,20 22 3,20 23 1,20 21
3組のリストがあり、それぞれにキーと値が含まれています。
今度は、アウトバー$z
に対応するキー/値を抽出しましょう。
regexp "(\\d+),($y) ($z)" $results whole x1 y1 z1
そして今x1
、y1
、z1
は、私たちが望むすべての情報を保持:
puts "$x1 $y1 $z1"
% 3 20 23
こんにちはピーター、ありがとう。これは、データの正しいセットをピックアップするときに部分的に機能します。しかし、所望のデータの前後にゼロを付加する。最後のステップは0.9&1.1と平均の間のデータを取ることです。私はJoin&llenghtを使用して平均していますが、すべてのゼロが正しい平均を取得していません。 – Anju
@Anju:更新された回答。 –
Peterさん、ありがとうございました。私はメッセージを送信する前にそれを試しましたが、まだゼロを続けていますが、末尾のゼロは削除されています。今すぐただ空変数を防ぐ方法を理解する必要があります – Anju