Email Receipts to QIF
      If you are like me, you love iTunes, and if you are very much like me, you use some sort of personal financial tool, to keep a handle on the ole' finances.  I got sick of importing the digital email info into my financial program, so I found a way to import an email receipt into my financial program.  I used the awk tool along with the amazingly expressive power of regular expressions to turn an mbox file (The file Thunderbird uses to save your email) into a QIF file that is ready for import.
Peep This!
    
function getField(src, headerRE, valueRE) 
{
 if ( match( src, headerRE valueRE)) {
  headerStart = RSTART
  valueEnd = RSTART + RLENGTH
  match( src, headerRE )
  headerEnd = RSTART + RLENGTH
  valueStart = headerEnd  
  valueLength = valueEnd - headerEnd
  return substr(src, valueStart, valueLength)
 }
 else 
 {
  return " false"
 }
}
BEGIN {
 RS = "From - "
 apple = 0
 movielink = 0
 now = systime()
 getline
 start = match(FILENAME, "\\\\[^\\\\/]*$")
 output = "EmailReceipts" substr(FILENAME, RSTART + 1, RLENGTH) ".qif"
 print("using " FILENAME " as input.")
 print("outputting to " output)
 print("!Type:CCard") > output
}
/Apple Receipt/ { 
 print "D" getField($0, "Receipt Date: ", "[\\/$.0-9A-Za-z]*") > output
 print "T-" substr(getField($0, "Order Total: ", "[\\/$.0-9A-Za-z]*"), 2, 100) > output
 print "PiTunes" > output
 print "LLeisure:Tapes & CDs" > output
 print "MOrder #: " getField($0, "Order Number: ", "[\\/0-9A-Za-z]*") > output
 print "^" > output
 apple++ 
}
/Subject: Movielink Order Confirmation/ { 
 print "D" getField($0, "Date : ", "[\\/$.0-9A-Za-z]*") > output
 print "T" substr(getField($0, "Transaction Total:[ \t]*", "[\\/$.0-9A-Za-z]*"), 2, 100) > output
 print "PMovieLink" > output
 print "LLeisure:Movies & Video Rentals" > output
 print "M" getField($0, "Movie Title Player Format Store Until Price\n", "[\\\\\\/0-9A-Za-z$.() ]*") > output
 print "^" > output
 movielink++ 
  }
 END {
 print apple " apple reciepts."
 print movielink " movielink reciepts."
 
} 
    
0 Comments:
Post a Comment
<< Home