LoginSignup
2
0

More than 5 years have passed since last update.

jaccsの吐くcsvをマトモに吸い上げる

Posted at

数年前にKAMPO STYLE CLUBカードを作って以来、そこそこ使ってるんですが、csvの形式がヤバい。

何がヤバいって以下な感じ

  • 明細以外の余計な情報が大量に入ってる
  • 日付が "2017/1/8" みたいな形式なのでソートするとおかしくなる
  • SJIS
  • ダウンロードしたときのファイル名がcsvの中身の年月と関係ない(DLした日付?)
  • 明細部分に余計な情報が混じる(外貨のとき。)
    • 行を増やすなカラムにてくれ頼む

で、適当にマトモcsvにしてくれるRubyの書き捨てみたいなコードを書いたので載せとく。

jaccs.rb
# jaccsのどうかと思うcsvを吸い上げてマトモcsvに吐き出すruby

require 'csv'

first_nengappi = true
output = CSV.generate do |ocsv|
  Dir.glob('*.csv').each do |input_path|
    input = CSV.read(input_path, encoding: "CP932:UTF-8")
    in_meisai = false
    input.each do |irow|
      if first_nengappi && irow[0] == 'ご利用年月日'
        ocsv << ['ソート日'] + irow
        first_nengappi = false
      end
      if irow[1] == '<<今回のお支払明細>>'
        in_meisai = true
        next
      end
      if irow[1] == '<<次回以降のお支払明細>>'
        in_meisai = false
        next
      end
      next unless in_meisai
      # 以下、明細本体の場合の処理
      # 年月日がない場合も無視でいい
      next if irow[0].nil? || irow[0].length == 0

      # 出力用に吐き出し
      sort_date = Date.parse(irow[0])
      ocsv << [sort_date.strftime('%Y/%m/%d')] + irow
    end
  end
end

# 出力して終わりでいいよね?
puts output

csvをまとめたディレクトリで ruby jaccs.rb とでもすれば動く。少なくともMacでは動く。

*「え?今になって確定申告のことやってんの?」という煽りコメントはお控え下さい。つらい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0