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 elsif elements[0] == "Datum" # skip else r = elements t = { :type => r[7].trim, :date => r[0].trim, :amount => r[6].gsub(',','.').to_f * (r[5] == "Af" ? -1 : 1), :from => r[3].trim, :to => r[2].trim, :name => r[1].trim.gsub('>',' '), :memo => r[8].trim, :display => "" } # Set correct display case( r[4]) #when "BA": #ATM #when "GT": #GIROTEL #when "IC": #INCASSO #when "DV": #DIVERSEN when "OV": #OVERSCHRIJVING 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 } } } } }