読者です 読者をやめる 読者になる 読者になる

みかづきの色々

デバイス(スマホからキャンプ用品まで)とかプログラミングとか中心のいろいろ試験的なブログ。

想定外の出費にRuby

ん?今月なんか引き落とし額がデカいぞ。
そんなわけで、カードの引き落とし額を調べてみた。

うちのメインカードはOricoなんで、引き落とし明細のCSVをサイトからもらってきて。
んで、以下を走らせてみる。

#!/usr/bin/ruby -EUTF-8
# -*- mode:ruby; coding:utf-8 -*-

require 'nkf'
require 'csv'

class OricoCsv
  class Record
    def initialize(s)
      @date = @name = @owner = @spend = nil
      if s.length > 10
        @date = s[0].clone if s[0] != nil
        @name = s[1].clone if s[1] != nil
        @owner = s[3].clone if s[3] != nil
        @spend = s[12].clone if s[12] != nil
      end
    end
    def Date
      @date
    end
    def Name
      @name
    end
    def Spend
      @spend
    end
    def JSpend
      @spend.gsub /^\?(.+)$/,"\\1円"
    end
    def SpendE
      self.JSpend.gsub(/,/,"").to_i
    end
    def Owner
      @owner
    end
  end
  #
  #
  #
  def initialize(fn)
    @ds = loadfile(fn)
    @s = []
    if @ds.length > 0
      @ds.each{|s|
        @s[@s.length] = Record.new(s)
      }
    end
    @s.compact!
  end
  def Datas
    @ds
  end
  def Das
    @s
  end
  #
  def loadfile(fn)
    r = []
    if File.exist?(fn) == true
      d = ""
      open("|nkf -w \"#{fn}\"","r").each{|x|d += x.clone}
      r = CSV.parse(d)
    end
    r
  end
end

###########

h = Hash.new
ARGV.each{|fn|
  c = OricoCsv.new(fn)
  c.Das.each{|x|
    if x.Spend != nil && x.Owner != "ご利用者"
      if h["#{x.Name}"] == nil
        h["#{x.Name}"] = x.SpendE
      else
        h["#{x.Name}"] += x.SpendE
      end
    end
  }
  h.each{|a,b|
    puts "%-30s %-10d\n" % [ a,b ]
  }
}

細部が間に合わせなのは仕様だ。

で、走らせてみると、こんなんになった。

$ ruby searchOrico.rb orico.csv
ISP                         5542
IIJMIO                 3071
:
:
AMAZON.CO.JP                   28387
ニコニコプレミアム                      540
Edyチャージ                        22000
:
:
デル                             17655
AMAZON DOWNLOADS               2700
:
:

ああ、Dellとアマゾンで5万近くか。これが原因ですな。
Dellは来月も18000円くらいになると思うから、出費削減ですねえ。

むー、未確定ぶんも結構あるわ。これは来月も大差ないか。
節約せねば。