argius note

プログラミング関連

固定長テキストを項目でソートする

http://d.hatena.ne.jp/argius/20060120/1137783185
RubyPerlにできることなら絶対できるはず。とりあえず練習に、先日書いたCVSの出力を編集するPerlスクリプトをRubyで書き直してみた。(shebangは省略)

# 固定長テキスト→配列
rows = []
while (line = gets) != nil
  rows.push(line.chomp!.unpack("A2 A23 A8 A5 A37 A38 A*"))
end

# ソート(破壊的)
rows.sort! { |a, b|
 (
 b[3].to_s <=> a[3].to_s or # revision (reverse)
 a[4].to_s <=> b[4].to_s or # path
 a[5].to_s <=> b[5].to_s    # file
  )  
}

# フォーマット出力
rows.each { |row|
  printf "%s %-4s %s/%s\n", row[1], row[3], row[5], row[4]
}

動作は問題ないようだが、いまひとつ書き方に自信がない。特に、ソート部分。