作者: Koichi Yamamoto
日時: 2004/2/29(18:58)
こんにちは、山本❤です。

"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/