#!/usr/bin/perl # # Convert CSV into QIF which is suitable for importing # into programs like Microsoft Money. Note that there # are many different forms of QIF (it's a pseudo-standard) # this program produces very simple QIF. # # Also truncate nasty reference numbers that my Internet # bank adds to each purchase via a debit card, so that # only one payee record is generated in MS Money for each # organisation repeatedly paid. (e.g. convert Tesco 436345345 # simply to Tesco). # # Input should look something like: # "cleared","20-07-1999","","PURCHASE TESCO STORE 2555 FULBOURN 19.07.99 ","-14.44", # "cleared","05-07-1999","","PURCHASE CAFFE UNO 830 CAMBRIDGE 03.07.99 ","-21.45", print "!Type:Bank\n"; while (<>) { m/[^,]*,"(..-..-....)","","([^"]*)","([^"]*)","","........","..."/; $date = $1; $desc = $2; $amnt = $3; $desc =~ s/PURCHASE\s*(.*)\s*\d\d\.\d\d\.\d\d/$1/; $desc =~ s/PURCHASE\s*(.*)\s*\d\d\.\d\d\.\d/$1/; $desc =~ s/PURCHASE\s*(.*)\s*\d\d\.\d\d\./$1/; $desc =~ s/PURCHASE\s*(.*)\s*\d\d\.\d\d/$1/; $desc =~ s/PURCHASE\s*(.*)\s*\d\d\.\d/$1/; $desc =~ s/PURCHASE\s*(.*)\s*\d\d\./$1/; $desc =~ s/PURCHASE\s*(.*)\s*\d\d/$1/; $desc =~ s/PURCHASE\s*(.*)\s*\d/$1/; $desc =~ s/PURCHASE\s*(.*)\s*/$1/; $desc =~ s/STANDING ORDER IN\s*(.*)/$1/; $desc =~ s/DIRECT DEBIT TO\s*(.*)/$1/; $desc =~ s/BILL PAYMENT DEBIT\s*(.*)/$1/; $desc =~ s/CITICARD WITHDRAWAL\s*(.*)/CITICARD WITHDRAWAL\nM$1/; $desc =~ s/PAYMENT TO\s*(.*)/PAYMENT TO $1/; $desc =~ s/LNK CASH W\/DRAWAL\s*(.*)/LNK CASH W\/DRAWAL/; print "D$date\nN\nP$desc\nT$amnt\nC*\n^\n"; }