Skip to content

Instantly share code, notes, and snippets.

@takeyuweb
Last active September 14, 2015 01:38
Show Gist options
  • Select an option

  • Save takeyuweb/10ac820c935e92d44f81 to your computer and use it in GitHub Desktop.

Select an option

Save takeyuweb/10ac820c935e92d44f81 to your computer and use it in GitHub Desktop.
# pubtra2freee
# Pubtraで抽出・エクスポートした交通系SF利用明細CSVをfreeeで読み込みやすいように加工するスクリプトやっつけ版。
#
# License: Public Domain (Unlicense)
#
# 配置
# pubtra2freee.rb
# 2015/
# 01.csv ← pubtraで出力
# 02.csv ← pubtraで出力
# freee/
# 01_VIEWカード.csv
# 01_Suica.csv
# 2014/
#
# 使い方
# D:\OneDrive\ドキュメント\takeyu-web\Suica>ruby pubtra2freee.rb
# year:2015
# month:1
# ./2015/freee/01_VIEWカード.csv
# ./2015/freee/01_Suica.csv
#
# 実行後、SFごとに別々にCSVに出力されます。
# 配置
# pubtra2freee.rb
# 2015/
# 01.csv
# 02.csv
# freee/
# 01_VIEWカード.csv ← 処理済みファイル
# 01_Suica.csv ← 処理済みファイル
# 2014/
#
# freeeへの取り込み
# SFごとに口座を作成してCSVインポートします。
require 'csv'
print "year:"
year = gets.to_i
print "month:"
month = gets.to_i
src = File.join(File.dirname(__FILE__), sprintf("%04d", year), sprintf("%02d.csv", month))
raise "file:#{src} is not found." unless File.file?(src)
data = Hash.new do
Array.new
end
i = 0
text = File.open(src, 'r:Windows-31J').read
CSV.parse(text.encode('UTF-8')) do |row|
next if row[9].to_i == 0
money = row[9].to_i * -1
memo = nil
if row[5].empty?
memo = row[10]
else
if money > 0
memo = "入金"
else
memo = "入:#{row[5]}(#{row[4]}) 出:#{row[8]}(#{row[7]})"
end
end
data[row[12]] = data[row[12]].push([
row[0],
money,
memo
])
i = i.succ
end
dir = File.dirname(src)
data.each do |key, value|
dst = File.join(File.dirname(__FILE__), sprintf("%04d", year), "freee", sprintf("%02d_%s.csv", month, key))
dst_dir = File.dirname(dst)
Dir.mkdir dst_dir unless File.directory?(dst_dir)
CSV.open(dst, 'w+:Windows-31J') do |csv|
csv << %w(利用年月日 入出金額 摘要)
value.each do |row|
csv << row
end
end
puts dst
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment