こんにちは、山本です。
"HFC01730@... (水羽信男)"さんは書きました:
> ところで、sortfield.tclの結果は、コンソール画面に文字
> バケもせず、表示され、これは素直に感動しました。という
> のは、コマンドラインで日本語入力をしても、王贛愚の贛な
> どは?となってしまうからです。ただリダイレクトで、ソート
> 結果をファイルに保存ができないのが、残念です。
Windows2000のコマンドプロンプトでtclshを動かすと「?」文字が
表示されますから、wishかtkconを使っていらっしゃるようですね。
これらのコンソールはTkで実装されており、unicodeの文字を
正しく表示してくれます。
ソート結果をunicodeテキストファイルに出力するのであれば、
proc unicodeout {text filename} {
set fd [open $filename w]
fconfigure $fd -encoding unicode
puts $fd \ufeff$text ;# BOM(U+FEFF)付きでファイル出力
close $fd
}
みたいなプロシージャを作って、
unicodeout [sortfield hoge.txt 3] hogehoge.txt
としてやると便利です。
> % proc sortfield {filename column encoding} {;set fd
> [open $filename];fconfigure $fd -encoding $encoding;
> set data [lsearch -all -regexp -inline [split [read
> $fd] \n] .+];puts [join [lsort -index $column $data]
> \n];close $fd;}
> で、ファイルの区切りを半角の空白ではなく、たとえば/
> (スラッシュ)に変更することなどはできるのでしょうか。
文脈から察すると↓のように各要素の区切り文字として
スラッシュを使っている場合の質問だと思います。
例:15/李広田/りこうでん/Li Guangtian/1906/1968/北京大学/?/大陸/-/×/×/
この場合、splitコマンドを使って / で分割するようにします。
set data2 {}
foreach i $data { lappend data2 [split $i /] }
> ただこれらの疑問は、自分で少しずつ解決してゆくつもり
> です。具体的にまた質問させていただくかも知れませんが、
> 今回はまずは動作確認の報告とお礼まで。
おせっかいかと思いましたが、たくさんあるTclのコマンドを一度に
把握するのも大変ですから、ヒントになればと思い、上記スクリプトを
記載しておきました。
いままでのところ、
Tclだけでも十分対処できるような話でしたので全てTclで説明していますが、
もっと複雑な作業を行うときはTclだけでなくPerlなど他のスクリプト言語を
組み合わせるとよりよいだろうと思います。Tclで多言語処理を行っておき、
Perlやawkで複雑なテキスト処理を行うというのも便利だと思いますよ。
--
Koichi Yamamoto,
http://homepage3.nifty.com/yamakox/