こんにちは、山本です。
"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/