argius note

プログラミング関連

固定長テキストを項目でソートする (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にはあります。