山本幸一さま
いま先日ご教示いただいたプロシージャを参考にしながら、
以下のようなものを作ってみました。
目的は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あたりだろうと思い、
あれこれ調べてみたつもりなのですが、どうもうまくい
きません。
よろしくご教示いただければ、幸甚です。
みずは