遠藤です。
必要に迫られて辞書順sortを作りました。記号、数字、英字、
漢字の順に並びます。Abc、aB、Baをちゃんと並べ換えるのに
苦労しました。
元のファイルは、単語が最初にあって、説明が続き、空行で
次の項目に移るようになっています。漢字の場合はまず読み
をひらがなで置いて、その後ろにブレースで本来の単語を
置いてありますが、今回はあまり関係ありません。
0...sizeというのを覚えたので、早速使ってあります。今まで
いつも0..(size-1)だったのですが。
readlines("\n\n")が効かないので、$/をセットしてあります。
すでにruby-devで解決されています。
Dict = %qA !"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~A
def kompare (a, b)
size = [a.size, b.size].min
alpha = 0
(0...size).each {|i|
unless ind_a = Dict.index(a[i])
ind_a = if a[i] <= 0x20 then -1 else a[i] end
end
unless ind_b = Dict.index(b[i])
ind_b = if b[i] <= 0x20 then -1 else b[i] end
end
next if ind_a == ind_b
if ind_a >= ?A && ind_a <= ?z && ind_b >= ?A && ind_b <= ?z
c = (ind_a | 0x20) - (ind_b | 0x20)
if alpha == 0 && c == 0
alpha = ind_a - ind_b
end
else
c = ind_a - ind_b
end
return c unless c == 0
}
if a.size == b.size && alpha != 0
alpha
else
a.size - b.size
end
end
$/ = "\n\n"
print readlines.sort{|a,b| kompare(a,b)}