require 'rubygems' require 'extensions/string' # sudo gem install extensions require 'builder' # sudo gem install builder require 'csv' require 'pp' transactions = [] input = File.open(ARGV[0]) input.each { |line| elements = CSV::parse_line(line, ',') if elements.size == 0 print "Error on row: " + line raise "Fix the row please..." elsif elements[0].nil? # skip else r = elements t = { :type => r[8], :date => r[7], :amount => r[4].to_f * (r[3] == "D" ? -1 : 1), :from => r[0], :to => r[5], :name => r[6].nil? ? "" : r[6].trim.gsub('>',' '), :memo => [r[10],r[11],r[12],r[13],r[14],r[15]].uniq.join(" ").trim, :display => "" } # Set correct display case( r[4]) when "BY": #BIJSCHRIJVING t[:display] = "Overschrijving van #{t[:from]} naar #{t[:to]}: " + t[:memo] else t[:display] = "#{ (t[:memo] == "" ? t[:name] : t[:name] + " | " + t[:memo] ) } - #{t[:type]}" end transactions << t end } x = Builder::XmlMarkup.new(:target => $stdout, :indent => 2) x.OFX { x.BANKMSGSRSV1 { x.STMTTRNRS { x.STMTRS { x.CURDEF "EUR" x.BANKTRANLIST { transactions.each do |transaction| x.STMTTRN { x.NAME transaction[:display] x.DTPOSTED transaction[:date] x.TRNAMT transaction[:amount] x.BANKACCTTO transaction[:to] x.MEMO transaction[:memo] } end } } } } }