Class: Statsample::CSV

Inherits:
SpreadsheetBase show all
Defined in:
lib/statsample/converter/csv.rb

Constant Summary collapse

DEFAULT_OPTIONS =

Default options for processing CSV files. Accept the same options as Ruby’s ‘CSV#new`.

{
  converters: [:numeric]
}

Class Method Summary collapse

Methods inherited from SpreadsheetBase

convert_to_numeric_and_date, extract_fields, process_row

Class Method Details

.read(filename, empty = [''], ignore_lines = 0, opts = {}) ⇒ Object

Return a Dataset created from a csv file.

USE:

ds = Statsample::CSV.read('test_csv.csv')


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/statsample/converter/csv.rb', line 16

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)
      next
    end

    if first_row
      fields = extract_fields(row)
      ds = Statsample::Dataset.new(fields)
      first_row = false
    else
      rowa = process_row(row, empty)
      ds.add_case(rowa, false)
    end
  end

  convert_to_numeric_and_date(ds, fields)
  ds.update_valid_data
  ds
end

.write(dataset, filename, convert_comma = false, opts = {}) ⇒ Object

Save a Dataset on a csv file.

USE:

Statsample::CSV.write(ds, 'test_csv.csv')


51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/statsample/converter/csv.rb', line 51

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|
    row.collect! { |v| v.to_s.gsub('.', ',') } if convert_comma
    writer << row
  end

  writer.close
end