Class: Sycsvpro::Counter
- Inherits:
-
Object
- Object
- Sycsvpro::Counter
- Includes:
- Dsl
- Defined in:
- lib/sycsvpro/counter.rb
Overview
Creates a new counter that counts values and uses the values as column names and uses the count as the column value
Instance Attribute Summary collapse
-
#col_filter ⇒ Object
readonly
filter that is used for columns.
-
#heading ⇒ Object
readonly
header of the out file.
-
#infile ⇒ Object
readonly
infile contains the data that is operated on.
-
#key_column ⇒ Object
readonly
values are assigned to the key column.
-
#key_values ⇒ Object
readonly
values that are assigned to the key column.
-
#outfile ⇒ Object
readonly
outfile is the file where the result is written to.
-
#row_filter ⇒ Object
readonly
filter that is used for rows.
Instance Method Summary collapse
-
#execute ⇒ Object
Executes the counter.
-
#initialize(options = {}) ⇒ Counter
constructor
Creates a new counter.
-
#process_file ⇒ Object
Processes the counting on the in file.
-
#write_result ⇒ Object
Writes the results.
Methods included from Dsl
Constructor Details
#initialize(options = {}) ⇒ Counter
Creates a new counter
30 31 32 33 34 35 36 37 38 |
# File 'lib/sycsvpro/counter.rb', line 30 def initialize(={}) @infile = [:infile] @outfile = [:outfile] @key_column = [:key].to_i @row_filter = RowFilter.new([:rows]) @col_filter = ColumnFilter.new([:cols], df: [:df]) @key_values = {} @heading = [] end |
Instance Attribute Details
#col_filter ⇒ Object (readonly)
filter that is used for columns
23 24 25 |
# File 'lib/sycsvpro/counter.rb', line 23 def col_filter @col_filter end |
#heading ⇒ Object (readonly)
header of the out file
27 28 29 |
# File 'lib/sycsvpro/counter.rb', line 27 def heading @heading end |
#infile ⇒ Object (readonly)
infile contains the data that is operated on
15 16 17 |
# File 'lib/sycsvpro/counter.rb', line 15 def infile @infile end |
#key_column ⇒ Object (readonly)
values are assigned to the key column
19 20 21 |
# File 'lib/sycsvpro/counter.rb', line 19 def key_column @key_column end |
#key_values ⇒ Object (readonly)
values that are assigned to the key column
25 26 27 |
# File 'lib/sycsvpro/counter.rb', line 25 def key_values @key_values end |
#outfile ⇒ Object (readonly)
outfile is the file where the result is written to
17 18 19 |
# File 'lib/sycsvpro/counter.rb', line 17 def outfile @outfile end |
#row_filter ⇒ Object (readonly)
filter that is used for rows
21 22 23 |
# File 'lib/sycsvpro/counter.rb', line 21 def row_filter @row_filter end |
Instance Method Details
#execute ⇒ Object
Executes the counter
41 42 43 44 |
# File 'lib/sycsvpro/counter.rb', line 41 def execute process_file write_result end |
#process_file ⇒ Object
Processes the counting on the in file
47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/sycsvpro/counter.rb', line 47 def process_file File.new(infile).each_with_index do |line, index| result = col_filter.process(row_filter.process(line.chomp, row: index)) unless result.nil? or result.empty? key = unstring(line).split(';')[key_column] key_value = key_values[key] || key_values[key] = { name: key, elements: Hash.new(0) } result.chomp.split(';').each do |column| heading << column if heading.index(column).nil? key_value[:elements][column] += 1 end end end end |
#write_result ⇒ Object
Writes the results
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/sycsvpro/counter.rb', line 62 def write_result File.open(outfile, 'w') do |out| out.puts (["key"] + heading.sort).join(';') key_values.each do |k,v| line = [k] heading.sort.each do |h| line << v[:elements][h] end out.puts line.join(';') end end end |