こんにちは、山本❤です。
"HFC01730@... (水羽信男)"さんは書きました:
> 以下のようなプロシージャを作ってみました。
> 添削していただければ、幸甚です。
> 4)プロシージャ
(中略)
> set num [llength $data2]
> for {set x 0} {$x<=$num} {incr x} {
> lappend data3 [lindex $data2 $x $column]
> }
(以下略)
> 6)上記のプロシージャでは、何か分かりませんが、僕にとって不要
> なデータも数えて教えくれますが、それはいまのところ差し障り
> がないのでそのまま出力しています。
リスト$data2の中を順番に処理していますが、要素数が$numですから、
lindexコマンドに渡す x の値は 0,1,2, … $num-1 でなければなりません。
つまり、
$x<=$num
は適切ではなく、
$x<$num
としないといけません。ちなみに、$x == $numの場合、
lindexコマンドは エラーにならないで空文字列("")を返します。
また、今回の場合でしたら、forコマンドの代わりに
foreachコマンドを使うとよいです。
ところで、私はlindexコマンドに2つ以上の要素番号を
指定できることを今回初めて知りました。ちょっと
調べてみましたが、過去のバージョン(Tcl/Tk8.3)では
lindex $data2 $x $column
という書き方はできず、オーソドックスに
lindex [lindex $data2 $x] $column
と書かなければなりません。
古くから存在しているコマンドも、バージョンを重ねる度に
どんどん機能強化されていっているんですね。
--
Koichi Yamamoto,
http://homepage3.nifty.com/yamakox/