Class CSV::Reader
In: lib/csv.rb
Parent: Object

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

Methods

close   create   each   get_row   new   parse   shift   terminate  

Included Modules

Enumerable

Public Class methods

Returns reader instance.

[Source]

     # File lib/csv.rb, line 542
542:     def Reader.create(str_or_readable, fs = ',', rs = nil)
543:       case str_or_readable
544:       when IO
545:         IOReader.new(str_or_readable, fs, rs)
546:       when String
547:         StringReader.new(str_or_readable, fs, rs)
548:       else
549:         IOReader.new(str_or_readable, fs, rs)
550:       end
551:     end

[Source]

     # File lib/csv.rb, line 577
577:     def initialize(dev)
578:       raise RuntimeError.new('Do not instanciate this class directly.')
579:     end

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.

[Source]

     # File lib/csv.rb, line 528
528:     def Reader.parse(str_or_readable, fs = ',', rs = nil, &block)
529:       reader = Reader.create(str_or_readable, fs, rs)
530:       if block
531:         reader.each do |row|
532:           yield(row)
533:         end
534:         reader.close
535:         nil
536:       else
537:         reader
538:       end
539:     end

Public Instance methods

[Source]

     # File lib/csv.rb, line 571
571:     def close
572:       terminate
573:     end

[Source]

     # File lib/csv.rb, line 553
553:     def each
554:       while true
555:         row = []
556:         parsed_cells = get_row(row)
557:         if parsed_cells == 0
558:           break
559:         end
560:         yield(row)
561:       end
562:       nil
563:     end

[Source]

     # File lib/csv.rb, line 565
565:     def shift
566:       row = []
567:       parsed_cells = get_row(row)
568:       row
569:     end

Private Instance methods

[Source]

     # File lib/csv.rb, line 581
581:     def get_row(row)
582:       raise NotImplementedError.new('Method get_row must be defined in a derived class.')
583:     end

[Source]

     # File lib/csv.rb, line 585
585:     def terminate
586:       # Define if needed.
587:     end

[Validate]