Class: CAFrame::CSVParser::Tokenizer
- Inherits:
-
Object
- Object
- CAFrame::CSVParser::Tokenizer
- Defined in:
- lib/carray/frame/csv_parser.rb
Overview
Splits records into fields. Regexps are compiled once and reused across every record, so per-row cost stays low.
Instance Method Summary collapse
-
#initialize(sep, quote, strip) ⇒ Tokenizer
constructor
A new instance of Tokenizer.
-
#read(io) ⇒ Object
Fields of the next non-blank record, or nil at EOF.
Constructor Details
#initialize(sep, quote, strip) ⇒ Tokenizer
Returns a new instance of Tokenizer.
83 84 85 86 87 88 89 90 91 92 |
# File 'lib/carray/frame/csv_parser.rb', line 83 def initialize(sep, quote, strip) @sep = sep @quote = quote @strip = strip @sep_re = /#{Regexp.escape(sep)}/ @quote_re = /#{Regexp.escape(quote)}/ @unquoted = /[^#{Regexp.escape(sep)}]*/ @inner = /[^#{Regexp.escape(quote)}]*/ @recno = 0 end |
Instance Method Details
#read(io) ⇒ Object
Fields of the next non-blank record, or nil at EOF.
95 96 97 98 99 100 101 102 103 |
# File 'lib/carray/frame/csv_parser.rb', line 95 def read(io) loop do rec = CSVParser.read_record(io, @quote) return nil if rec.nil? @recno += 1 next if rec.empty? return rec.count(@quote).zero? ? simple(rec) : scan(rec) end end |