parseQif takes a QIF file and generates a csv style file
#!/usr/bin/tclsh
# Jerry LeVan (http://homepage.mac.com/levanj/TclTk/)
# April 4 2004 new file
# On output use this seperator
set sep "|"
#
# The first letter of each line is a Key, we are interested in
# D (Date) T (Amount) N (TranID) P (Source) M (Memo) C (Status) L (Category)
#
set keys "DTNPMCL"
set keyList [split $keys ""]
#
# get the filename
#
if {$argc} {
set f [lindex $argv 0]
} else {
puts "useage: parseQif <filename>"
return 1
}
#
# open the file
#
set input [open $f "r"]
# get an output file by replacing .qif by .csv
if { ! [regsub -nocase {\.qif$} $f {.csv} outFile ] } {
set outFile [append f ".csv"]
}
set output [open $outFile "w"]
#
# read the file into a big string
#
set theFile [read $input]
close $input
regsub -all {\n\^\n} $theFile {^} chunks
set chunks [split $chunks "^"]
set chunks [lrange $chunks 1 end-1]
foreach item $chunks {
set itemList [split $item "\n"]
unset -nocomplain keyArray
foreach ch $keyList {
set keyArray($ch) ""
}
foreach detail $itemList {
set key [string index $detail 0]
set value [string range $detail 1 end]
set keyArray($key) $value
}
unset -nocomplain line
foreach ch $keyList {
append line $keyArray($ch) $sep
}
set line [string range $line 0 end-1]
puts $output $line
}
close $output