Class: CSV::Reader

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/rubysl/csv/csv.rb

Overview

CSV formatted string/stream reader.

EXAMPLE

read CSV lines untill the first column is 'stop'.

CSV::Reader.parse(File.open('bigdata', 'rb')) do |row|
  p row
  break if !row[0].is_null && row[0].data == 'stop'
end

Direct Known Subclasses

IOReader, StringReader

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.create(str_or_readable, fs = ',', rs = nil) ⇒ Object

Returns reader instance.



542
543
544
545
546
547
548
549
550
551
# File 'lib/rubysl/csv/csv.rb', line 542

def Reader.create(str_or_readable, fs = ',', rs = nil)
  case str_or_readable
  when IO
    IOReader.new(str_or_readable, fs, rs)
  when String
    StringReader.new(str_or_readable, fs, rs)
  else
    IOReader.new(str_or_readable, fs, rs)
  end
end

.parse(str_or_readable, fs = ',', rs = nil, &block) ⇒ Object

Parse CSV data and get lines. Given block is called for each parsed row. Block value is always nil. Rows are not cached for performance reason.



528
529
530
531
532
533
534
535
536
537
538
539
# File 'lib/rubysl/csv/csv.rb', line 528

def Reader.parse(str_or_readable, fs = ',', rs = nil, &block)
  reader = Reader.create(str_or_readable, fs, rs)
  if block
    reader.each do |row|
      yield(row)
    end
    reader.close
    nil
  else
    reader
  end
end

Instance Method Details

#closeObject



571
572
573
# File 'lib/rubysl/csv/csv.rb', line 571

def close
  terminate
end

#eachObject



553
554
555
556
557
558
559
560
561
562
563
# File 'lib/rubysl/csv/csv.rb', line 553

def each
  while true
    row = []
    parsed_cells = get_row(row)
    if parsed_cells == 0
      break
    end
    yield(row)
  end
  nil
end

#shiftObject



565
566
567
568
569
# File 'lib/rubysl/csv/csv.rb', line 565

def shift
  row = []
  parsed_cells = get_row(row)
  row
end