| 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
Returns reader instance.
# 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
# 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.
# 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
# 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
# File lib/csv.rb, line 565
565: def shift
566: row = []
567: parsed_cells = get_row(row)
568: row
569: end
# 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