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