固定長テキストを項目でソートする (2)
http://d.hatena.ne.jp/argius/20060302/1141309017
前回、どこかRubyらしくないよなー、と思っていたが、なるほど、ブロックの書き方でした。記号を排して書きたいのだから、ブロックはdo-endで書いたほうが良いね。
# 固定長テキスト→配列
rows = []
while (line = gets) != nil
rows.push(line.chomp!.unpack("A2 A23 A8 A5 A37 A38 A*"))
end
# ソート(破壊的)
rows.sort! do |a, b|
b[3].to_s <=> a[3].to_s or
a[4].to_s <=> b[4].to_s or
a[5].to_s <=> b[5].to_s
end
# フォーマット出力
rows.each do |row|
printf "%s %-4s %s/%s\n", row[1], row[3], row[5], row[4]
end
中カッコがひとつもない暮らし、Rubyにはあります。