山本です。
"HFC01730@... (水羽信男)"さんは書きました:
> 僕のデータファイルは、今はワードパッドで作成して、それを
> Unicodeを選択して、保存しています。
BOM付きlittle-endianのunicodeテキストですね。
> が、ご提供していただいスクリプトは、欄を0と1と指定した場
> 合何もせず、そのままデータをコンソールに吐き出します。
一つ目の問題については後ほど解説することにして、
> 欄の指定を3以上にすると、以下のようなエラーメッセージが
> 出てきます。
> ------------------------------
> element 3 missing from sublist "{ } {}"
> ------------------------------
データファイルの末端が次のようになっていませんか?
<改行>
<半角空白文字><改行>
<EOF>
前回送ったスクリプトの13行目を修正してみてください:
foreach i [split [string trim [regsub -all -- {\n[ \n]+} $data \0] \0] \0] {
> 今回、実験したサンプルデータは、次のようになります。
(省略)
「卞之下」「王芸生」「王迅中」をソートしようとして
並べ替えられなかったのは、ソート時の文字コードが
unicodeであることに原因があります。これらのお名前を
各種文字コード(16進数)で表現すると以下のようになります。
| unicode | cp932(sjis) | gb2312
---------+--------------+--------------+--------------
(a)卞之下|535e 4e4b 4e0b|99c4 9456 89ba|b1e5 d6ae cfc2
(b)王芸生|738b 82b8 751f|89a4 8c7c 90b6|cdf5 dcbf c9fa
(c)王迅中|738b 8fc5 4e2d|89a4 9076 9286|cdf5 d1b8 d6d0
それぞれを昇順で並べ替えると:
unicode : (a)→(b)→(c)
cp932 : (b)→(c)→(a)
gb2312 : (a)→(c)→(b)
ですから、「王」のように同じ名字でまとめるという目的であれば
unicodeでソートしてもよいと思いますが、cp932(シフトJIS)と同じ
結果を得る必要があるならば、cp932でソートしてやるように
スクリプトを作り替えてやらないといけません。
--
Koichi Yamamoto,
http://homepage3.nifty.com/yamakox/