Iif::Parser
The Iif::Parser gem will take Intuit QuickBooks files that are in IIF format and parse out the transactions (!TRNS
and !ENDTRNS
blocks) sections into plain Ruby objects.
For example, take this IIF formatted file ..
!TRNS TRNSID TRNSTYPE DATE ACCNT NAME CLASS AMOUNT DOCNUM MEMO
!SPL SPLID TRNSTYPE DATE ACCNT NAME CLASS AMOUNT DOCNUM MEMO
!ENDTRNS TEXT TEXT
TRNS GENERAL JOURNAL 10/24/14 Prepaid Exp Midwest:Kansas:Wichita 1000.75 Bank Drafts - 10/24/14 - Midwest:Kansas:Wichita
SPL GENERAL JOURNAL 10/24/14 ABC Bank Midwest:Kansas:Wichita -1000.75 Bank Drafts - 10/24/14 - Midwest:Kansas:Wichita
ENDTRNS END TEXT
.. and then pump it into a new instance of Iif::Parser
i = Iif::Parser.new(iif)
p i.transactions.size
# => 1
p i.transactions.first.entries.size
# => 2
.. and it will be converted into nice Ruby objects!
puts i.transactions.first.entries
#<Iif::Entry type="TRNS",
trnsid="",
trnstype="GENERAL JOURNAL",
date=#<Date: 2014-10-24 ((2456955j,0s,0n),+0s,2299161j)>,
accnt="Prepaid Exp",
name="",
class="Midwest:Kansas:Wichita",
amount=#<BigDecimal:7fccd1043b20,'0.100075E4',18(18)>,
docnum="",
memo="Bank Drafts - 10/24/14 - Midwest:Kansas:Wichita">
#<Iif::Entry type="SPL",
splid="",
trnstype="GENERAL JOURNAL",
date=#<Date: 2014-10-24 ((2456955j,0s,0n),+0s,2299161j)>,
accnt="ABC Bank",
name="",
class="Midwest:Kansas:Wichita",
amount=#<BigDecimal:7fccd0a09a48,'-0.100075E4',18(18)>,
docnum="",
memo="Bank Drafts - 10/24/14 - Midwest:Kansas:Wichita">
See the specs for more examples
Ruby support is >= 2.7
Installation
Add this line to your application's Gemfile:
gem 'iif-parser'
CSV parse line options
Non tab-delimited IIF files are parsed with CSV.parse_line
. You can set options for CSV.parse_line
like this:
iif_file = File.read(File.dirname(__FILE__) + "/../fixtures/liberal-parsing.iif")
iif_parser = Iif::Parser.new(iif_file, { csv_parse_line_options: { liberal_parsing: true } })
OR
options = { csv_parse_line_options: { converters: -> (f) { f ? f.strip : nil } } }
i = Iif::Parser.new(iif, options)
OR COMBINE OPTIONS
options = { csv_parse_line_options: { liberal_parsing: true, converters: -> (f) { f ? f.strip : nil } } }
i = Iif::Parser.new(iif, options)
And then execute:
$ bundle
Or install it yourself as:
$ gem install iif-parser
Contributing
- Fork it ( https://github.com/[my-github-username]/iif-parser/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request