Skip to content

minimul/iif-parser

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

  1. Fork it ( https://github.com/[my-github-username]/iif-parser/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

About

Will parse Intuit QuickBooks IIF files into plain Ruby objects.

Resources

License

Stars

Watchers

Forks

Packages

No packages published