stk_sort_by_line.rb: 0.1.0

#!/bin/ruby

# No warranty.
# Be careful to use.

# Filename : stk_sort_by_line.rb
# Author   : sak (http://sak.que.jp)
# Revision : 0.1.0
# Date     : Sat Apr 17 06:50:01 JST 2004
# Require  : Ruby

# Example of usage:
# ruby stk_sort_by_line.rb < infile.stk > outfile.stk
# ruby stk_sort_by_line.rb [-t|-timestamp|-number] [-n] [-r|-reverse]

card = []
line = []
init = true
stat = nil
while STDIN.gets do
        if $_ =~ /^@$/
                stat = true
        elsif $_ =~ /^\d{4}\/\d{2}\/\d{2}\(\d{2}:\d{2}:\d{2}\)$/ && stat
                if !init
                        card << line
                else
                        init = nil
                end
                line = []
                line << '@' << $_.chomp
                stat = nil
        elsif $_ !~ /^\d{4}\/\d{2}\/\d{2}\(\d{2}:\d{2}:\d{2}\)$/ && stat
                line << '@' << $_.chomp
                stat = nil
        elsif !stat
                line << $_.chomp
        end
end
card << line

rvrs = nil
keyf = 1
as_n = nil
ARGV.each do |l|
        case (l.downcase rescue false)
        when /^(-r|-reverse)$/; rvrs = true
        when /^(-t|-timestamp)$/; keyf = 1
        when /^-n$/; as_n = true
        end
        keyf = $1.to_i + 2 if l =~ /^-(\d+)$/
end

if as_n
        card.sort! do |a,b|
                a[keyf].gsub(/\D/,'').to_i <=> b[keyf].gsub(/\D/,'').to_i
        end
else; card.sort!{|a,b| a[keyf] <=> b[keyf]}
end

card.reverse! if rvrs
puts card

2004/04/17(06:50:15)