sycsvpro 0.0.4 → 0.0.5

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: 738f8fd1604b67445b553bb91b955b47ee3731b6
4
- data.tar.gz: e69dc77c8139f8c80dd7f69d92eccc94f5181e03
3
+ metadata.gz: c52a71d74f5f9366239cad3e5fe9d2239d852c76
4
+ data.tar.gz: 1d61284a839cf80c666d4267444b1644991e6d06
5
5
  SHA512:
6
- metadata.gz: aa434e1a18c780427d5a7ca3afdd955a2202b458b821a281db35782718bfad2bf1d2d624fc1f32f5cde95cc6a0e85f371a3387e9520de59983ed1f5be4567924
7
- data.tar.gz: 2c26c5c1b652ef58ac376e369094f2bb40311ea0424ff60ff5489c0767c2de952c0b4b8f50aa68813b3a625df976c605353e5723594d42649f551bff2e3fd6bb
6
+ metadata.gz: a93e01b9623a2322e8de10fcc688c3967bb7a5a252f65e8e0d5c3d00b3ff99a2e848c7d2e210bdb07f821199039c56cd65f7bb14159db9fb6a2d60ebbb621eaf
7
+ data.tar.gz: 4e32352d9006bac2ebd54bcdd4b79bc212677a3f878aa55b46033fc70a3fa7496028419d63d0c420a77fe0445cb771318569598cf39975122af317c84f6d86e8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sycsvpro (0.0.3)
4
+ sycsvpro (0.0.5)
5
5
  gli (= 2.9.0)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -7,6 +7,7 @@ Processing of csv files. *sycsvpro* offers following functions
7
7
  * extract rows and columns from a file
8
8
  * collect values of rows and assign them to categories
9
9
  * map column values to new values
10
+ * allocate column values to a key column (since version 0.0.4)
10
11
  * count values in columns and use the value as column name
11
12
  * arithmetic operations on values of columns
12
13
  * execute a ruby script file that operates a csv file
@@ -95,17 +96,28 @@ The mapping file (mapping) uses the result from the collect command above
95
96
 
96
97
  $ sycsvpro -f in.csv -o out.csv map mapping -c 2-4
97
98
 
99
+ Allocate
100
+ --------
101
+ Allocate all the machine types to the customer
102
+
103
+ $ sycsvpro -f in.csv -o out.csv assign -k 0 -r 1-20 -c 1
104
+
105
+ hello;h1;h2
106
+ indix;i1
107
+ chiro;c1;c2
108
+
98
109
  Count
99
110
  -----
100
111
 
101
- Count all customers (key column) in rows 2 to 20 that have machines that start with *h* and have contract valid beginning after 1.1.2000
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
102
113
 
103
- $ sycsvpro -f in.csv -o out.csv count -r 2-20 -k 0 -c 1:/^h/,5:">1.1.2000" --df "%d.%m.%Y"
114
+ $ 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"
104
115
 
105
116
  The result in file out.csv is
106
117
 
107
118
  $ cat out.csv
108
119
  customer;>1.1.2000;^h
120
+ Total;5;2
109
121
  hello;2;2
110
122
  indix;1;0
111
123
  chiro;2;0
data/bin/sycsvpro CHANGED
@@ -126,7 +126,7 @@ end
126
126
 
127
127
  desc 'Counts the occurences of column values. Uses column values as headings with count as ' +
128
128
  'values. Columns with a condition will be added as new columns and the condition will ' +
129
- 'be set as column name'
129
+ 'be set as column name. Optionally adds a sum row'
130
130
 
131
131
  command :count do |c|
132
132
 
@@ -142,6 +142,10 @@ command :count do |c|
142
142
  c.arg_name '1,2:<14.2.2014,10-30'
143
143
  c.flag [:c, :col], :must_match => /^\d+(?:,\d+|(?::[<=>]\d+.\d+.\d+|:\d+.\d+.\d+-\d+.\d+.\d+|:\/.*?\/|-\d+)*)*/
144
144
 
145
+ c.desc 'Adds a sum row with TITLE for the counted columns at the specified row position'
146
+ c.arg_name 'TITLE:ROW'
147
+ c.flag [:s, :sum], :must_match => /^\w+:\d+/
148
+
145
149
  c.desc 'Format of date values'
146
150
  c.arg_name '%d.%m.%Y|%m/%d/%Y|...'
147
151
  c.flag [:df]
@@ -153,7 +157,7 @@ command :count do |c|
153
157
  puts "Counting..."
154
158
  counter = Sycsvpro::Counter.new(infile: global_options[:f], outfile: global_options[:o],
155
159
  key: options[:k], rows: options[:r], cols: options[:c],
156
- df: options[:df])
160
+ df: options[:df], sum: options[:s])
157
161
  counter.execute
158
162
  puts "count done"
159
163
  end
@@ -144,7 +144,7 @@ bin</pre>
144
144
 
145
145
  <p>VERSION</p>
146
146
 
147
- <pre>0.0.1</pre>
147
+ <pre>0.0.5</pre>
148
148
 
149
149
  <p>GLOBAL OPTIONS</p>
150
150
 
@@ -155,17 +155,18 @@ bin</pre>
155
155
 
156
156
  <p>COMMANDS</p>
157
157
 
158
- <pre>analyze - Analyze the CSV file regarding columns, rows and content
159
- calc - Process math operations on columns
160
- collect - Collect values of specified rows and columns from the file and group them in
161
- categories
162
- count - Counts the occurences of column values. Uses column values as headings with count as
163
- values. Columns with a condition will be added as new columns and the condition will
164
- be set as column name
165
- execute - Executes the code provided in a file
166
- extract - Extract specified rows and columns from the file
167
- help - Shows a list of commands or help for one command
168
- map - Map values in columns to new values</pre>
158
+ <pre>allocate - Allocate specified columns from the file to a key value
159
+ analyze - Analyze the CSV file regarding columns, rows and content
160
+ calc - Process math operations on columns
161
+ collect - Collect values of specified rows and columns from the file and group them in
162
+ categories
163
+ count - Counts the occurences of column values. Uses column values as headings with count as
164
+ values. Columns with a condition will be added as new columns and the condition will
165
+ be set as column name. Optionally adds a sum row
166
+ execute - Executes the code provided in a file
167
+ extract - Extract specified rows and columns from the file
168
+ help - Shows a list of commands or help for one command
169
+ map - Map values in columns to new values</pre>
169
170
  </main>
170
171
 
171
172
 
@@ -218,6 +218,45 @@ names and uses the count as the column value</p>
218
218
  </div>
219
219
  </div>
220
220
 
221
+ <div id="attribute-i-sum_row" class="method-detail">
222
+ <div class="method-heading attribute-method-heading">
223
+ <span class="method-name">sum_row</span><span
224
+ class="attribute-access-type">[R]</span>
225
+ </div>
226
+
227
+ <div class="method-description">
228
+
229
+ <p>row where to add the sums of the columns of the sum columns</p>
230
+
231
+ </div>
232
+ </div>
233
+
234
+ <div id="attribute-i-sum_title" class="method-detail">
235
+ <div class="method-heading attribute-method-heading">
236
+ <span class="method-name">sum_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 row</p>
243
+
244
+ </div>
245
+ </div>
246
+
247
+ <div id="attribute-i-sums" class="method-detail">
248
+ <div class="method-heading attribute-method-heading">
249
+ <span class="method-name">sums</span><span
250
+ class="attribute-access-type">[R]</span>
251
+ </div>
252
+
253
+ <div class="method-description">
254
+
255
+ <p>sums of the column values</p>
256
+
257
+ </div>
258
+ </div>
259
+
221
260
  </section>
222
261
 
223
262
 
@@ -241,21 +280,25 @@ names and uses the count as the column value</p>
241
280
 
242
281
  <div class="method-description">
243
282
 
244
- <p>Creates a new counter</p>
283
+ <p>Creates a new counter. Takes as attributes infile, outfile, key, rows,
284
+ cols, date-format and indicator whether to add a sum row</p>
245
285
 
246
286
 
247
287
 
248
288
 
249
289
  <div class="method-source-code" id="new-source">
250
- <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 30</span>
290
+ <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 37</span>
251
291
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span>={})
252
292
  <span class="ruby-ivar">@infile</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:infile</span>]
253
293
  <span class="ruby-ivar">@outfile</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:outfile</span>]
254
294
  <span class="ruby-ivar">@key_column</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:key</span>].<span class="ruby-identifier">to_i</span>
255
295
  <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>])
256
296
  <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>])
257
- <span class="ruby-ivar">@key_values</span> = {}
297
+ <span class="ruby-ivar">@key_values</span> = {}
258
298
  <span class="ruby-ivar">@heading</span> = []
299
+ <span class="ruby-ivar">@sum_title</span>, <span class="ruby-ivar">@sum_row</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:sum</span>].<span class="ruby-identifier">split</span>(<span class="ruby-string">&#39;:&#39;</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">options</span>[<span class="ruby-value">:sum</span>].<span class="ruby-identifier">nil?</span>
300
+ <span class="ruby-ivar">@sum_row</span> = <span class="ruby-ivar">@sum_row</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-keyword">unless</span> <span class="ruby-ivar">@sum_row</span>.<span class="ruby-identifier">nil?</span>
301
+ <span class="ruby-ivar">@sums</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>(<span class="ruby-value">0</span>)
259
302
  <span class="ruby-keyword">end</span></pre>
260
303
  </div>
261
304
 
@@ -294,7 +337,7 @@ names and uses the count as the column value</p>
294
337
 
295
338
 
296
339
  <div class="method-source-code" id="execute-source">
297
- <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 41</span>
340
+ <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 51</span>
298
341
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">execute</span>
299
342
  <span class="ruby-identifier">process_file</span>
300
343
  <span class="ruby-identifier">write_result</span>
@@ -328,7 +371,7 @@ names and uses the count as the column value</p>
328
371
 
329
372
 
330
373
  <div class="method-source-code" id="process_file-source">
331
- <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 47</span>
374
+ <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 57</span>
332
375
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">process_file</span>
333
376
  <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>
334
377
  <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>))
@@ -338,6 +381,7 @@ names and uses the count as the column value</p>
338
381
  <span class="ruby-identifier">result</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">&#39;;&#39;</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">column</span><span class="ruby-operator">|</span>
339
382
  <span class="ruby-identifier">heading</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">column</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">heading</span>.<span class="ruby-identifier">index</span>(<span class="ruby-identifier">column</span>).<span class="ruby-identifier">nil?</span>
340
383
  <span class="ruby-identifier">key_value</span>[<span class="ruby-value">:elements</span>][<span class="ruby-identifier">column</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
384
+ <span class="ruby-identifier">sums</span>[<span class="ruby-identifier">column</span>] <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
341
385
  <span class="ruby-keyword">end</span>
342
386
  <span class="ruby-keyword">end</span>
343
387
  <span class="ruby-keyword">end</span>
@@ -371,11 +415,18 @@ names and uses the count as the column value</p>
371
415
 
372
416
 
373
417
  <div class="method-source-code" id="write_result-source">
374
- <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 62</span>
418
+ <pre><span class="ruby-comment"># File lib/sycsvpro/counter.rb, line 73</span>
375
419
  <span class="ruby-keyword">def</span> <span class="ruby-identifier">write_result</span>
420
+ <span class="ruby-identifier">sum_line</span> = [<span class="ruby-identifier">sum_title</span>]
421
+ <span class="ruby-identifier">heading</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
422
+ <span class="ruby-identifier">sum_line</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">sums</span>[<span class="ruby-identifier">h</span>]
423
+ <span class="ruby-keyword">end</span>
424
+ <span class="ruby-identifier">row</span> = <span class="ruby-value">0</span>;
376
425
  <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>
426
+ <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>
377
427
  <span class="ruby-identifier">out</span>.<span class="ruby-identifier">puts</span> ([<span class="ruby-string">&quot;key&quot;</span>] <span class="ruby-operator">+</span> <span class="ruby-identifier">heading</span>.<span class="ruby-identifier">sort</span>).<span class="ruby-identifier">join</span>(<span class="ruby-string">&#39;;&#39;</span>)
378
428
  <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>
429
+ <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>
379
430
  <span class="ruby-identifier">line</span> = [<span class="ruby-identifier">k</span>]
380
431
  <span class="ruby-identifier">heading</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">h</span><span class="ruby-operator">|</span>
381
432
  <span class="ruby-identifier">line</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>[<span class="ruby-value">:elements</span>][<span class="ruby-identifier">h</span>]
data/html/created.rid CHANGED
@@ -1,4 +1,4 @@
1
- Wed, 19 Feb 2014 21:12:37 +0100
1
+ Fri, 21 Feb 2014 21:23:23 +0100
2
2
  README.rdoc Sun, 16 Feb 2014 22:01:46 +0100
3
3
  lib/sycsvpro.rb Wed, 19 Feb 2014 18:42:14 +0100
4
4
  lib/sycsvpro/allocator.rb Wed, 19 Feb 2014 20:34:28 +0100
@@ -6,7 +6,7 @@ lib/sycsvpro/analyzer.rb Tue, 18 Feb 2014 19:57:28 +0100
6
6
  lib/sycsvpro/calculator.rb Tue, 18 Feb 2014 19:53:34 +0100
7
7
  lib/sycsvpro/collector.rb Sun, 16 Feb 2014 20:59:27 +0100
8
8
  lib/sycsvpro/column_filter.rb Sun, 16 Feb 2014 21:10:11 +0100
9
- lib/sycsvpro/counter.rb Tue, 18 Feb 2014 21:22:37 +0100
9
+ lib/sycsvpro/counter.rb Fri, 21 Feb 2014 21:11:49 +0100
10
10
  lib/sycsvpro/dsl.rb Tue, 18 Feb 2014 21:34:51 +0100
11
11
  lib/sycsvpro/extractor.rb Tue, 18 Feb 2014 19:42:16 +0100
12
12
  lib/sycsvpro/filter.rb Tue, 18 Feb 2014 20:23:57 +0100
@@ -14,5 +14,5 @@ lib/sycsvpro/header.rb Tue, 18 Feb 2014 19:50:26 +0100
14
14
  lib/sycsvpro/mapper.rb Tue, 18 Feb 2014 19:45:47 +0100
15
15
  lib/sycsvpro/profiler.rb Sun, 16 Feb 2014 21:31:39 +0100
16
16
  lib/sycsvpro/row_filter.rb Tue, 18 Feb 2014 19:45:25 +0100
17
- lib/sycsvpro/version.rb Tue, 18 Feb 2014 20:01:04 +0100
18
- bin/sycsvpro Wed, 19 Feb 2014 20:59:05 +0100
17
+ lib/sycsvpro/version.rb Fri, 21 Feb 2014 21:22:36 +0100
18
+ bin/sycsvpro Fri, 21 Feb 2014 21:21:29 +0100
data/html/index.html CHANGED
@@ -170,7 +170,7 @@ bin</pre>
170
170
 
171
171
  <p>VERSION</p>
172
172
 
173
- <pre>0.0.1</pre>
173
+ <pre>0.0.5</pre>
174
174
 
175
175
  <p>GLOBAL OPTIONS</p>
176
176
 
@@ -181,17 +181,18 @@ bin</pre>
181
181
 
182
182
  <p>COMMANDS</p>
183
183
 
184
- <pre>analyze - Analyze the CSV file regarding columns, rows and content
185
- calc - Process math operations on columns
186
- collect - Collect values of specified rows and columns from the file and group them in
187
- categories
188
- count - Counts the occurences of column values. Uses column values as headings with count as
189
- values. Columns with a condition will be added as new columns and the condition will
190
- be set as column name
191
- execute - Executes the code provided in a file
192
- extract - Extract specified rows and columns from the file
193
- help - Shows a list of commands or help for one command
194
- map - Map values in columns to new values</pre>
184
+ <pre>allocate - Allocate specified columns from the file to a key value
185
+ analyze - Analyze the CSV file regarding columns, rows and content
186
+ calc - Process math operations on columns
187
+ collect - Collect values of specified rows and columns from the file and group them in
188
+ categories
189
+ count - Counts the occurences of column values. Uses column values as headings with count as
190
+ values. Columns with a condition will be added as new columns and the condition will
191
+ be set as column name. Optionally adds a sum row
192
+ execute - Executes the code provided in a file
193
+ extract - Extract specified rows and columns from the file
194
+ help - Shows a list of commands or help for one command
195
+ map - Map values in columns to new values</pre>
195
196
  </main>
196
197
 
197
198
 
@@ -1 +1 @@
1
- var search_data = {"index":{"searchIndex":["dsl","object","sycsvpro","allocator","analyzer","calculator","collector","columnfilter","counter","extractor","filter","header","mapper","profiler","rowfilter","execute()","execute()","execute()","execute()","execute()","execute()","execute()","has_filter?()","method_missing()","method_missing()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","pivot_each_column()","process()","process()","process()","process()","process_file()","result()","rows()","unstring()","write_result()","write_to()","readme"],"longSearchIndex":["dsl","object","sycsvpro","sycsvpro::allocator","sycsvpro::analyzer","sycsvpro::calculator","sycsvpro::collector","sycsvpro::columnfilter","sycsvpro::counter","sycsvpro::extractor","sycsvpro::filter","sycsvpro::header","sycsvpro::mapper","sycsvpro::profiler","sycsvpro::rowfilter","sycsvpro::allocator#execute()","sycsvpro::calculator#execute()","sycsvpro::collector#execute()","sycsvpro::counter#execute()","sycsvpro::extractor#execute()","sycsvpro::mapper#execute()","sycsvpro::profiler#execute()","sycsvpro::filter#has_filter?()","sycsvpro::calculator#method_missing()","sycsvpro::filter#method_missing()","sycsvpro::allocator::new()","sycsvpro::analyzer::new()","sycsvpro::calculator::new()","sycsvpro::collector::new()","sycsvpro::counter::new()","sycsvpro::extractor::new()","sycsvpro::filter::new()","sycsvpro::header::new()","sycsvpro::mapper::new()","sycsvpro::profiler::new()","sycsvpro::filter#pivot_each_column()","sycsvpro::columnfilter#process()","sycsvpro::filter#process()","sycsvpro::header#process()","sycsvpro::rowfilter#process()","sycsvpro::counter#process_file()","sycsvpro::analyzer#result()","dsl#rows()","dsl#unstring()","sycsvpro::counter#write_result()","dsl#write_to()",""],"info":[["Dsl","","Dsl.html","","<p>Methods to be used in customer specific script files\n"],["Object","","Object.html","",""],["Sycsvpro","","Sycsvpro.html","","<p>Operating csv files\n<p>Operating csv files\n<p>Operating csv files\n"],["Sycsvpro::Allocator","","Sycsvpro/Allocator.html","","<p>Allocates columns to a key column\n"],["Sycsvpro::Analyzer","","Sycsvpro/Analyzer.html","","<p>Analyzes the file structure\n"],["Sycsvpro::Calculator","","Sycsvpro/Calculator.html","","<p>Processes arithmetic operations on columns of a csv file. A column value\nhas to be a number. Possible …\n"],["Sycsvpro::Collector","","Sycsvpro/Collector.html","","<p>Collects values from rows and groups them in categories\n"],["Sycsvpro::ColumnFilter","","Sycsvpro/ColumnFilter.html","","<p>Creates a new column filter\n"],["Sycsvpro::Counter","","Sycsvpro/Counter.html","","<p>Creates a new counter that counts values and uses the values as column\nnames and uses the count as the …\n"],["Sycsvpro::Extractor","","Sycsvpro/Extractor.html","","<p>Extracts rows and columns from a csv file\n"],["Sycsvpro::Filter","","Sycsvpro/Filter.html","","<p>Creates a new filter that can be extended by sub-classes. A sub-class needs\nto override the process method …\n"],["Sycsvpro::Header","","Sycsvpro/Header.html","","<p>Creates a header\n"],["Sycsvpro::Mapper","","Sycsvpro/Mapper.html","","<p>Map values to new values described in a mapping file\n"],["Sycsvpro::Profiler","","Sycsvpro/Profiler.html","","<p>A profiler takes a Ruby script and executes the provided method in the\nscript\n"],["Sycsvpro::RowFilter","","Sycsvpro/RowFilter.html","","<p>Filters rows based on provided patterns\n"],["execute","Sycsvpro::Allocator","Sycsvpro/Allocator.html#method-i-execute","()","<p>Executes the allocator and assigns column values to the key\n"],["execute","Sycsvpro::Calculator","Sycsvpro/Calculator.html#method-i-execute","()","<p>Executes the calculator\n"],["execute","Sycsvpro::Collector","Sycsvpro/Collector.html#method-i-execute","()","<p>Execute the collector\n"],["execute","Sycsvpro::Counter","Sycsvpro/Counter.html#method-i-execute","()","<p>Executes the counter\n"],["execute","Sycsvpro::Extractor","Sycsvpro/Extractor.html#method-i-execute","()","<p>Executes the extractor\n"],["execute","Sycsvpro::Mapper","Sycsvpro/Mapper.html#method-i-execute","()","<p>Executes the mapper\n"],["execute","Sycsvpro::Profiler","Sycsvpro/Profiler.html#method-i-execute","(method)","<p>Executes the provided method in the Ruby script\n"],["has_filter?","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-has_filter-3F","()","<p>Checks whether a filter has been set. Returns true if filter has been set\notherwise false\n"],["method_missing","Sycsvpro::Calculator","Sycsvpro/Calculator.html#method-i-method_missing","(id, *args, &block)","<p>Retrieves the values from a row as the result of a arithmetic operation\n"],["method_missing","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-method_missing","(id, *args, &block)","<p>Creates the filters based on the given patterns\n"],["new","Sycsvpro::Allocator","Sycsvpro/Allocator.html#method-c-new","(options={})","<p>Creates a new allocator. Options are infile, outfile, key, rows and columns\nto allocate to key\n"],["new","Sycsvpro::Analyzer","Sycsvpro/Analyzer.html#method-c-new","(file)","<p>Creates a new analyzer\n"],["new","Sycsvpro::Calculator","Sycsvpro/Calculator.html#method-c-new","(options={})","<p>Creates a new Calculator. Options expects :infile, :outfile, :rows and\n:columns. Optionally a header …\n"],["new","Sycsvpro::Collector","Sycsvpro/Collector.html#method-c-new","(options={})","<p>Creates a new Collector\n"],["new","Sycsvpro::Counter","Sycsvpro/Counter.html#method-c-new","(options={})","<p>Creates a new counter\n"],["new","Sycsvpro::Extractor","Sycsvpro/Extractor.html#method-c-new","(options={})","<p>Creates a new extractor\n"],["new","Sycsvpro::Filter","Sycsvpro/Filter.html#method-c-new","(values, options={})","<p>Creates a new filter\n"],["new","Sycsvpro::Header","Sycsvpro/Header.html#method-c-new","(header)","<p>Create a new header\n"],["new","Sycsvpro::Mapper","Sycsvpro/Mapper.html#method-c-new","(options={})","<p>Creates new mapper\n"],["new","Sycsvpro::Profiler","Sycsvpro/Profiler.html#method-c-new","(pro_file)","<p>Creates a new profiler\n"],["pivot_each_column","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-pivot_each_column","(values=[])","<p>Yields the column value and whether the filter matches the column\n"],["process","Sycsvpro::ColumnFilter","Sycsvpro/ColumnFilter.html#method-i-process","(object, options={})","<p>Processes the filter and returns the values that respect the filter\n"],["process","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-process","(object, options={})","<p>Processes the filter. Needs to be overridden by the sub-class\n"],["process","Sycsvpro::Header","Sycsvpro/Header.html#method-i-process","(line)","<p>Returns the header\n"],["process","Sycsvpro::RowFilter","Sycsvpro/RowFilter.html#method-i-process","(object, options={})","<p>Processes the filter on the given row\n"],["process_file","Sycsvpro::Counter","Sycsvpro/Counter.html#method-i-process_file","()","<p>Processes the counting on the in file\n"],["result","Sycsvpro::Analyzer","Sycsvpro/Analyzer.html#method-i-result","()","<p>Analyzes the file and returns the result\n"],["rows","Dsl","Dsl.html#method-i-rows","(options={})","<p>Retrieves rows and columns from the file and returns them to the block\nprovided by the caller\n"],["unstring","Dsl","Dsl.html#method-i-unstring","(line)","<p>Remove leading and trailing “ and spaces as well as reducing more than 2\nspaces between words from …\n"],["write_result","Sycsvpro::Counter","Sycsvpro/Counter.html#method-i-write_result","()","<p>Writes the results\n"],["write_to","Dsl","Dsl.html#method-i-write_to","(file)","<p>writes values provided by a block to the given file\n"],["README","","README_rdoc.html","","<p>sycsvpro\n<p>Author &mdash; Pierre Sugar (pierre@sugaryourcoffee.de)\n<p>Copyright &mdash; Copyright © 2014 by Pierre Sugar\n"]]}}
1
+ var search_data = {"index":{"searchIndex":["dsl","object","sycsvpro","allocator","analyzer","calculator","collector","columnfilter","counter","extractor","filter","header","mapper","profiler","rowfilter","execute()","execute()","execute()","execute()","execute()","execute()","execute()","has_filter?()","method_missing()","method_missing()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","pivot_each_column()","process()","process()","process()","process()","process_file()","result()","rows()","unstring()","write_result()","write_to()","readme"],"longSearchIndex":["dsl","object","sycsvpro","sycsvpro::allocator","sycsvpro::analyzer","sycsvpro::calculator","sycsvpro::collector","sycsvpro::columnfilter","sycsvpro::counter","sycsvpro::extractor","sycsvpro::filter","sycsvpro::header","sycsvpro::mapper","sycsvpro::profiler","sycsvpro::rowfilter","sycsvpro::allocator#execute()","sycsvpro::calculator#execute()","sycsvpro::collector#execute()","sycsvpro::counter#execute()","sycsvpro::extractor#execute()","sycsvpro::mapper#execute()","sycsvpro::profiler#execute()","sycsvpro::filter#has_filter?()","sycsvpro::calculator#method_missing()","sycsvpro::filter#method_missing()","sycsvpro::allocator::new()","sycsvpro::analyzer::new()","sycsvpro::calculator::new()","sycsvpro::collector::new()","sycsvpro::counter::new()","sycsvpro::extractor::new()","sycsvpro::filter::new()","sycsvpro::header::new()","sycsvpro::mapper::new()","sycsvpro::profiler::new()","sycsvpro::filter#pivot_each_column()","sycsvpro::columnfilter#process()","sycsvpro::filter#process()","sycsvpro::header#process()","sycsvpro::rowfilter#process()","sycsvpro::counter#process_file()","sycsvpro::analyzer#result()","dsl#rows()","dsl#unstring()","sycsvpro::counter#write_result()","dsl#write_to()",""],"info":[["Dsl","","Dsl.html","","<p>Methods to be used in customer specific script files\n"],["Object","","Object.html","",""],["Sycsvpro","","Sycsvpro.html","","<p>Operating csv files\n<p>Operating csv files\n<p>Operating csv files\n"],["Sycsvpro::Allocator","","Sycsvpro/Allocator.html","","<p>Allocates columns to a key column\n"],["Sycsvpro::Analyzer","","Sycsvpro/Analyzer.html","","<p>Analyzes the file structure\n"],["Sycsvpro::Calculator","","Sycsvpro/Calculator.html","","<p>Processes arithmetic operations on columns of a csv file. A column value\nhas to be a number. Possible …\n"],["Sycsvpro::Collector","","Sycsvpro/Collector.html","","<p>Collects values from rows and groups them in categories\n"],["Sycsvpro::ColumnFilter","","Sycsvpro/ColumnFilter.html","","<p>Creates a new column filter\n"],["Sycsvpro::Counter","","Sycsvpro/Counter.html","","<p>Creates a new counter that counts values and uses the values as column\nnames and uses the count as the …\n"],["Sycsvpro::Extractor","","Sycsvpro/Extractor.html","","<p>Extracts rows and columns from a csv file\n"],["Sycsvpro::Filter","","Sycsvpro/Filter.html","","<p>Creates a new filter that can be extended by sub-classes. A sub-class needs\nto override the process method …\n"],["Sycsvpro::Header","","Sycsvpro/Header.html","","<p>Creates a header\n"],["Sycsvpro::Mapper","","Sycsvpro/Mapper.html","","<p>Map values to new values described in a mapping file\n"],["Sycsvpro::Profiler","","Sycsvpro/Profiler.html","","<p>A profiler takes a Ruby script and executes the provided method in the\nscript\n"],["Sycsvpro::RowFilter","","Sycsvpro/RowFilter.html","","<p>Filters rows based on provided patterns\n"],["execute","Sycsvpro::Allocator","Sycsvpro/Allocator.html#method-i-execute","()","<p>Executes the allocator and assigns column values to the key\n"],["execute","Sycsvpro::Calculator","Sycsvpro/Calculator.html#method-i-execute","()","<p>Executes the calculator\n"],["execute","Sycsvpro::Collector","Sycsvpro/Collector.html#method-i-execute","()","<p>Execute the collector\n"],["execute","Sycsvpro::Counter","Sycsvpro/Counter.html#method-i-execute","()","<p>Executes the counter\n"],["execute","Sycsvpro::Extractor","Sycsvpro/Extractor.html#method-i-execute","()","<p>Executes the extractor\n"],["execute","Sycsvpro::Mapper","Sycsvpro/Mapper.html#method-i-execute","()","<p>Executes the mapper\n"],["execute","Sycsvpro::Profiler","Sycsvpro/Profiler.html#method-i-execute","(method)","<p>Executes the provided method in the Ruby script\n"],["has_filter?","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-has_filter-3F","()","<p>Checks whether a filter has been set. Returns true if filter has been set\notherwise false\n"],["method_missing","Sycsvpro::Calculator","Sycsvpro/Calculator.html#method-i-method_missing","(id, *args, &block)","<p>Retrieves the values from a row as the result of a arithmetic operation\n"],["method_missing","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-method_missing","(id, *args, &block)","<p>Creates the filters based on the given patterns\n"],["new","Sycsvpro::Allocator","Sycsvpro/Allocator.html#method-c-new","(options={})","<p>Creates a new allocator. Options are infile, outfile, key, rows and columns\nto allocate to key\n"],["new","Sycsvpro::Analyzer","Sycsvpro/Analyzer.html#method-c-new","(file)","<p>Creates a new analyzer\n"],["new","Sycsvpro::Calculator","Sycsvpro/Calculator.html#method-c-new","(options={})","<p>Creates a new Calculator. Options expects :infile, :outfile, :rows and\n:columns. Optionally a header …\n"],["new","Sycsvpro::Collector","Sycsvpro/Collector.html#method-c-new","(options={})","<p>Creates a new Collector\n"],["new","Sycsvpro::Counter","Sycsvpro/Counter.html#method-c-new","(options={})","<p>Creates a new counter. Takes as attributes infile, outfile, key, rows,\ncols, date-format and indicator …\n"],["new","Sycsvpro::Extractor","Sycsvpro/Extractor.html#method-c-new","(options={})","<p>Creates a new extractor\n"],["new","Sycsvpro::Filter","Sycsvpro/Filter.html#method-c-new","(values, options={})","<p>Creates a new filter\n"],["new","Sycsvpro::Header","Sycsvpro/Header.html#method-c-new","(header)","<p>Create a new header\n"],["new","Sycsvpro::Mapper","Sycsvpro/Mapper.html#method-c-new","(options={})","<p>Creates new mapper\n"],["new","Sycsvpro::Profiler","Sycsvpro/Profiler.html#method-c-new","(pro_file)","<p>Creates a new profiler\n"],["pivot_each_column","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-pivot_each_column","(values=[])","<p>Yields the column value and whether the filter matches the column\n"],["process","Sycsvpro::ColumnFilter","Sycsvpro/ColumnFilter.html#method-i-process","(object, options={})","<p>Processes the filter and returns the values that respect the filter\n"],["process","Sycsvpro::Filter","Sycsvpro/Filter.html#method-i-process","(object, options={})","<p>Processes the filter. Needs to be overridden by the sub-class\n"],["process","Sycsvpro::Header","Sycsvpro/Header.html#method-i-process","(line)","<p>Returns the header\n"],["process","Sycsvpro::RowFilter","Sycsvpro/RowFilter.html#method-i-process","(object, options={})","<p>Processes the filter on the given row\n"],["process_file","Sycsvpro::Counter","Sycsvpro/Counter.html#method-i-process_file","()","<p>Processes the counting on the in file\n"],["result","Sycsvpro::Analyzer","Sycsvpro/Analyzer.html#method-i-result","()","<p>Analyzes the file and returns the result\n"],["rows","Dsl","Dsl.html#method-i-rows","(options={})","<p>Retrieves rows and columns from the file and returns them to the block\nprovided by the caller\n"],["unstring","Dsl","Dsl.html#method-i-unstring","(line)","<p>Remove leading and trailing “ and spaces as well as reducing more than 2\nspaces between words from …\n"],["write_result","Sycsvpro::Counter","Sycsvpro/Counter.html#method-i-write_result","()","<p>Writes the results\n"],["write_to","Dsl","Dsl.html#method-i-write_to","(file)","<p>writes values provided by a block to the given file\n"],["README","","README_rdoc.html","","<p>sycsvpro\n<p>Author &mdash; Pierre Sugar (pierre@sugaryourcoffee.de)\n<p>Copyright &mdash; Copyright © 2014 by Pierre Sugar\n"]]}}
@@ -25,16 +25,26 @@ module Sycsvpro
25
25
  attr_reader :key_values
26
26
  # header of the out file
27
27
  attr_reader :heading
28
+ # Title of the sum row
29
+ attr_reader :sum_title
30
+ # row where to add the sums of the columns of the sum columns
31
+ attr_reader :sum_row
32
+ # sums of the column values
33
+ attr_reader :sums
28
34
 
29
- # Creates a new counter
35
+ # Creates a new counter. Takes as attributes infile, outfile, key, rows, cols, date-format and
36
+ # indicator whether to add a sum row
30
37
  def initialize(options={})
31
38
  @infile = options[:infile]
32
39
  @outfile = options[:outfile]
33
40
  @key_column = options[:key].to_i
34
41
  @row_filter = RowFilter.new(options[:rows])
35
42
  @col_filter = ColumnFilter.new(options[:cols], df: options[:df])
36
- @key_values = {}
43
+ @key_values = {}
37
44
  @heading = []
45
+ @sum_title, @sum_row = options[:sum].split(':') unless options[:sum].nil?
46
+ @sum_row = @sum_row.to_i unless @sum_row.nil?
47
+ @sums = Hash.new(0)
38
48
  end
39
49
 
40
50
  # Executes the counter
@@ -53,6 +63,7 @@ module Sycsvpro
53
63
  result.chomp.split(';').each do |column|
54
64
  heading << column if heading.index(column).nil?
55
65
  key_value[:elements][column] += 1
66
+ sums[column] += 1
56
67
  end
57
68
  end
58
69
  end
@@ -60,9 +71,16 @@ module Sycsvpro
60
71
 
61
72
  # Writes the results
62
73
  def write_result
74
+ sum_line = [sum_title]
75
+ heading.sort.each do |h|
76
+ sum_line << sums[h]
77
+ end
78
+ row = 0;
63
79
  File.open(outfile, 'w') do |out|
80
+ out.puts sum_line.join(';') if row == sum_row ; row += 1
64
81
  out.puts (["key"] + heading.sort).join(';')
65
82
  key_values.each do |k,v|
83
+ out.puts sum_line.join(';') if row == sum_row ; row += 1
66
84
  line = [k]
67
85
  heading.sort.each do |h|
68
86
  line << v[:elements][h]
@@ -1,5 +1,5 @@
1
1
  # Operating csv files
2
2
  module Sycsvpro
3
3
  # Version number of sycsvpro
4
- VERSION = '0.0.4'
4
+ VERSION = '0.0.5'
5
5
  end
@@ -48,6 +48,26 @@ module Sycsvpro
48
48
 
49
49
  end
50
50
 
51
+ it "should add a sum row" do
52
+ counter = Counter.new(infile: @in_file, outfile: @out_file, rows: "1-10",
53
+ cols: "2:<1.1.2013,2:1.1.2013-31.12.2014,2:>31.12.2014", key: "0",
54
+ df: "%d.%m.%Y", sum: "Total:1")
55
+
56
+ counter.execute
57
+
58
+ result = [ "key;1.1.2013-31.12.2014;<1.1.2013;>31.12.2014",
59
+ "Total;2;1;2",
60
+ "Fink;0;0;2",
61
+ "Haas;0;1;0",
62
+ "Gent;1;0;0",
63
+ "Rank;1;0;0" ]
64
+
65
+ File.open(@out_file).each_with_index do |line, index|
66
+ line.chomp.should eq result[index]
67
+ end
68
+
69
+ end
70
+
51
71
  end
52
72
 
53
73
  end
data/sycsvpro.rdoc CHANGED
@@ -7,7 +7,7 @@ SYNOPSIS
7
7
  sycsvpro [global options] command [command options] [arguments...]
8
8
 
9
9
  VERSION
10
- 0.0.1
10
+ 0.0.5
11
11
 
12
12
  GLOBAL OPTIONS
13
13
  -f, --file=FILE - CSV file to operate on (default: none)
@@ -16,14 +16,15 @@ GLOBAL OPTIONS
16
16
  --version - Display the program version
17
17
 
18
18
  COMMANDS
19
- analyze - Analyze the CSV file regarding columns, rows and content
20
- calc - Process math operations on columns
21
- collect - Collect values of specified rows and columns from the file and group them in
22
- categories
23
- count - Counts the occurences of column values. Uses column values as headings with count as
24
- values. Columns with a condition will be added as new columns and the condition will
25
- be set as column name
26
- execute - Executes the code provided in a file
27
- extract - Extract specified rows and columns from the file
28
- help - Shows a list of commands or help for one command
29
- map - Map values in columns to new values
19
+ allocate - Allocate specified columns from the file to a key value
20
+ analyze - Analyze the CSV file regarding columns, rows and content
21
+ calc - Process math operations on columns
22
+ collect - Collect values of specified rows and columns from the file and group them in
23
+ categories
24
+ count - Counts the occurences of column values. Uses column values as headings with count as
25
+ values. Columns with a condition will be added as new columns and the condition will
26
+ be set as column name. Optionally adds a sum row
27
+ execute - Executes the code provided in a file
28
+ extract - Extract specified rows and columns from the file
29
+ help - Shows a list of commands or help for one command
30
+ map - Map values in columns to new values
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sycsvpro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pierre Sugar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-19 00:00:00.000000000 Z
11
+ date: 2014-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake