作者: Koichi Yamamoto
日時: 2004/2/3(20:22)
こんにちは、山本です。

"HFC01730@... (水羽信男)"さんは書きました:
> この作成のきっかけは、以下の例のデータを最初にご教示い
> ただいプロシージャで処理すると、最初の行に?が追加され
> てコンソール画面に出力されたためです。

[TSfree:583]のsortfieldプロシージャのことですね。
あのスクリプトはBOMを処理していませんから、
基本的には↓のように修正してやればOKなのですが、

> proc sortfield2 {filename column encode} {
>    set fd [open $filename]
>    fconfigure $fd -encoding $encode
>     set data [read $fd 1]
>     if [string equal $data \ufeff] {
>         set data [read $fd]
>     } else {
>         append data [read $fd]
>     }
>     close $fd
>    set data2 [lsearch -all -regexp -inline \
>  [split [read $data] \n] .+]
>    puts [join [lsort -index $column $data2] \n]
> }

しかし、12行目は次のように修正してやらないといけません:
  (誤) [split [read $data] \n] .+]
  (正) [split $data \n] .+]

> 上記プロシージャを試行した結果、
> 【can not find channel named "……"】というエラー
> メッセージがでます。

4行目〜9行目でdata変数にファイルの内容を読み込んでいますので、
12行目のread $dataを実行しようとするとエラーになってしまいます。
readコマンドの引数にはopenコマンドの復帰値、つまり、
fd変数を渡してあげてください。
ちなみに「can not find channel」のchannelとは
openコマンドの復帰値を指しています。

--
Koichi Yamamoto, 
http://homepage3.nifty.com/yamakox/