lib/rio/ext/csv.rb in rio-0.3.4 vs lib/rio/ext/csv.rb in rio-0.3.6

- old
+ new

@@ -53,15 +53,20 @@ cx['csv_rs'] = rs cxx_('csv',true) end protected :csv_ def columns(*ranges,&block) - @cnames = nil - cx['col_args'] = ranges.flatten - cxx('columns',true,&block) + if skipping? + cx['skipping'] = false + skipcolumns(*args,&block) + else + @cnames = nil + cx['col_args'] = ranges.flatten + cxx('columns',true,&block) + end end - def nocolumns(*ranges,&block) + def skipcolumns(*ranges,&block) @cnames = nil cx['nocol_args'] = ranges.flatten cxx('columns',true,&block) end def columns?() @@ -97,12 +102,14 @@ def to_rec_(raw_rec) #_init_cols_from_line(raw_rec) if @recno == 0 #p "#{callstr('to_rec_',raw_rec,@recno)} ; itertype=#{cx['stream_itertype']}" case cx['stream_itertype'] when 'lines' - raw_rec.extend(RIO::Ext::CSV::Str) - raw_rec.csv_s_to_rec = _s_to_rec_proc(cx['csv_fs'],cx['csv_rs']) + unless copying_from? + raw_rec.extend(RIO::Ext::CSV::Str) + raw_rec.csv_s_to_rec = _s_to_rec_proc(cx['csv_fs'],cx['csv_rs']) + end raw_rec when 'records' _l2record(raw_rec,cx['csv_fs'],cx['csv_rs']) when 'rows' _l2row(raw_rec,cx['csv_fs'],cx['csv_rs']) @@ -151,11 +158,13 @@ ::CSV.parse_line(line,fs,rs) end def _l2record(line,fs,rs) #p callstr('_l2record',line,fs,rs,cols) fields = trim(::CSV.parse_line(line,fs,rs)) - fields.extend(RIO::Ext::CSV::Ary) - fields.csv_rec_to_s = _rec_to_s_proc(fs,rs) + unless copying_from? + fields.extend(RIO::Ext::CSV::Ary) + fields.csv_rec_to_s = _rec_to_s_proc(fs,rs) + end fields end def cnames(num) @cnames ||= trim((0...num).map { |n| "Col#{n}" }) end