Skip to content

Instantly share code, notes, and snippets.

@danjohnson3141
Created September 23, 2014 23:34
Show Gist options
  • Save danjohnson3141/41afb16d239d0892a3cc to your computer and use it in GitHub Desktop.
Save danjohnson3141/41afb16d239d0892a3cc to your computer and use it in GitHub Desktop.
A CSV Parser (not fully baked yet)
module Parser
extend ActiveSupport::Concern
require 'csv'
def parse_csv(csv_file)
CSV::Converters[:blank_to_nil] = lambda do |field|
field && field.empty? ? nil : field
end
quote_chars = %w(" | ~ ^ & *)
begin
@report = CSV.read(csv_file, headers: :first_row, quote_char: quote_chars.shift)
rescue CSV::MalformedCSVError
quote_chars.empty? ? raise : retry
end
header = false
csv = CSV.foreach(csv_file, headers: true, header_converters: :symbol, converters: :all) do |row|
unless header
row.headers.each { |header| print header.to_s + "\t"}
row.headers.each { |header| print header.to_s + "\t"}
puts "\n------------------"
header = true
end
row.each do |k,v|
print v.to_s + "\t"
print "\t" if k == :item_price || k == :purchase_count
end
puts
end
end
end
# Parser.parse_csv("example_data.csv")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment