Module: YouPlot::DSVReader
- Defined in:
- lib/youplot/dsv_reader.rb
Overview
Read and interpret Delimiter-separated values format file or stream.
Class Method Summary collapse
- .get_headers(arr, headers, transpose) ⇒ Object
- .get_series(arr, headers, transpose) ⇒ Object
- .input(input, delimiter, headers, transpose) ⇒ Object
- .parse_as_csv(input, delimiter) ⇒ Object
-
.transpose2(arr) ⇒ Object
Transpose different sized ruby arrays stackoverflow.com/q/26016632.
Class Method Details
.get_headers(arr, headers, transpose) ⇒ Object
49 50 51 52 53 54 55 56 57 |
# File 'lib/youplot/dsv_reader.rb', line 49 def get_headers(arr, headers, transpose) if headers if transpose arr.map(&:first) else arr[0] end end end |
.get_series(arr, headers, transpose) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/youplot/dsv_reader.rb', line 59 def get_series(arr, headers, transpose) if transpose if headers arr.map { |row| row[1..-1] } else arr end elsif headers transpose2(arr[1..-1]) else transpose2(arr) end end |
.input(input, delimiter, headers, transpose) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/youplot/dsv_reader.rb', line 10 def input(input, delimiter, headers, transpose) arr = parse_as_csv(input, delimiter) headers = get_headers(arr, headers, transpose) series = get_series(arr, headers, transpose) if headers.nil? Data.new(headers, series) else if headers.include?(nil) warn "\e[35mHeaders contains nil in it.\e[0m" elsif headers.include? '' warn "\e[35mHeaders contains \"\" in it.\e[0m" end h_size = headers.size s_size = series.size if h_size == s_size Data.new(headers, series) elsif h_size > s_size warn "\e[35mThe number of headers is greater than the number of series.\e[0m" exit 1 elsif h_size < s_size warn "\e[35mThe number of headers is less than the number of series.\e[0m" exit 1 end end end |
.parse_as_csv(input, delimiter) ⇒ Object
36 37 38 39 40 41 |
# File 'lib/youplot/dsv_reader.rb', line 36 def parse_as_csv(input, delimiter) CSV.parse(input, col_sep: delimiter) .delete_if do |i| i == [] or i.all? nil end end |
.transpose2(arr) ⇒ Object
Transpose different sized ruby arrays stackoverflow.com/q/26016632
45 46 47 |
# File 'lib/youplot/dsv_reader.rb', line 45 def transpose2(arr) Array.new(arr.map(&:length).max) { |i| arr.map { |e| e[i] } } end |