ありがとさんです>kou
#!/usr/bin/env ruby $KCODE="EUC" def usage STDERR.print <<EOF usage: #{$0} [-m] [files...] m: monthly EOF exit 1 end Opt = { 'monthly' => false # 月毎に計算 } # Optはハッシュ while ARGV[0] =~ /^-/ $_ = ARGV.shift Opt['monthly'] = true if ~/m/ usage if ~/[^-m]/ end usage if ARGV.size < 1 # 費目 an item of expendidure lioe = ['外', '食', '交', '遊', '本', '音', '雑', '衣', '他'] # 配列 date ="" inside_flag = 0 entry = Hash.new while line = gets if /^((\d{4}-\d\d)-\d\d)/ =~ line then # 日付をキープ if Opt['monthly'] == true then date = $2 # = year-month else date = $1 date = date.tr("-",".") end elsif /買物ログ.*:/ =~ line then # (オリジナルcl2moneycsv.plと条件の違いあり)家計簿データ記述ブロックの始まり inside_flag = 1 elsif inside_flag == 1 if /^\s*$/ =~ line and inside_flag == 1 then inside_flag = 0 elsif (/^\t(.+?)(\s|\xa1\xa1).*(\s|\xa1\xa1)(\d+)$/) =~ line then entry[date] ||= Hash.new(0) entry[date][$1] += $4.to_i end end end print " " * 10, ", ", lioe.join(', '), "\n" entry.keys.sort.each do |date| print "#{date}," puts lioe.collect {|item| "%4d" % entry[date][item]}.join(",") end
あっしは lioe を任意にしたいので
#!/usr/bin/env ruby $KCODE="EUC" def usage STDERR.print <<EOF usage: #{$0} [-m] [files...] m: monthly EOF exit 1 end Opt = { 'monthly' => false # 月毎に計算 } # Optはハッシュ while ARGV[0] =~ /^-/ $_ = ARGV.shift Opt['monthly'] = true if ~/m/ usage if ~/[^-m]/ end usage if ARGV.size < 1 # 費目 an item of expendidure #lioe = ['外', '食', '交', '遊', '本', '音', '雑', '衣', '他'] # 配列 lioe = [] date ="" inside_flag = 0 entry = Hash.new while line = gets if /^((\d{4}-\d\d)-\d\d)/ =~ line then # 日付をキープ if Opt['monthly'] == true then date = $2 # = year-month else date = $1 date = date.tr("-",".") end elsif /買物ログ.*:/ =~ line then # 家計簿データ記述ブロックの始まり inside_flag = 1 elsif inside_flag == 1 if /^\s*$/ =~ line and inside_flag == 1 then inside_flag = 0 elsif (/^\t(.+?)(\s|\xa1\xa1).*(\s|\xa1\xa1)(\d+)$/) =~ line then yo = line.split(nil) kamoku = yo[0] naiyou = yo[1] kingaku = yo[2] sonota = yo[3] lioe.push(yo[0]) lioe.uniq! entry[date] ||= Hash.new(0) entry[date][$1] += $4.to_i end end end print " " * 10, ", ", lioe.join(', '), "\n" entry.keys.sort.each do |date| print "#{date}," puts lioe.collect {|item| "%4d" % entry[date][item]}.join(",") end