遠藤です。

必要に迫られて辞書順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)}