sycsvpro 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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