sycsvpro 0.0.9 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7f23ab9c0550c24e05e22e549f754313a15031af
4
- data.tar.gz: c24f0803122979415fdbe3091e20bd4dfe2ba8cd
3
+ metadata.gz: 5b836321e6ea07a6f95c86d5a0f90b516851a15a
4
+ data.tar.gz: 79a6f3c56e4aeb83fc5f2a9fa25c7294e96a0086
5
5
  SHA512:
6
- metadata.gz: 64f319161f670be8300684a313a4d91db1a2fd2e60d63249ab1d7d4557b68d028f48aaa657b02c5b687656bc4efad2317aae7b0e9c6551d416e2c0fb02737af8
7
- data.tar.gz: 93c49e997231599193d4545e5a1fdc913e3768232df09c02439d2d3ea3c2a37424cafe9eface9c0aa1695686849de077aec0aa68acbc8f53fc287504117626e8
6
+ metadata.gz: 67be18777e87d10a65595f84feaebc1d06697b9350def8646e6638fa98da5915b24a9477ad61b4f7cd5dda1291fadaa8d0c3bc7c02a2b9d988a17c6ca7aee5dc
7
+ data.tar.gz: bf2ab9a8700ef5c019883f6dff2975a4042bad88cd8a928bcb74cf8516c06be07977f44137845b4787bc29a16ad88c4477ca3b047e13c3f7e6b60538ec591748
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sycsvpro (0.0.9)
4
+ sycsvpro (0.1.0)
5
5
  gli (= 2.9.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -9,8 +9,9 @@ Processing of csv files. *sycsvpro* offers following functions
9
9
  * map column values to new values
10
10
  * allocate column values to a key column (since version 0.0.4)
11
11
  * count values in columns and use the value as column name
12
+ * aggregate row values and add the sum to the end of the row
12
13
  * arithmetic operations on values of columns
13
- * sort rows base on columns (since version 0.0.9)
14
+ * sort rows based on columns (since version 0.0.9)
14
15
  * insert rows to a csv-file (since version 0.0.8)
15
16
  * create or edit a Ruby script
16
17
  * list scripts available optionally with methods (since version 0.0.7)
@@ -110,7 +111,7 @@ Count
110
111
  -----
111
112
  Count all customers (key column) in rows 2 to 20 that have machines that start with *h* and have a contract valid beginning after 1.1.2000. Add a sum row with title Total at column 1
112
113
 
113
- $ sycsvpro -f in.csv -o out.csv count -r 2-20 -k 0 -c 1:/^h/,5:">1.1.2000" --df "%d.%m.%Y" -s "Total:1"
114
+ $ sycsvpro -f in.csv -o out.csv count -r 2-20 -k 0:customer -c 1:/^h/,5:">1.1.2000" --df "%d.%m.%Y" -s "Total:1"
114
115
 
115
116
  The result in file out.csv is
116
117
 
@@ -121,19 +122,39 @@ The result in file out.csv is
121
122
  indix;1;0
122
123
  chiro;2;0
123
124
 
125
+ It is possible to use multiple key columns `-k 0:customer,1:machines`
126
+
127
+ Aggregate
128
+ ---------
129
+ Aggregate row values and add the sum to the end of the row. In the example we aggregate the customer names.
130
+
131
+ $ sycsvpro -f in.csv -o out.csv aggregate -c 0 -s Total:1,Sum
132
+
133
+ The aggregation result in out.csv is
134
+
135
+ $ cat out.csv
136
+ customer;Sum
137
+ Total;5
138
+ hello;2
139
+ indix;1
140
+ chiro;2
141
+
124
142
  Calc
125
143
  ----
126
- Process arithmetic operations on the contract count and create a target column
144
+ Process arithmetic operations on the contract count and create a target column and a sum which is added at the end of the result file
127
145
 
128
146
  $ sycsvpro -f in.csv -o out.csv calc -r 2-20 -h *,target -c 6:*2,7:target=c6*10
129
147
 
130
148
  $ cat out.csv
131
149
  customer;machine;control;drive;motor;date;contract;target
132
- hello;h1;con123;dri120;mot100;1.01.3013;1
133
- hello;h2;con123;dri130;mot110;1.02.3012;1
134
- indix;i1;con456;dri130;mot090;5.11.3013;1
135
- chiro;c1;con333;dri110;mot100;1.10.3011;1
136
- chiro;c2;con331;dri100;mot130;3.05.3010;1
150
+ hello;h1;con123;dri120;mot100;1.01.3013;2;20
151
+ hello;h2;con123;dri130;mot110;1.02.3012;2;20
152
+ indix;i1;con456;dri130;mot090;5.11.3013;2;20
153
+ chiro;c1;con333;dri110;mot100;1.10.3011;2;20
154
+ chiro;c2;con331;dri100;mot130;3.05.3010;2;20
155
+ 0;0;0;0;0;0;10;100
156
+
157
+ In the sum row non-numbers in the colums are converted to 0. Therefore column 0 is summed up to 0 as all strings are converted to 0.
137
158
 
138
159
  Sort
139
160
  ----
data/bin/sycsvpro CHANGED
@@ -58,8 +58,8 @@ end
58
58
  desc 'Extract specified rows and columns from the file'
59
59
  command :extract do |c|
60
60
  c.desc 'Rows to extract'
61
- c.arg_name '1,2,10-30|REGEXP'
62
- c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
61
+ c.arg_name '1,2,10-30,45-EOF,REGEXP'
62
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
63
63
 
64
64
  c.desc 'Columns to extract'
65
65
  c.arg_name '1,2,10-30'
@@ -78,11 +78,11 @@ desc 'Collect values of specified rows and columns from the file and group them
78
78
  command :collect do |c|
79
79
 
80
80
  c.desc 'Rows to consider for collection'
81
- c.arg_name 'ROW1,ROW2,ROW10-ROW30|REGEXP'
82
- c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
81
+ c.arg_name 'ROW1,ROW2,ROW10-ROW30,45-EOF,REGEXP'
82
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
83
83
 
84
84
  c.desc 'Columns to collect values from'
85
- c.arg_name 'CATEGORY1:ROW1,ROW2,ROW10-ROW30+CATEGORY2:ROW3-ROW9'
85
+ c.arg_name 'CATEGORY1:COL1,COL2,COL10-COL30+CATEGORY2:COL3-COL9'
86
86
  c.flag [:c, :col], :must_match => /^\w*:\d+(?:,\d+|-\d+|\+\w*:\d+(?:,\d+|-\d+)*)*/
87
87
 
88
88
  c.action do |global_options,options,args|
@@ -97,8 +97,8 @@ end
97
97
  desc 'Allocate specified columns from the file to a key value'
98
98
  command :allocate do |c|
99
99
  c.desc 'Rows to consider'
100
- c.arg_name '1,2,10-30|REGEXP'
101
- c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
100
+ c.arg_name '1,2,10-30,45-EOF,REGEXP'
101
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
102
102
 
103
103
  c.desc 'Key to allocate columns to'
104
104
  c.arg_name '0'
@@ -192,21 +192,21 @@ desc 'Counts the occurences of column values. Uses column values as headings wit
192
192
 
193
193
  command :count do |c|
194
194
 
195
- c.desc 'Key column that is assigned the count of column values to'
196
- c.arg_name 'KEY_COLUMN'
197
- c.flag [:k, :key], :must_match => /^\d+/
195
+ c.desc 'Key columns that are assigned the count of column values'
196
+ c.arg_name 'COLUMN:TITLE,COLUMN:TITLE'
197
+ c.flag [:k, :key], :must_match => /^\d+:\w+(?:,\d+:\w+)*/
198
198
 
199
199
  c.desc 'Rows to consider'
200
- c.arg_name '1,2,10-30|REGEXP'
201
- c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
200
+ c.arg_name '1,2,10-30,45-EOF,REGEXP'
201
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
202
202
 
203
- c.desc 'Columns to count where column 2 is counted conditionally'
204
- c.arg_name '1,2:<14.2.2014,10-30'
205
- c.flag [:c, :col], :must_match => /^\d+(?:,\d+|(?::[<=>]\d+.\d+.\d+|:\d+.\d+.\d+-\d+.\d+.\d+|:\/.*?\/|-\d+)*)*/
203
+ c.desc 'Columns to count where columns 2 and 3 are counted conditionally'
204
+ c.arg_name '1,2:<14.2.2014,10-30,3:>10'
205
+ c.flag [:c, :col], :must_match => /^\d+(?:,\d+|(?::[<=>]\d+.\d+.\d+|:\d+.\d+.\d+-\d+.\d+.\d+|:\/.*?\/|:[<=>]\d+|:\d+-\d+|-\d+)*)*/
206
206
 
207
207
  c.desc 'Adds a sum row with TITLE for the counted columns at the specified row position'
208
- c.arg_name 'TITLE:ROW'
209
- c.flag [:s, :sum], :must_match => /^\w+:\d+/
208
+ c.arg_name 'SUM_ROW_TITLE:ROW,SUM_COL_TITLE'
209
+ c.flag [:s, :sum], :must_match => /^\w+:\d+(?:,\w+)?|^\w+/
210
210
 
211
211
  c.desc 'Format of date values'
212
212
  c.arg_name '%d.%m.%Y|%m/%d/%Y|...'
@@ -223,11 +223,38 @@ command :count do |c|
223
223
 
224
224
  end
225
225
 
226
+ desc 'Aggregates the occurences of row values. Optionally adds a sum row'
227
+
228
+ command :aggregate do |c|
229
+
230
+ c.desc 'Rows to consider'
231
+ c.arg_name '1,2,10-30,45-EOF,REGEXP'
232
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
233
+
234
+ c.desc 'Columns to count'
235
+ c.arg_name '1,2-4'
236
+ c.flag [:c, :col], :must_match => /^\d+(?:,\d+|-\d+)*/
237
+
238
+ c.desc 'Adds a sum row and a sum column with TITLE for the counted columns. The sum row is ' +
239
+ 'specified by the row position. The sum column is the last column in the row'
240
+ c.arg_name 'SUM_ROW_TITLE:ROW,SUM_COL_TITLE'
241
+ c.flag [:s, :sum], :must_match => /^\w+:\d+(?:,\w+)?|^\w+/
242
+
243
+ c.action do |global_options,options,args|
244
+ print "Aggregating..."
245
+ aggregator = Sycsvpro::Aggregator.new(infile: global_options[:f], outfile: global_options[:o],
246
+ rows: options[:r], cols: options[:c], sum: options[:s])
247
+ aggregator.execute
248
+ puts "done"
249
+ end
250
+
251
+ end
252
+
226
253
  desc 'Sort rows based on column values'
227
254
  command :sort do |c|
228
255
  c.desc 'Rows to consider'
229
- c.arg_name '1,2,10-30|REGEXP'
230
- c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
256
+ c.arg_name '1,2,10-30,45-EOF,REGEXP'
257
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
231
258
 
232
259
  c.desc 'Columns to sort based on a type (n = number, s = string, d = date) and its value'
233
260
  c.arg_name 'n:1,s:2-5,d:7'
@@ -282,8 +309,8 @@ desc 'Map values in columns to new values'
282
309
  arg_name 'MAPPINGS-FILE'
283
310
  command :map do |c|
284
311
  c.desc 'Rows to consider'
285
- c.arg_name 'ROW1,ROW2,ROW10-ROW30|REGEXP'
286
- c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
312
+ c.arg_name 'ROW1,ROW2,ROW10-ROW30,45-EOF,REGEXP'
313
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
287
314
 
288
315
  c.desc 'Columns to consider for mapping'
289
316
  c.arg_name 'COL1,COL2,COL10-COL30'
@@ -300,7 +327,7 @@ command :map do |c|
300
327
  end
301
328
  end
302
329
 
303
- desc 'Process math operations on columns'
330
+ desc 'Process math operations on columns. Optionally add a sum row'
304
331
  command :calc do |c|
305
332
  c.desc 'The first non-empty column is considered the header. '+
306
333
  'If additional columns are created then *,COL1,COL2 will create the additional header '+
@@ -310,19 +337,23 @@ command :calc do |c|
310
337
  c.flag [:h, :header], :must_match => /\*(?:,\w+)*/
311
338
 
312
339
  c.desc 'Columns to consider for calculations'
313
- c.arg_name 'ROW1,ROW2-ROW10|REGEXP'
314
- c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/
340
+ c.arg_name 'ROW1,ROW2-ROW10,45-EOF,REGEXP'
341
+ c.flag [:r, :row], :must_match => /\d+(?:,\d+|-\d+|-eof|,\/.*\/)*|\/.*\/(?:,\/.*\/|\d+)*/i
315
342
 
316
343
  c.desc 'Column to do calculations on'
317
344
  c.arg_name 'COL1:*2,COL2:-C3,COL3:*2+(4+C5),COL6:NEW_COL=C1+5'
318
345
  c.flag [:c, :col], :must_match => /\d+:(?:[\*\/\+\-]|\w+=[\d|(]*)[\*\/\+\-\dc()]*(?:,\d+:(?:[\*\/\+\-]|\w+=[\d|(]*)[\*\/\+\-\dc()]*)*/
319
346
 
347
+ c.desc 'Indicate to add a sum row'
348
+ c.switch [:s, :sum]
349
+
320
350
  c.action do |global_options,options,args|
321
351
  help_now! "You need to provide the column flag" if options[:c].nil?
322
352
 
323
353
  print "Calculating..."
324
354
  calculator = Sycsvpro::Calculator.new(infile: global_options[:f], outfile: global_options[:o],
325
- header: options[:h], rows: options[:r], cols: options[:c])
355
+ header: options[:h], rows: options[:r], cols: options[:c],
356
+ sum: options[:s])
326
357
  calculator.execute
327
358
  puts "done"
328
359
  end
@@ -338,7 +369,7 @@ pre do |global,command,options,args|
338
369
  case command.name
339
370
  when :analyze
340
371
  help_now! "You need to provide an input file '-f FILE'" if global[:f].nil?
341
- when :allocate, :calc, :collect, :count, :extract, :map, :sort
372
+ when :aggregate, :allocate, :calc, :collect, :count, :extract, :map, :sort
342
373
  help_now! "You need to provide an input file '-f FILE'" if global[:f].nil?
343
374
  help_now! "You need to provide a result file '-o OUT_FILE'" if global[:o].nil?
344
375
  end
@@ -349,6 +380,7 @@ pre do |global,command,options,args|
349
380
  analyzer = Sycsvpro::Analyzer.new(global[:f])
350
381
  result = analyzer.result
351
382
  count = result.row_count
383
+ set_max_row(options, count)
352
384
  end
353
385
 
354
386
  # Creates statistics on the command operation
@@ -418,4 +450,14 @@ on_error do |exception|
418
450
  true
419
451
  end
420
452
 
453
+ # the -r flag can take a EOF value which is replaced by the actual row value of the input file
454
+ def set_max_row(options, max_row)
455
+ options.each do |option, value|
456
+ case option
457
+ when "r", :r, "row", :row
458
+ options[option] = options[option].sub(/EOF/i, max_row.to_s) if options[option] =~ /EOF/i
459
+ end
460
+ end
461
+ end
462
+
421
463
  exit run(ARGV)
data/html/Object.html CHANGED
@@ -78,7 +78,17 @@
78
78
  </div>
79
79
 
80
80
 
81
+ <!-- Method Quickref -->
82
+ <div id="method-list-section" class="nav-section">
83
+ <h3>Methods</h3>
84
+
85
+ <ul class="link-list" role="directory">
86
+
87
+ <li ><a href="#method-i-set_max_row">#set_max_row</a>
81
88
 
89
+ </ul>
90
+ </div>
91
+
82
92
  </div>
83
93
  </nav>
84
94
 
@@ -118,6 +128,53 @@
118
128
 
119
129
 
120
130
 
131
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
132
+ <header>
133
+ <h3>Public Instance Methods</h3>
134
+ </header>
135
+
136
+
137
+ <div id="method-i-set_max_row" class="method-detail ">
138
+
139
+ <div class="method-heading">
140
+ <span class="method-name">set_max_row</span><span
141
+ class="method-args">(options, max_row)</span>
142
+
143
+ <span class="method-click-advice">click to toggle source</span>
144
+
145
+ </div>
146
+
147
+
148
+ <div class="method-description">
149
+
150
+ <p>the -r flag can take a EOF value which is replaced by the actual row value
151
+ of the input file</p>
152
+
153
+
154
+
155
+
156
+ <div class="method-source-code" id="set_max_row-source">
157
+ <pre><span class="ruby-comment"># File bin/sycsvpro, line 454</span>
158
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">set_max_row</span>(<span class="ruby-identifier">options</span>, <span class="ruby-identifier">max_row</span>)
159
+ <span class="ruby-identifier">options</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">option</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
160
+ <span class="ruby-keyword">case</span> <span class="ruby-identifier">option</span>
161
+ <span class="ruby-keyword">when</span> <span class="ruby-string">&quot;r&quot;</span>, <span class="ruby-value">:r</span>, <span class="ruby-string">&quot;row&quot;</span>, <span class="ruby-value">:row</span>
162
+ <span class="ruby-identifier">options</span>[<span class="ruby-identifier">option</span>] = <span class="ruby-identifier">options</span>[<span class="ruby-identifier">option</span>].<span class="ruby-identifier">sub</span>(<span class="ruby-regexp">/EOF/i</span>, <span class="ruby-identifier">max_row</span>.<span class="ruby-identifier">to_s</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">options</span>[<span class="ruby-identifier">option</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp">/EOF/i</span>
163
+ <span class="ruby-keyword">end</span>
164
+ <span class="ruby-keyword">end</span>
165
+ <span class="ruby-keyword">end</span></pre>
166
+ </div>
167
+
168
+ </div>
169
+
170
+
171
+
172
+
173
+ </div>
174
+
175
+
176
+ </section>
177
+
121
178
  </section>
122
179
  </main>
123
180
 
@@ -147,32 +147,34 @@ bin</pre>
147
147
 
148
148
  <p>VERSION</p>
149
149
 
150
- <pre>0.0.8</pre>
150
+ <pre>0.1.0</pre>
151
151
 
152
152
  <p>GLOBAL OPTIONS</p>
153
153
 
154
154
  <pre>-f, --file=FILE - CSV file to operate on (default: none)
155
155
  --help - Show this message
156
156
  -o, --out=OUT_FILE - CSV file to write the result to (default: none)
157
+ -s, --[no-]silent - Silent progress doesn&#39;t show progress indicator
157
158
  --version - Display the program version</pre>
158
159
 
159
160
  <p>COMMANDS</p>
160
161
 
161
- <pre>allocate - Allocate specified columns from the file to a key value
162
- analyze - Analyze the CSV file regarding columns, rows and content
163
- calc - Process math operations on columns
164
- collect - Collect values of specified rows and columns from the file and group them in
165
- categories
166
- count - Counts the occurences of column values. Uses column values as headings with count as
167
- values. Columns with a condition will be added as new columns and the condition will
168
- be set as column name. Optionally adds a sum row
169
- execute - Executes the code provided in a file
170
- extract - Extract specified rows and columns from the file
171
- help - Shows a list of commands or help for one command
172
- insert - Inserts rows from a file to a csv-file
173
- list - List scripts in the scripts directory with optionally listing methods
174
- map - Map values in columns to new values
175
- sort - Sort columns based on column values</pre>
162
+ <pre>aggregate - Aggregates the occurences of row values. Optionally adds a sum row
163
+ allocate - Allocate specified columns from the file to a key value
164
+ analyze - Analyze the CSV file regarding columns, rows and content
165
+ calc - Process math operations on columns. Optionally adds a sum row
166
+ collect - Collect values of specified rows and columns from the file and group them in
167
+ categories
168
+ count - Counts the occurences of column values. Uses column values as headings with count as
169
+ values. Columns with a condition will be added as new columns and the condition will
170
+ be set as column name. Optionally adds a sum row
171
+ execute - Executes the code provided in a file
172
+ extract - Extract specified rows and columns from the file
173
+ help - Shows a list of commands or help for one command
174
+ insert - Inserts rows from a file to a csv-file
175
+ list - List scripts in the scripts directory with optionally listing methods
176
+ map - Map values in columns to new values
177
+ sort - Sort columns based on column values</pre>
176
178
  </main>
177
179
 
178
180
 
data/html/Sycsvpro.html CHANGED
@@ -105,6 +105,8 @@
105
105
 
106
106
  <p>Operating csv files</p>
107
107
 
108
+ <p>Operating csv files</p>
109
+
108
110
  <p>Operating csv files</p>
109
111
 
110
112
  </section>
@@ -0,0 +1,482 @@
1
+ <!DOCTYPE html>
2
+
3
+ <html>
4
+ <head>
5
+ <meta charset="UTF-8">
6
+
7
+ <title>class Sycsvpro::Aggregator - Your application title</title>
8
+
9
+ <link href="../fonts.css" rel="stylesheet">
10
+ <link href="../rdoc.css" rel="stylesheet">
11
+
12
+ <script type="text/javascript">
13
+ var rdoc_rel_prefix = "../";
14
+ </script>
15
+
16
+ <script src="../js/jquery.js"></script>
17
+ <script src="../js/navigation.js"></script>
18
+ <script src="../js/search_index.js"></script>
19
+ <script src="../js/search.js"></script>
20
+ <script src="../js/searcher.js"></script>
21
+ <script src="../js/darkfish.js"></script>
22
+
23
+
24
+ <body id="top" role="document" class="class">
25
+ <nav role="navigation">
26
+ <div id="project-navigation">
27
+ <div id="home-section" role="region" title="Quick navigation" class="nav-section">
28
+ <h2>
29
+ <a href="../index.html" rel="home">Home</a>
30
+ </h2>
31
+
32
+ <div id="table-of-contents-navigation">
33
+ <a href="../table_of_contents.html#pages">Pages</a>
34
+ <a href="../table_of_contents.html#classes">Classes</a>
35
+ <a href="../table_of_contents.html#methods">Methods</a>
36
+ </div>
37
+ </div>
38
+
39
+ <div id="search-section" role="search" class="project-section initially-hidden">
40
+ <form action="#" method="get" accept-charset="utf-8">
41
+ <div id="search-field-wrapper">
42
+ <input id="search-field" role="combobox" aria-label="Search"
43
+ aria-autocomplete="list" aria-controls="search-results"
44
+ type="text" name="search" placeholder="Search" spellcheck="false"
45
+ title="Type to search, Up and Down to navigate, Enter to load">
46
+ </div>
47
+
48
+ <ul id="search-results" aria-label="Search Results"
49
+ aria-busy="false" aria-expanded="false"
50
+ aria-atomic="false" class="initially-hidden"></ul>
51
+ </form>
52
+ </div>
53
+
54
+ </div>
55
+
56
+
57
+
58
+ <div id="class-metadata">
59
+
60
+ <div id="parent-class-section" class="nav-section">
61
+ <h3>Parent</h3>
62
+
63
+
64
+ <p class="link"><a href="../Object.html">Object</a>
65
+
66
+ </div>
67
+
68
+ <div id="includes-section" class="nav-section">
69
+ <h3>Included Modules</h3>
70
+
71
+ <ul class="link-list">
72
+
73
+
74
+ <li><a class="include" href="../Dsl.html">Dsl</a>
75
+
76
+
77
+ </ul>
78
+ </div>
79
+
80
+
81
+ <!-- Method Quickref -->
82
+ <div id="method-list-section" class="nav-section">
83
+ <h3>Methods</h3>
84
+
85
+ <ul class="link-list" role="directory">
86
+
87
+ <li ><a href="#method-c-new">::new</a>
88
+
89
+ <li ><a href="#method-i-execute">#execute</a>
90
+
91
+ <li ><a href="#method-i-process_aggregation">#process_aggregation</a>
92
+
93
+ <li ><a href="#method-i-write_result">#write_result</a>
94
+
95
+ </ul>
96
+ </div>
97
+
98
+ </div>
99
+ </nav>
100
+
101
+ <main role="main" aria-labelledby="class-Sycsvpro::Aggregator">
102
+ <h1 id="class-Sycsvpro::Aggregator" class="class">
103
+ class Sycsvpro::Aggregator
104
+ </h1>
105
+
106
+ <section class="description">
107
+
108
+ <p>An <a href="Aggregator.html">Aggregator</a> counts specified row values and
109
+ adds a sum to the end of the row</p>
110
+
111
+ </section>
112
+
113
+
114
+
115
+
116
+ <section id="5Buntitled-5D" class="documentation-section">
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+ <section class="attribute-method-details" class="method-section">
125
+ <header>
126
+ <h3>Attributes</h3>
127
+ </header>
128
+
129
+
130
+ <div id="attribute-i-col_filter" class="method-detail">
131
+ <div class="method-heading attribute-method-heading">
132
+ <span class="method-name">col_filter</span><span
133
+ class="attribute-access-type">[R]</span>
134
+ </div>
135
+
136
+ <div class="method-description">
137
+
138
+ <p>filter that is used for columns</p>
139
+
140
+ </div>
141
+ </div>
142
+
143
+ <div id="attribute-i-headerless" class="method-detail">
144
+ <div class="method-heading attribute-method-heading">
145
+ <span class="method-name">headerless</span><span
146
+ class="attribute-access-type">[R]</span>
147
+ </div>
148
+
149
+ <div class="method-description">
150
+
151
+ <p>file doesn&#39;t contain a header</p>
152
+
153
+ </div>
154
+ </div>
155
+
156
+ <div id="attribute-i-heading" class="method-detail">
157
+ <div class="method-heading attribute-method-heading">
158
+ <span class="method-name">heading</span><span
159
+ class="attribute-access-type">[R]</span>
160
+ </div>
161
+
162
+ <div class="method-description">
163
+
164
+ <p>header of the out file</p>
165
+
166
+ </div>
167
+ </div>
168
+
169
+ <div id="attribute-i-infile" class="method-detail">
170
+ <div class="method-heading attribute-method-heading">
171
+ <span class="method-name">infile</span><span
172
+ class="attribute-access-type">[R]</span>
173
+ </div>
174
+
175
+ <div class="method-description">
176
+
177
+ <p>infile contains the data that is operated on</p>
178
+
179
+ </div>
180
+ </div>
181
+
182
+ <div id="attribute-i-key_values" class="method-detail">
183
+ <div class="method-heading attribute-method-heading">
184
+ <span class="method-name">key_values</span><span
185
+ class="attribute-access-type">[R]</span>
186
+ </div>
187
+
188
+ <div class="method-description">
189
+
190
+ <p>values that are aggregated</p>
191
+
192
+ </div>
193
+ </div>
194
+
195
+ <div id="attribute-i-outfile" class="method-detail">
196
+ <div class="method-heading attribute-method-heading">
197
+ <span class="method-name">outfile</span><span
198
+ class="attribute-access-type">[R]</span>
199
+ </div>
200
+
201
+ <div class="method-description">
202
+
203
+ <p>outfile is the file where the result is written to</p>
204
+
205
+ </div>
206
+ </div>
207
+
208
+ <div id="attribute-i-row_filter" class="method-detail">
209
+ <div class="method-heading attribute-method-heading">
210
+ <span class="method-name">row_filter</span><span
211
+ class="attribute-access-type">[R]</span>
212
+ </div>
213
+
214
+ <div class="method-description">
215
+
216
+ <p>filter that is used for rows</p>
217
+
218
+ </div>
219
+ </div>
220
+
221
+ <div id="attribute-i-sum_col" class="method-detail">
222
+ <div class="method-heading attribute-method-heading">
223
+ <span class="method-name">sum_col</span><span
224
+ class="attribute-access-type">[R]</span>
225
+ </div>
226
+
227
+ <div class="method-description">
228
+
229
+ <p>column where to add the sum of the row sum</p>
230
+
231
+ </div>
232
+ </div>
233
+
234
+ <div id="attribute-i-sum_col_title" class="method-detail">
235
+ <div class="method-heading attribute-method-heading">
236
+ <span class="method-name">sum_col_title</span><span
237
+ class="attribute-access-type">[R]</span>
238
+ </div>
239
+
240
+ <div class="method-description">
241
+
242
+ <p>Title of the sum column</p>
243
+
244
+ </div>
245
+ </div>
246
+
247
+ <div id="attribute-i-sum_row" class="method-detail">
248
+ <div class="method-heading attribute-method-heading">
249
+ <span class="method-name">sum_row</span><span
250
+ class="attribute-access-type">[R]</span>
251
+ </div>
252
+
253
+ <div class="method-description">
254
+
255
+ <p>row where to add the sums of the columns</p>
256
+
257
+ </div>
258
+ </div>
259
+
260
+ <div id="attribute-i-sum_row_title" class="method-detail">
261
+ <div class="method-heading attribute-method-heading">
262
+ <span class="method-name">sum_row_title</span><span
263
+ class="attribute-access-type">[R]</span>
264
+ </div>
265
+
266
+ <div class="method-description">
267
+
268
+ <p>Title of the sum row</p>
269
+
270
+ </div>
271
+ </div>
272
+
273
+ <div id="attribute-i-sums" class="method-detail">
274
+ <div class="method-heading attribute-method-heading">
275
+ <span class="method-name">sums</span><span
276
+ class="attribute-access-type">[R]</span>
277
+ </div>
278
+
279
+ <div class="method-description">
280
+
281
+ <p>sums of the column values</p>
282
+
283
+ </div>
284
+ </div>
285
+
286
+ </section>
287
+
288
+
289
+
290
+ <section id="public-class-5Buntitled-5D-method-details" class="method-section">
291
+ <header>
292
+ <h3>Public Class Methods</h3>
293
+ </header>
294
+
295
+
296
+ <div id="method-c-new" class="method-detail ">
297
+
298
+ <div class="method-heading">
299
+ <span class="method-name">new</span><span
300
+ class="method-args">(options={})</span>
301
+
302
+ <span class="method-click-advice">click to toggle source</span>
303
+
304
+ </div>
305
+
306
+
307
+ <div class="method-description">
308
+
309
+ <p>Creates a new aggregator. Takes as attributes infile, outfile, key, rows,
310
+ cols, date-format and indicator whether to add a sum row</p>
311
+
312
+
313
+
314
+
315
+ <div class="method-source-code" id="new-source">
316
+ <pre><span class="ruby-comment"># File lib/sycsvpro/aggregator.rb, line 40</span>
317
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span>={})
318
+ <span class="ruby-ivar">@infile</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:infile</span>]
319
+ <span class="ruby-ivar">@outfile</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:outfile</span>]
320
+ <span class="ruby-ivar">@headerless</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:headerless</span>] <span class="ruby-operator">||</span> <span class="ruby-keyword">false</span>
321
+ <span class="ruby-ivar">@row_filter</span> = <span class="ruby-constant">RowFilter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:rows</span>])
322
+ <span class="ruby-ivar">@col_filter</span> = <span class="ruby-constant">ColumnFilter</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:cols</span>], <span class="ruby-identifier">df</span><span class="ruby-operator">:</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:df</span>])
323
+ <span class="ruby-ivar">@key_values</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span>)
324
+ <span class="ruby-ivar">@heading</span> = []
325
+ <span class="ruby-ivar">@sums</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span>)
326
+ <span class="ruby-identifier">init_sum_scheme</span>(<span class="ruby-identifier">options</span>[<span class="ruby-value">:sum</span>])
327
+ <span class="ruby-keyword">end</span></pre>
328
+ </div>
329
+
330
+ </div>
331
+
332
+
333
+
334
+
335
+ </div>
336
+
337
+
338
+ </section>
339
+
340
+ <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
341
+ <header>
342
+ <h3>Public Instance Methods</h3>
343
+ </header>
344
+
345
+
346
+ <div id="method-i-execute" class="method-detail ">
347
+
348
+ <div class="method-heading">
349
+ <span class="method-name">execute</span><span
350
+ class="method-args">()</span>
351
+
352
+ <span class="method-click-advice">click to toggle source</span>
353
+
354
+ </div>
355
+
356
+
357
+ <div class="method-description">
358
+
359
+ <p>Executes the aggregator</p>
360
+
361
+
362
+
363
+
364
+ <div class="method-source-code" id="execute-source">
365
+ <pre><span class="ruby-comment"># File lib/sycsvpro/aggregator.rb, line 53</span>
366
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">execute</span>
367
+ <span class="ruby-identifier">process_aggregation</span>
368
+ <span class="ruby-identifier">write_result</span>
369
+ <span class="ruby-keyword">end</span></pre>
370
+ </div>
371
+
372
+ </div>
373
+
374
+
375
+
376
+
377
+ </div>
378
+
379
+
380
+ <div id="method-i-process_aggregation" class="method-detail ">
381
+
382
+ <div class="method-heading">
383
+ <span class="method-name">process_aggregation</span><span
384
+ class="method-args">()</span>
385
+
386
+ <span class="method-click-advice">click to toggle source</span>
387
+
388
+ </div>
389
+
390
+
391
+ <div class="method-description">
392
+
393
+ <p>Process the aggregation of the key values</p>
394
+
395
+
396
+
397
+
398
+ <div class="method-source-code" id="process_aggregation-source">
399
+ <pre><span class="ruby-comment"># File lib/sycsvpro/aggregator.rb, line 59</span>
400
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">process_aggregation</span>
401
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">infile</span>).<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span>, <span class="ruby-identifier">index</span><span class="ruby-operator">|</span>
402
+ <span class="ruby-identifier">result</span> = <span class="ruby-identifier">col_filter</span>.<span class="ruby-identifier">process</span>(<span class="ruby-identifier">row_filter</span>.<span class="ruby-identifier">process</span>(<span class="ruby-identifier">line</span>.<span class="ruby-identifier">chomp</span>, <span class="ruby-identifier">row</span><span class="ruby-operator">:</span> <span class="ruby-identifier">index</span>))
403
+ <span class="ruby-keyword">unless</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">empty?</span>
404
+ <span class="ruby-keyword">if</span> <span class="ruby-identifier">heading</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-keyword">and</span> <span class="ruby-keyword">not</span> <span class="ruby-identifier">headerless</span>
405
+ <span class="ruby-identifier">heading</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">result</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&#39;;&#39;</span>)
406
+ <span class="ruby-keyword">next</span>
407
+ <span class="ruby-keyword">else</span>
408
+ <span class="ruby-ivar">@sum_col</span> = [<span class="ruby-identifier">result</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&#39;;&#39;</span>).<span class="ruby-identifier">size</span>, <span class="ruby-identifier">sum_col</span>].<span class="ruby-identifier">max</span>
409
+ <span class="ruby-keyword">end</span>
410
+ <span class="ruby-identifier">key_values</span>[<span class="ruby-identifier">result</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
411
+ <span class="ruby-identifier">sums</span>[<span class="ruby-identifier">sum_col_title</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
412
+ <span class="ruby-keyword">end</span>
413
+ <span class="ruby-keyword">end</span>
414
+ <span class="ruby-identifier">heading</span>.<span class="ruby-identifier">flatten!</span>
415
+ <span class="ruby-identifier">heading</span>[<span class="ruby-identifier">sum_col</span>] = <span class="ruby-identifier">sum_col_title</span>
416
+ <span class="ruby-keyword">end</span></pre>
417
+ </div>
418
+
419
+ </div>
420
+
421
+
422
+
423
+
424
+ </div>
425
+
426
+
427
+ <div id="method-i-write_result" class="method-detail ">
428
+
429
+ <div class="method-heading">
430
+ <span class="method-name">write_result</span><span
431
+ class="method-args">()</span>
432
+
433
+ <span class="method-click-advice">click to toggle source</span>
434
+
435
+ </div>
436
+
437
+
438
+ <div class="method-description">
439
+
440
+ <p>Writes the aggration results</p>
441
+
442
+
443
+
444
+
445
+ <div class="method-source-code" id="write_result-source">
446
+ <pre><span class="ruby-comment"># File lib/sycsvpro/aggregator.rb, line 78</span>
447
+ <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_result</span>
448
+ <span class="ruby-identifier">sum_line</span> = [<span class="ruby-identifier">sum_row_title</span>]
449
+ (<span class="ruby-identifier">heading</span>.<span class="ruby-identifier">size</span> <span class="ruby-operator">-</span> <span class="ruby-value">2</span>).<span class="ruby-identifier">times</span> { <span class="ruby-identifier">sum_line</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-string">&quot;&quot;</span> }
450
+ <span class="ruby-identifier">sum_line</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">sums</span>[<span class="ruby-identifier">sum_col_title</span>]
451
+ <span class="ruby-identifier">row</span> = <span class="ruby-value">0</span>;
452
+ <span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">outfile</span>, <span class="ruby-string">&#39;w&#39;</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">out</span><span class="ruby-operator">|</span>
453
+ <span class="ruby-identifier">out</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">sum_line</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&#39;;&#39;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">row</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">sum_row</span> ; <span class="ruby-identifier">row</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
454
+ <span class="ruby-identifier">out</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">heading</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&#39;;&#39;</span>)
455
+ <span class="ruby-identifier">key_values</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
456
+ <span class="ruby-identifier">out</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">sum_line</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">&#39;;&#39;</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">row</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">sum_row</span> ; <span class="ruby-identifier">row</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
457
+ <span class="ruby-identifier">out</span>.<span class="ruby-identifier">puts</span> [<span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span>].<span class="ruby-identifier">join</span>(<span class="ruby-string">&#39;;&#39;</span>)
458
+ <span class="ruby-keyword">end</span>
459
+ <span class="ruby-keyword">end</span>
460
+ <span class="ruby-keyword">end</span></pre>
461
+ </div>
462
+
463
+ </div>
464
+
465
+
466
+
467
+
468
+ </div>
469
+
470
+
471
+ </section>
472
+
473
+ </section>
474
+ </main>
475
+
476
+
477
+ <footer id="validator-badges" role="contentinfo">
478
+ <p><a href="http://validator.w3.org/check/referer">Validate</a>
479
+ <p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.1.
480
+ <p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
481
+ </footer>
482
+