作者: 水羽信男
日時: 2004/2/3(12:50)
山本幸一さま

いま先日ご教示いただいたプロシージャを参考にしながら、
以下のようなものを作ってみました。
目的はunicodeで作成した1行データ(半角スペースを各要
素の区切り文字として使っている場合)を並びかえること
です。

この作成のきっかけは、以下の例のデータを最初にご教示い
ただいプロシージャで処理すると、最初の行に?が追加され
てコンソール画面に出力されたためです。

例:
1 王芸生 おううんせい 1901 1980 ? ? 大陸
2 王迅中 おうじんちゅう ? ? 清華大学 日本 大陸
3 王贛愚 おうかんぐ 1906 - 清華大学 米国 大陸
4 卞之下 べんしか 1910 - 北京大学 英国 大陸

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]
}

上記プロシージャを試行した結果、
【can not find channel named "……"】というエラー
メッセージがでます。
……は、例のデータが入っています。
set data2 [lsearch -all -regexp -inline [split\
 [read $data] \n] .+]
をコメントアウトすると、次のputsは所期の動作をして
いるようなので、問題はread $dataあたりだろうと思い、
あれこれ調べてみたつもりなのですが、どうもうまくい
きません。
よろしくご教示いただければ、幸甚です。

みずは