xsort.hmf の文字列長ソートNo.08035
shima さん 15/12/21 08:51
 
colderさん、
 08015でお世話になったshimaです。
 引き続き xsort.hmf を利用させていただいております。

 今回は「文字列長ソート」についてです。
 以下の「鴎」の文字はすべて(左側に小さな口が3つある、[U+9DD7]の文字)に置き
換えて読んでください。
 「森鴎外」を含むUTF-8のデータに文字列長ソートを実行してみて、「鴎」の字が
長さ1とみなされているらしいことに気づきました。
 以下のデータは、この点を確認するために作成したものです。

 このデータ(エンコードはUTF-8)を
    ソート(Unicode・降順)
などでソートして、いったん順序を乱した後、
    ソート(Unicode・昇順) → 文字列長ソート(降順)
を実行すると、以下のような並びになり、次のことがわかります。

   「鴎」は長さが1とみなされている。
   「鴎鴎」は2、「鴎外」や「鴎鴎鴎」は3、「森鴎外」は5、「森鴎外作」は
7。

 標準のエンコードの種類をShift-JISに設定しているので、このデータをコピーし、
新規作成ファイルに貼り付けるとShift-JISになります。
 このとき「鴎」だけは、ステータスバーの文字コードが U+9DD7 のように U+XXXX で
表示されます。
 このような文字が長さ1とみなされるのではないかと推測して、U+6890 / U+6891 /
U+6892 の3文字を試してみたところ、やはり長さが1とみなされていました。
 文字列長ソートを使う際の制限などはあるのでしょうか。

−−−−−テスト用データ、ここから(「鴎」は[U+9DD7]の文字に変換してください)
999999999
iiiiiiiii
88888888
hhhhhhhh
あいうえ
サシスセ
夏目漱石
池井戸潤
7777777
ggggggg
森鴎外作
666666
ffffff
あいう
サシス
池井戸
55555
eeeee
森鴎外
4444
dddd
あい
サシ
下町
秀丸
333
ccc
鴎外
鴎鴎鴎
22
bb




鴎鴎
1
a
z

−−−−−テスト用データ、ここまで

[ ]
RE:08035 xsort.hmf の文字列長ソートNo.08036
colder さん 15/12/21 13:30
 
> 「森鴎外」を含むUTF-8のデータに文字列長ソートを実行してみて、「鴎」の字が
>長さ1とみなされているらしいことに気づきました。

これは現状では仕様になります。
現在、全角半角の判定はShift-JISで行っているため、Shift-JISにない文字はShift-
JISに変換するときに'?'になってしまうため長さ1と判定されます。
このようにShift-JIS外の文字を含む場合、すべての全角/半角関係なく一文字と数え
るようにした方がいいかもしれません(パラメータの二番目を1にする)。

[ ]
RE:08036 xsort.hmf の文字列長ソートNo.08037
shima さん 15/12/22 00:10
 
>これは現状では仕様になります。
>現在、全角半角の判定はShift-JISで行っているため、Shift-JISにない文字はShift
>-JISに変換するときに'?'になってしまうため長さ1と判定されます。

 納得・了解しました。

>このようにShift-JIS外の文字を含む場合、すべての全角/半角関係なく一文字と数
>えるようにした方がいいかもしれません(パラメータの二番目を1にする)。

 文字列長ではなく文字数ソートですね。UTF-8の場合はこれを使うことにします。
 ありがとうございました。

[ ]