Last Update: Wed May 25 09:13:34 -0500 2011

Change Log

Below is a complete listing of changes for each revision of FasterCSV.


  • Removed setup.rb due to licensing concerns.
  • Improved stray quoting error message (patch by Edvard Majakari).


  • Improved test coverage for the parser.
  • Improved documentation.
  • Fixed a bug that prevented ^ from being used as :quote_char.
  • Switched from abort() to throwing exceptions on Ruby 1.9.


  • A bug fix from Timothy Elliott to return the new parser to its strict quote tolerance.


  • A bug fix to allow IO Exceptions to reach the calling code from Moses Hohman.
  • Added support for :write_headers => false to Table.to_csv().


  • A bug fix for deleting blank Table rows from Andy Hartford.
  • Added gem build instructions.


  • The main parser has been rewritten by Timothy Elliott to avoid big input issues with Ruby 1.8‘s regex engine. This makes FasterCSV handle more inputs gracefully.
  • FasterCSV will now exit with a notice to upgrade if required in Ruby 1.9.
  • Included a missing file so the tests will run in source packages.


  • Added encoding support patch from Michael Reinsch.
  • Improved inspect() messages for better IRb support.
  • Fixed header writing bug reported by Dov Murik.
  • Use custom separators in parsing header Strings as suggested by Shmulik Regev.
  • Added a :write_headers option for outputting headers.
  • Handle open() calls in binary mode whenever we can to workaround a Windows issue where line-ending translation can cause an off-by-one error in seeking back to a non-zero starting position after auto-discovery for :row_sep as suggested by Robert Battle.
  • Improved the parser to fail faster when fed some forms of invalid CSV that can be detected without reading ahead.
  • Added a :field_size_limit option to control FasterCSV‘s lookahead and prevent the parser from biting off more data than it can chew.


  • Default to the system line ending when passed a GzipWriter object to wrap.


  • Worked around GzipReader‘s lack of a seek() method so we could still use automatic row separator detection with them.


  • Worked around an odd incompatibility with the Regexps used to remove line endings in some (seemingly rare) Ruby environments.
  • Made FasterCSV::lineno() writer aware.
  • Support Hashes in FasterCSV#<<(), by detecting headers when writing.
  • Added limited support for switching the quote character.
  • Refining Data and DateTime matching for built-in convertors.


  • Added the FasterCSV::table() shortcut.


  • Added a :force_quotes output option.


  • Added empty?(), length(), and size() methods to FasterCSV::Row and FasterCSV::Table.
  • Cleaned up bug fix regression tests.
  • Fixed bug causing Arrays to be returned for blank rows when header processing is active.
  • Added a :skip_blanks option for ignoring empty rows.


  • Fixed FasterCSV.rewind() to reset the FasterCSV.lineno() counter.
  • Fixed FasterCSV.rewind() to reset the header processing.
  • Fixed documentation typos.
  • Switched STDOUT and STDERR usage to $stdout and $stderr where appropriate.
  • Added FasterCSV::Row.==().
  • Enhanced FasterCSV::Row.fields() to support Ranges, even for headers.
  • The slurping methods now return the new FasterCSV::Table objects.
  • Fixed parser so multibyte :col_sep works now.
  • Added a few examples for usage.


  • Removed autorequire from GemSpec.
  • Made Rakefile VERSION aware.
  • General Rakefile cleanup.


  • Added VERSION constant.
  • Significantly improved test speed.
  • Worked around Date::parse() bug so tests will pass on Windows.
  • Documented test procedure.
  • Made FasterCSV.lineno() CSV aware.
  • Added line numbers to MalformedCSVError messages.
  • :headers can now be set to an Array of headers to use.
  • :headers can now be set to an external CSV String of headers to use.
  • Added an :unconverted_fields options, so those can be returned when needed.
  • Provided support for the serialization of custom Ruby objects using CSV.
  • Added CSV drop-in interface.
  • Added header information to FieldInfo Struct for conversions by header.
  • Added an alias to support require "fastercsv".
  • Added FCSV alias for FasterCSV.
  • Added FasterCSV::instance() and FasterCSV()/FCSV() shortcuts for easy output.


  • Fixing the require "English" bug.


  • Converted FasterCSV.filter() to use ARGF for input.
  • Made FasterCSV.<<() aware of FasterCSV::Row objects.
  • Switched header rows to include the unconverted headers as fields.
  • Rescued IOError when trying to auto detect a line-ending on an output stream and used the default system line-ending.
  • Added FasterCSV::Row.header_row?() and FasterCSV::Row.field_row?().


  • Began using a forked development/stable versioning system.
  • Reorganized initialization code for easier additions and maintenance.
  • Added a check for unknown options. Exceptions will now be thrown for them.
  • Added built-in and custom data converters. Built-in handle numbers and dates.
  • Added Array#to_csv and String#parse_csv. Both accept normal options.
  • Project moved to RubyForge Subversion.
  • Added auto-discovery for :row_sep (now the default).
  • Added FasterCSV::filter() for easy Unix-like CSV filters.
  • Added support for accessing fields by headers.
    • Headers can have their own converters.
    • Headers can be skipped or returned as needed.
    • FasterCSV::Row allows index or header access while retaining order and allowing for duplicate headers.


  • Fixed :col_sep escaping bug (reported by Kev Jackson).
  • Switched to the use of named parsers internally.


  • Fixed typo in gem spec causing a require bug.


  • Built gem with Ruby 1.8.2, to bypass YAML/RubyGems issue.


  • Built gem with Ruby 1.8.4 Preview 1, to try and bypass YAML/RubyGems issue.
  • Added missing test file to released packages.
  • Clarified call-seq documentation for open() and parse().
  • Clarified passed String positions for new(), in documentation.
  • Expanded generate() to handle appending to an existing String.


  • Initial public release.