No commit activity in last 3 years
No release in over 3 years
Turns csv files into hashes without reading the entire csv into memory
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

HasherizeCsv

Build Status

Dead simple CSV parsing, with configurable regex selectors if required. Reads line-by-line, so you can parse big CSV files without running out of memory. The first line is always assumed to be column headers, and thus keys in the corresponding hash.

Simple case

Given sample_csv.csv

Col1,Col2,Col3
Val1,Val2,Val3
Val4,Val5,Val6

and

require 'hasherize_csv'
@f = File.new("sample_csv.csv")
@csv = HasherizeCsv::Csv.new(@f)

@csv.each do |hash|
   puts hash.inspect
end

The output will be

{'Col1' => 'Val1', 'Col2' => 'Val2', 'Col3' => 'Val3'}
{'Col1' => 'Val4', 'Col2' => 'Val5', 'Col3' => 'Val6'}

Complex case: parse strange line endings and elegantly select quoted fields

Given complex_sample.csv

"Col1";"Col2";"Col3"\r
"Val1";"Val2";"Val3"\r
"Val4";"Val5

Oh my, newlines in the record!";"Val6"\r

and

require 'hasherize_csv'
@f = File.new("complex_sample.csv")

#HasherizeCsv yields the value of the first match group in the :value_pattern regex
@csv = HasherizeCsv::Csv.new(@f, :separator => "\r", :value_pattern => /\"(.*?)\"/m)

@csv.each do |hash|
   puts hash.inspect
end

The output will be

{'Col1' => 'Val1', 'Col2' => 'Val2', 'Col3' => 'Val3'}
{'Col1' => 'Val4', 'Col2' => 'Val5\n\nOh my, newlines in the record!', 'Col3' => 'Val6'}