lib/statsample/converter/csv.rb in statsample-1.4.1 vs lib/statsample/converter/csv.rb in statsample-1.4.2
- old
+ new
@@ -1,78 +1,65 @@
+require 'csv'
+
module Statsample
class CSV < SpreadsheetBase
- if RUBY_VERSION<"1.9"
- require 'fastercsv'
- CSV_klass=::FasterCSV
- else
- require 'csv'
- CSV_klass=::CSV
- end
- class << self
+ # Default options for processing CSV files. Accept the same options as
+ # Ruby's `CSV#new`.
+ DEFAULT_OPTIONS = {
+ converters: [:numeric]
+ }
- def read19(filename,ignore_lines=0,csv_opts=Hash.new)
- #default first line is header
- csv_opts.merge!(:headers=>true, :header_converters => :symbol)
- csv = CSV_klass::Table.new(CSV_klass::read(filename,'r',csv_opts))
- csv_headers = if csv_opts[:headers]
- csv.headers
- else
- #as in R, if no header we name the headers as V1,V2,V3,V4,..
- 1.upto(csv.first.length).collect { |i| "V#{i}" }
- end
- #we invert row -> column. It means csv[0] is the first column and not row. Similar to R
- csv.by_col!
- thash = {}
- csv_headers.each_with_index do |header,idx|
- thash[header] = Statsample::Vector.new(csv[idx].drop(ignore_lines))
- end
- Statsample::Dataset.new(thash)
- end
- # Returns a Dataset based on a csv file
+ class << self
+ # Return a Dataset created from a csv file.
#
# USE:
- # ds=Statsample::CSV.read("test_csv.csv")
- def read(filename, empty=[''],ignore_lines=0,csv_opts=Hash.new)
- first_row=true
- fields=[]
- #fields_data={}
- ds=nil
- line_number=0
- csv=CSV_klass.open(filename,'rb', csv_opts)
+ # ds = Statsample::CSV.read('test_csv.csv')
+ def read(filename, empty = [''], ignore_lines = 0, opts = {})
+ first_row = true
+ fields = []
+ ds = nil
+ line_number = 0
+ options = DEFAULT_OPTIONS.merge(opts)
+
+ csv = ::CSV.open(filename, 'rb', options)
+
csv.each do |row|
- line_number+=1
- if(line_number<=ignore_lines)
- #puts "Skip line"
+ line_number += 1
+
+ if (line_number <= ignore_lines)
next
end
- row.collect!{|c| c.to_s }
+
if first_row
- fields=extract_fields(row)
- ds=Statsample::Dataset.new(fields)
- first_row=false
+ fields = extract_fields(row)
+ ds = Statsample::Dataset.new(fields)
+ first_row = false
else
- rowa=process_row(row,empty)
- ds.add_case(rowa,false)
+ rowa = process_row(row, empty)
+ ds.add_case(rowa, false)
end
end
- convert_to_scale_and_date(ds,fields)
+
+ convert_to_scale_and_date(ds, fields)
ds.update_valid_data
ds
end
- # Save a Dataset on a csv file
+
+ # Save a Dataset on a csv file.
#
# USE:
- # Statsample::CSV.write(ds,"test_csv.csv")
- def write(dataset,filename, convert_comma=false,*opts)
-
- writer=CSV_klass.open(filename,'w',*opts)
+ # Statsample::CSV.write(ds, 'test_csv.csv')
+ def write(dataset, filename, convert_comma = false, opts = {})
+ options = DEFAULT_OPTIONS.merge(opts)
+
+ writer = ::CSV.open(filename, 'w', options)
writer << dataset.fields
- dataset.each_array do|row|
- if(convert_comma)
- row.collect!{|v| v.to_s.gsub(".",",")}
- end
+
+ dataset.each_array do |row|
+ row.collect! { |v| v.to_s.gsub('.', ',') } if convert_comma
writer << row
end
+
writer.close
end
end
end
end