sycsvpro 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +4 -1
- data/bin/sycsvpro +8 -2
- data/html/Dsl.html +41 -2
- data/html/Sycsvpro/ColumnFilter.html +6 -1
- data/html/Sycsvpro/ColumnTypeFilter.html +6 -2
- data/html/Sycsvpro/Sorter.html +26 -3
- data/html/created.rid +7 -7
- data/html/js/search_index.js +1 -1
- data/html/table_of_contents.html +39 -34
- data/lib/sycsvpro/column_filter.rb +6 -1
- data/lib/sycsvpro/column_type_filter.rb +6 -2
- data/lib/sycsvpro/dsl.rb +10 -1
- data/lib/sycsvpro/sorter.rb +13 -1
- data/lib/sycsvpro/version.rb +1 -1
- data/spec/sycsvpro/sorter_spec.rb +36 -8
- data/sycsvpro.rdoc +2 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f23ab9c0550c24e05e22e549f754313a15031af
|
4
|
+
data.tar.gz: c24f0803122979415fdbe3091e20bd4dfe2ba8cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64f319161f670be8300684a313a4d91db1a2fd2e60d63249ab1d7d4557b68d028f48aaa657b02c5b687656bc4efad2317aae7b0e9c6551d416e2c0fb02737af8
|
7
|
+
data.tar.gz: 93c49e997231599193d4545e5a1fdc913e3768232df09c02439d2d3ea3c2a37424cafe9eface9c0aa1695686849de077aec0aa68acbc8f53fc287504117626e8
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -10,7 +10,7 @@ Processing of csv files. *sycsvpro* offers following functions
|
|
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
12
|
* arithmetic operations on values of columns
|
13
|
-
* sort rows base on columns
|
13
|
+
* sort rows base on columns (since version 0.0.9)
|
14
14
|
* insert rows to a csv-file (since version 0.0.8)
|
15
15
|
* create or edit a Ruby script
|
16
16
|
* list scripts available optionally with methods (since version 0.0.7)
|
@@ -141,12 +141,15 @@ Sort rows on specified columns as an example sort rows based on customer (string
|
|
141
141
|
|
142
142
|
$ sycsvpro -f in.csv -o out.csv sort -r 2-20 -c s:0,d:5
|
143
143
|
|
144
|
+
customer;machine;control;drive;motor;date;contract;target
|
144
145
|
hello;h2;con123;dri130;mot110;1.02.3012;1
|
145
146
|
hello;h1;con123;dri120;mot100;1.01.3013;1
|
146
147
|
indix;i1;con456;dri130;mot090;5.11.3013;1
|
147
148
|
chiro;c2;con331;dri100;mot130;3.05.3010;1
|
148
149
|
chiro;c1;con333;dri110;mot100;1.10.3011;1
|
149
150
|
|
151
|
+
Sort expects the first non-empty row as the header row. If --headerless switch is set then sort assumes no header being available.
|
152
|
+
|
150
153
|
Insert
|
151
154
|
------
|
152
155
|
Add rows at the bottom or on top of a file. The command below adds the content of the file file-with-rows-to-insert.text on top of the file in.csv and saves it to out.csv
|
data/bin/sycsvpro
CHANGED
@@ -33,6 +33,9 @@ desc 'CSV file to write the result to'
|
|
33
33
|
arg_name 'OUT_FILE'
|
34
34
|
flag [:o, :out]
|
35
35
|
|
36
|
+
desc 'Silent progress doesn\'t show progress indicator'
|
37
|
+
switch [:s, :silent]
|
38
|
+
|
36
39
|
desc 'Analyze the CSV file regarding columns, rows and content'
|
37
40
|
command :analyze do |c|
|
38
41
|
|
@@ -235,13 +238,16 @@ command :sort do |c|
|
|
235
238
|
c.default_value '%Y-%m-%d'
|
236
239
|
c.flag [:df]
|
237
240
|
|
241
|
+
c.desc 'File doesn\'t contain a header'
|
242
|
+
c.switch [:h, :headerless]
|
243
|
+
|
238
244
|
c.desc 'Sort order descending - default ascending'
|
239
245
|
c.switch [:d, :desc]
|
240
246
|
|
241
247
|
c.action do |global_options,options,args|
|
242
248
|
sorter = Sycsvpro::Sorter.new(infile: global_options[:f], outfile: global_options[:o],
|
243
249
|
rows: options[:r], cols: options[:c], df: options[:df],
|
244
|
-
desc: options[:d])
|
250
|
+
headerless: options[:h], desc: options[:d])
|
245
251
|
print 'Sorting...'
|
246
252
|
sorter.execute
|
247
253
|
print 'done'
|
@@ -381,7 +387,7 @@ pre do |global,command,options,args|
|
|
381
387
|
|
382
388
|
@stats = Stats.new(command.name, Time.now, Time.now, count)
|
383
389
|
|
384
|
-
unless command.name == :edit
|
390
|
+
unless command.name == :edit or global[:s]
|
385
391
|
progress = Thread.new do
|
386
392
|
sleep 3
|
387
393
|
while true
|
data/html/Dsl.html
CHANGED
@@ -68,6 +68,8 @@
|
|
68
68
|
|
69
69
|
<li ><a href="#method-i-rows">#rows</a>
|
70
70
|
|
71
|
+
<li ><a href="#method-i-str2utf8">#str2utf8</a>
|
72
|
+
|
71
73
|
<li ><a href="#method-i-unstring">#unstring</a>
|
72
74
|
|
73
75
|
<li ><a href="#method-i-write_to">#write_to</a>
|
@@ -151,6 +153,39 @@ provided by the caller</p>
|
|
151
153
|
|
152
154
|
|
153
155
|
|
156
|
+
</div>
|
157
|
+
|
158
|
+
|
159
|
+
<div id="method-i-str2utf8" class="method-detail ">
|
160
|
+
|
161
|
+
<div class="method-heading">
|
162
|
+
<span class="method-name">str2utf8</span><span
|
163
|
+
class="method-args">(str)</span>
|
164
|
+
|
165
|
+
<span class="method-click-advice">click to toggle source</span>
|
166
|
+
|
167
|
+
</div>
|
168
|
+
|
169
|
+
|
170
|
+
<div class="method-description">
|
171
|
+
|
172
|
+
<p>Remove non-UTF chars from string</p>
|
173
|
+
|
174
|
+
|
175
|
+
|
176
|
+
|
177
|
+
<div class="method-source-code" id="str2utf8-source">
|
178
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/dsl.rb, line 41</span>
|
179
|
+
<span class="ruby-keyword">def</span> <span class="ruby-identifier">str2utf8</span>(<span class="ruby-identifier">str</span>)
|
180
|
+
<span class="ruby-identifier">str</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-string">'UTF-8'</span>, <span class="ruby-string">'binary'</span>, <span class="ruby-identifier">invalid</span><span class="ruby-operator">:</span> <span class="ruby-value">:replace</span>, <span class="ruby-keyword">undef</span><span class="ruby-operator">:</span> <span class="ruby-value">:replace</span>, <span class="ruby-identifier">replace</span><span class="ruby-operator">:</span> <span class="ruby-string">''</span>)
|
181
|
+
<span class="ruby-keyword">end</span></pre>
|
182
|
+
</div>
|
183
|
+
|
184
|
+
</div>
|
185
|
+
|
186
|
+
|
187
|
+
|
188
|
+
|
154
189
|
</div>
|
155
190
|
|
156
191
|
|
@@ -168,8 +203,8 @@ provided by the caller</p>
|
|
168
203
|
<div class="method-description">
|
169
204
|
|
170
205
|
<p>Remove leading and trailing “ and spaces as well as reducing more than 2
|
171
|
-
spaces between words from csv values
|
172
|
-
|
206
|
+
spaces between words from csv values. Replac ; with , from values as ; is
|
207
|
+
used as value separator</p>
|
173
208
|
|
174
209
|
|
175
210
|
|
@@ -177,6 +212,10 @@ ag;c;d;e</p>
|
|
177
212
|
<div class="method-source-code" id="unstring-source">
|
178
213
|
<pre><span class="ruby-comment"># File lib/sycsvpro/dsl.rb, line 32</span>
|
179
214
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">unstring</span>(<span class="ruby-identifier">line</span>)
|
215
|
+
<span class="ruby-identifier">line</span> = <span class="ruby-identifier">str2utf8</span>(<span class="ruby-identifier">line</span>)
|
216
|
+
<span class="ruby-identifier">line</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp">/(?<=^"|;")[^"]+(?=;)+[^"]*|;+[^"](?=";|"$)/</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">value</span><span class="ruby-operator">|</span>
|
217
|
+
<span class="ruby-identifier">line</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">value</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-string">';'</span>, <span class="ruby-string">','</span>))
|
218
|
+
<span class="ruby-keyword">end</span>
|
180
219
|
<span class="ruby-identifier">line</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/(?<=^|;)\s*"?\s*|\s*"?\s*(?=;|$)/</span>, <span class="ruby-string">""</span>).<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\s{2,}/</span>, <span class="ruby-string">" "</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">nil?</span>
|
181
220
|
<span class="ruby-keyword">end</span></pre>
|
182
221
|
</div>
|
@@ -134,12 +134,17 @@
|
|
134
134
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">process</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">options</span>={})
|
135
135
|
<span class="ruby-keyword">return</span> <span class="ruby-keyword">nil</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">or</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">empty?</span>
|
136
136
|
<span class="ruby-identifier">object</span> = <span class="ruby-identifier">object</span>.<span class="ruby-identifier">encode</span>(<span class="ruby-string">'UTF-8'</span>, <span class="ruby-string">'binary'</span>, <span class="ruby-identifier">invalid</span><span class="ruby-operator">:</span> <span class="ruby-value">:replace</span>, <span class="ruby-keyword">undef</span><span class="ruby-operator">:</span> <span class="ruby-value">:replace</span>, <span class="ruby-identifier">replace</span><span class="ruby-operator">:</span> <span class="ruby-string">''</span>)
|
137
|
+
<span class="ruby-identifier">object</span> <span class="ruby-operator">+=</span> <span class="ruby-string">" "</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">object</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/;$/</span>
|
137
138
|
<span class="ruby-keyword">return</span> <span class="ruby-identifier">object</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">filter</span>.<span class="ruby-identifier">empty?</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">pivot</span>.<span class="ruby-identifier">empty?</span>
|
138
139
|
<span class="ruby-identifier">filtered</span> = <span class="ruby-identifier">object</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">';'</span>).<span class="ruby-identifier">values_at</span>(<span class="ruby-operator">*</span><span class="ruby-identifier">filter</span>.<span class="ruby-identifier">flatten</span>.<span class="ruby-identifier">uniq</span>)
|
139
140
|
<span class="ruby-identifier">pivot_each_column</span>(<span class="ruby-identifier">object</span>.<span class="ruby-identifier">split</span>(<span class="ruby-string">';'</span>)) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">column</span>, <span class="ruby-identifier">match</span><span class="ruby-operator">|</span>
|
140
141
|
<span class="ruby-identifier">filtered</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">column</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">match</span>
|
141
142
|
<span class="ruby-keyword">end</span>
|
142
|
-
<span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">
|
143
|
+
<span class="ruby-keyword">if</span> <span class="ruby-operator">!</span><span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">and</span> <span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">last</span>.<span class="ruby-identifier">empty?</span>
|
144
|
+
<span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">';'</span>) <span class="ruby-operator">+</span> <span class="ruby-string">" "</span>
|
145
|
+
<span class="ruby-keyword">else</span>
|
146
|
+
<span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">join</span>(<span class="ruby-string">';'</span>)
|
147
|
+
<span class="ruby-keyword">end</span>
|
143
148
|
<span class="ruby-keyword">end</span></pre>
|
144
149
|
</div>
|
145
150
|
|
@@ -152,10 +152,14 @@
|
|
152
152
|
<span class="ruby-keyword">end</span>
|
153
153
|
<span class="ruby-identifier">values</span>[<span class="ruby-identifier">index</span>] = <span class="ruby-identifier">number_value</span>
|
154
154
|
<span class="ruby-keyword">elsif</span> <span class="ruby-identifier">types</span>[<span class="ruby-identifier">index</span>] <span class="ruby-operator">==</span> <span class="ruby-string">'d'</span>
|
155
|
-
<span class="ruby-keyword">if</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">empty?</span>
|
155
|
+
<span class="ruby-keyword">if</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">empty?</span>
|
156
156
|
<span class="ruby-identifier">date</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">strptime</span>(<span class="ruby-string">'9999-9-9'</span>, <span class="ruby-string">'%Y-%m-%d'</span>)
|
157
157
|
<span class="ruby-keyword">else</span>
|
158
|
-
<span class="ruby-
|
158
|
+
<span class="ruby-keyword">begin</span>
|
159
|
+
<span class="ruby-identifier">date</span> = <span class="ruby-constant">Date</span>.<span class="ruby-identifier">strptime</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">date_format</span>)
|
160
|
+
<span class="ruby-keyword">rescue</span>
|
161
|
+
<span class="ruby-identifier">puts</span> <span class="ruby-node">"Error #{value}, #{index}"</span>
|
162
|
+
<span class="ruby-keyword">end</span>
|
159
163
|
<span class="ruby-keyword">end</span>
|
160
164
|
<span class="ruby-identifier">values</span>[<span class="ruby-identifier">index</span>] = <span class="ruby-identifier">date</span>
|
161
165
|
<span class="ruby-keyword">end</span>
|
data/html/Sycsvpro/Sorter.html
CHANGED
@@ -148,6 +148,19 @@
|
|
148
148
|
</div>
|
149
149
|
</div>
|
150
150
|
|
151
|
+
<div id="attribute-i-headerless" class="method-detail">
|
152
|
+
<div class="method-heading attribute-method-heading">
|
153
|
+
<span class="method-name">headerless</span><span
|
154
|
+
class="attribute-access-type">[R]</span>
|
155
|
+
</div>
|
156
|
+
|
157
|
+
<div class="method-description">
|
158
|
+
|
159
|
+
<p>file doesn't contain a header</p>
|
160
|
+
|
161
|
+
</div>
|
162
|
+
</div>
|
163
|
+
|
151
164
|
<div id="attribute-i-infile" class="method-detail">
|
152
165
|
<div class="method-heading attribute-method-heading">
|
153
166
|
<span class="method-name">infile</span><span
|
@@ -225,16 +238,17 @@
|
|
225
238
|
|
226
239
|
<p>Creates a <a href="Sorter.html">Sorter</a> and takes as options infile,
|
227
240
|
outfile, rows, cols including types and a date format for the date columns
|
228
|
-
to sort (optional)
|
241
|
+
to sort (optional).</p>
|
229
242
|
|
230
243
|
|
231
244
|
|
232
245
|
|
233
246
|
<div class="method-source-code" id="new-source">
|
234
|
-
<pre><span class="ruby-comment"># File lib/sycsvpro/sorter.rb, line
|
247
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/sorter.rb, line 30</span>
|
235
248
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span>={})
|
236
249
|
<span class="ruby-ivar">@infile</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:infile</span>]
|
237
250
|
<span class="ruby-ivar">@outfile</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:outfile</span>]
|
251
|
+
<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>
|
238
252
|
<span class="ruby-ivar">@desc</span> = <span class="ruby-identifier">options</span>[<span class="ruby-value">:desc</span>] <span class="ruby-operator">||</span> <span class="ruby-keyword">false</span>
|
239
253
|
<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>])
|
240
254
|
<span class="ruby-ivar">@col_type_filter</span> = <span class="ruby-constant">ColumnTypeFilter</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>])
|
@@ -277,10 +291,15 @@ to sort (optional)</p>
|
|
277
291
|
|
278
292
|
|
279
293
|
<div class="method-source-code" id="execute-source">
|
280
|
-
<pre><span class="ruby-comment"># File lib/sycsvpro/sorter.rb, line
|
294
|
+
<pre><span class="ruby-comment"># File lib/sycsvpro/sorter.rb, line 41</span>
|
281
295
|
<span class="ruby-keyword">def</span> <span class="ruby-identifier">execute</span>
|
282
296
|
<span class="ruby-identifier">rows</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">readlines</span>(<span class="ruby-identifier">infile</span>)
|
283
297
|
|
298
|
+
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">headerless</span>
|
299
|
+
<span class="ruby-identifier">header</span> = <span class="ruby-string">""</span>
|
300
|
+
<span class="ruby-identifier">header</span> = <span class="ruby-identifier">rows</span>.<span class="ruby-identifier">shift</span> <span class="ruby-keyword">while</span> <span class="ruby-identifier">header</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">strip</span>.<span class="ruby-identifier">empty?</span>
|
301
|
+
<span class="ruby-keyword">end</span>
|
302
|
+
|
284
303
|
<span class="ruby-identifier">rows</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>
|
285
304
|
<span class="ruby-identifier">filtered</span> = <span class="ruby-identifier">col_type_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">row</span><span class="ruby-operator">:</span> <span class="ruby-identifier">index</span>))
|
286
305
|
<span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">filtered</span>.<span class="ruby-identifier">nil?</span>
|
@@ -288,6 +307,10 @@ to sort (optional)</p>
|
|
288
307
|
<span class="ruby-keyword">end</span>
|
289
308
|
|
290
309
|
<span class="ruby-constant">File</span>.<span class="ruby-identifier">open</span>(<span class="ruby-identifier">outfile</span>, <span class="ruby-string">'w'</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">out</span><span class="ruby-operator">|</span>
|
310
|
+
<span class="ruby-keyword">unless</span> <span class="ruby-identifier">headerless</span>
|
311
|
+
<span class="ruby-identifier">out</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">header</span>
|
312
|
+
<span class="ruby-keyword">end</span>
|
313
|
+
|
291
314
|
<span class="ruby-keyword">if</span> <span class="ruby-identifier">desc</span>
|
292
315
|
<span class="ruby-identifier">sorted_rows</span>.<span class="ruby-identifier">compact</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">reverse</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">row</span><span class="ruby-operator">|</span>
|
293
316
|
<span class="ruby-identifier">out</span>.<span class="ruby-identifier">puts</span> <span class="ruby-identifier">unstring</span>(<span class="ruby-identifier">rows</span>[<span class="ruby-identifier">row</span>.<span class="ruby-identifier">last</span>])
|
data/html/created.rid
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
|
1
|
+
Sun, 02 Mar 2014 21:21:05 +0100
|
2
2
|
README.rdoc Sun, 23 Feb 2014 19:23:16 +0100
|
3
3
|
lib/sycsvpro.rb Wed, 26 Feb 2014 20:27:40 +0100
|
4
4
|
lib/sycsvpro/allocator.rb Wed, 19 Feb 2014 20:34:28 +0100
|
5
5
|
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
|
-
lib/sycsvpro/column_filter.rb
|
9
|
-
lib/sycsvpro/column_type_filter.rb
|
8
|
+
lib/sycsvpro/column_filter.rb Fri, 28 Feb 2014 08:24:47 +0100
|
9
|
+
lib/sycsvpro/column_type_filter.rb Fri, 28 Feb 2014 18:17:46 +0100
|
10
10
|
lib/sycsvpro/counter.rb Fri, 21 Feb 2014 21:11:49 +0100
|
11
|
-
lib/sycsvpro/dsl.rb
|
11
|
+
lib/sycsvpro/dsl.rb Sun, 02 Mar 2014 17:59:05 +0100
|
12
12
|
lib/sycsvpro/extractor.rb Sat, 22 Feb 2014 17:58:18 +0100
|
13
13
|
lib/sycsvpro/filter.rb Tue, 25 Feb 2014 21:18:25 +0100
|
14
14
|
lib/sycsvpro/header.rb Tue, 18 Feb 2014 19:50:26 +0100
|
@@ -18,6 +18,6 @@ lib/sycsvpro/profiler.rb Sun, 16 Feb 2014 21:31:39 +0100
|
|
18
18
|
lib/sycsvpro/row_filter.rb Tue, 18 Feb 2014 19:45:25 +0100
|
19
19
|
lib/sycsvpro/script_creator.rb Sun, 23 Feb 2014 20:35:21 +0100
|
20
20
|
lib/sycsvpro/script_list.rb Sun, 23 Feb 2014 21:03:22 +0100
|
21
|
-
lib/sycsvpro/sorter.rb
|
22
|
-
lib/sycsvpro/version.rb
|
23
|
-
bin/sycsvpro
|
21
|
+
lib/sycsvpro/sorter.rb Sun, 02 Mar 2014 21:07:30 +0100
|
22
|
+
lib/sycsvpro/version.rb Fri, 28 Feb 2014 08:30:53 +0100
|
23
|
+
bin/sycsvpro Sun, 02 Mar 2014 20:54:54 +0100
|
data/html/js/search_index.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var search_data = {"index":{"searchIndex":["dsl","object","sycsvpro","allocator","analyzer","calculator","collector","columnfilter","columntypefilter","counter","extractor","filter","header","inserter","mapper","profiler","rowfilter","scriptcreator","scriptlist","sorter","execute()","execute()","execute()","execute()","execute()","execute()","execute()","execute()","execute()","execute()","has_filter?()","method_missing()","method_missing()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","pivot_each_column()","process()","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::columntypefilter","sycsvpro::counter","sycsvpro::extractor","sycsvpro::filter","sycsvpro::header","sycsvpro::inserter","sycsvpro::mapper","sycsvpro::profiler","sycsvpro::rowfilter","sycsvpro::scriptcreator","sycsvpro::scriptlist","sycsvpro::sorter","sycsvpro::allocator#execute()","sycsvpro::calculator#execute()","sycsvpro::collector#execute()","sycsvpro::counter#execute()","sycsvpro::extractor#execute()","sycsvpro::inserter#execute()","sycsvpro::mapper#execute()","sycsvpro::profiler#execute()","sycsvpro::scriptlist#execute()","sycsvpro::sorter#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::inserter::new()","sycsvpro::mapper::new()","sycsvpro::profiler::new()","sycsvpro::scriptcreator::new()","sycsvpro::scriptlist::new()","sycsvpro::sorter::new()","sycsvpro::filter#pivot_each_column()","sycsvpro::columnfilter#process()","sycsvpro::columntypefilter#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::ColumnTypeFilter","","Sycsvpro/ColumnTypeFilter.html","","<p>Create a filter based on a colum and its type\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::Inserter","","Sycsvpro/Inserter.html","","<p>Insert a text file into another textfile at a specified position\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"],["Sycsvpro::ScriptCreator","","Sycsvpro/ScriptCreator.html","","<p>Creates a ruby script scaffold\n"],["Sycsvpro::ScriptList","","Sycsvpro/ScriptList.html","","<p>Lists the contents of the script directory. Optionally listing a specific\nscript file and also optionally …\n"],["Sycsvpro::Sorter","","Sycsvpro/Sorter.html","","<p>Sorts an input file based on a column sort filter\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::Inserter","Sycsvpro/Inserter.html#method-i-execute","()","<p>Inserts the content of the insert-file at the specified positions (top or\nbottom)\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"],["execute","Sycsvpro::ScriptList","Sycsvpro/ScriptList.html#method-i-execute","()","<p>Retrieves the information about scripts and methods from the script\ndirectory\n"],["execute","Sycsvpro::Sorter","Sycsvpro/Sorter.html#method-i-execute","()","<p>Sorts the data of the infile\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::Inserter","Sycsvpro/Inserter.html#method-c-new","(options={})","<p>Creates an Inserter and takes options infile, outfile, insert-file and\nposition where to insert the insert-file …\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"],["new","Sycsvpro::ScriptCreator","Sycsvpro/ScriptCreator.html#method-c-new","(options={})","<p>Creates a new ScriptCreator\n"],["new","Sycsvpro::ScriptList","Sycsvpro/ScriptList.html#method-c-new","(options={})","<p>Creates a new ScriptList. Takes params script_dir, script_file and\nshow_methods\n"],["new","Sycsvpro::Sorter","Sycsvpro/Sorter.html#method-c-new","(options={})","<p>Creates a Sorter and takes as options infile, outfile, rows, cols including\ntypes and a date format for …\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::ColumnTypeFilter","Sycsvpro/ColumnTypeFilter.html#method-i-process","(object, options={})","<p>Processes the filter and returns the filtered columns\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 — Pierre Sugar (pierre@sugaryourcoffee.de)\n<p>Copyright — Copyright © 2014 by Pierre Sugar\n"]]}}
|
1
|
+
var search_data = {"index":{"searchIndex":["dsl","object","sycsvpro","allocator","analyzer","calculator","collector","columnfilter","columntypefilter","counter","extractor","filter","header","inserter","mapper","profiler","rowfilter","scriptcreator","scriptlist","sorter","execute()","execute()","execute()","execute()","execute()","execute()","execute()","execute()","execute()","execute()","has_filter?()","method_missing()","method_missing()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","new()","pivot_each_column()","process()","process()","process()","process()","process()","process_file()","result()","rows()","str2utf8()","unstring()","write_result()","write_to()","readme"],"longSearchIndex":["dsl","object","sycsvpro","sycsvpro::allocator","sycsvpro::analyzer","sycsvpro::calculator","sycsvpro::collector","sycsvpro::columnfilter","sycsvpro::columntypefilter","sycsvpro::counter","sycsvpro::extractor","sycsvpro::filter","sycsvpro::header","sycsvpro::inserter","sycsvpro::mapper","sycsvpro::profiler","sycsvpro::rowfilter","sycsvpro::scriptcreator","sycsvpro::scriptlist","sycsvpro::sorter","sycsvpro::allocator#execute()","sycsvpro::calculator#execute()","sycsvpro::collector#execute()","sycsvpro::counter#execute()","sycsvpro::extractor#execute()","sycsvpro::inserter#execute()","sycsvpro::mapper#execute()","sycsvpro::profiler#execute()","sycsvpro::scriptlist#execute()","sycsvpro::sorter#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::inserter::new()","sycsvpro::mapper::new()","sycsvpro::profiler::new()","sycsvpro::scriptcreator::new()","sycsvpro::scriptlist::new()","sycsvpro::sorter::new()","sycsvpro::filter#pivot_each_column()","sycsvpro::columnfilter#process()","sycsvpro::columntypefilter#process()","sycsvpro::filter#process()","sycsvpro::header#process()","sycsvpro::rowfilter#process()","sycsvpro::counter#process_file()","sycsvpro::analyzer#result()","dsl#rows()","dsl#str2utf8()","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::ColumnTypeFilter","","Sycsvpro/ColumnTypeFilter.html","","<p>Create a filter based on a colum and its type\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::Inserter","","Sycsvpro/Inserter.html","","<p>Insert a text file into another textfile at a specified position\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"],["Sycsvpro::ScriptCreator","","Sycsvpro/ScriptCreator.html","","<p>Creates a ruby script scaffold\n"],["Sycsvpro::ScriptList","","Sycsvpro/ScriptList.html","","<p>Lists the contents of the script directory. Optionally listing a specific\nscript file and also optionally …\n"],["Sycsvpro::Sorter","","Sycsvpro/Sorter.html","","<p>Sorts an input file based on a column sort filter\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::Inserter","Sycsvpro/Inserter.html#method-i-execute","()","<p>Inserts the content of the insert-file at the specified positions (top or\nbottom)\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"],["execute","Sycsvpro::ScriptList","Sycsvpro/ScriptList.html#method-i-execute","()","<p>Retrieves the information about scripts and methods from the script\ndirectory\n"],["execute","Sycsvpro::Sorter","Sycsvpro/Sorter.html#method-i-execute","()","<p>Sorts the data of the infile\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::Inserter","Sycsvpro/Inserter.html#method-c-new","(options={})","<p>Creates an Inserter and takes options infile, outfile, insert-file and\nposition where to insert the insert-file …\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"],["new","Sycsvpro::ScriptCreator","Sycsvpro/ScriptCreator.html#method-c-new","(options={})","<p>Creates a new ScriptCreator\n"],["new","Sycsvpro::ScriptList","Sycsvpro/ScriptList.html#method-c-new","(options={})","<p>Creates a new ScriptList. Takes params script_dir, script_file and\nshow_methods\n"],["new","Sycsvpro::Sorter","Sycsvpro/Sorter.html#method-c-new","(options={})","<p>Creates a Sorter and takes as options infile, outfile, rows, cols including\ntypes and a date format for …\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::ColumnTypeFilter","Sycsvpro/ColumnTypeFilter.html#method-i-process","(object, options={})","<p>Processes the filter and returns the filtered columns\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"],["str2utf8","Dsl","Dsl.html#method-i-str2utf8","(str)","<p>Remove non-UTF chars from string\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 — Pierre Sugar (pierre@sugaryourcoffee.de)\n<p>Copyright — Copyright © 2014 by Pierre Sugar\n"]]}}
|
data/html/table_of_contents.html
CHANGED
@@ -114,9 +114,9 @@
|
|
114
114
|
<span class="container">Sycsvpro::Allocator</span>
|
115
115
|
|
116
116
|
<li class="method">
|
117
|
-
<a href="Sycsvpro/
|
117
|
+
<a href="Sycsvpro/Mapper.html#method-c-new">::new</a>
|
118
118
|
—
|
119
|
-
<span class="container">Sycsvpro::
|
119
|
+
<span class="container">Sycsvpro::Mapper</span>
|
120
120
|
|
121
121
|
<li class="method">
|
122
122
|
<a href="Sycsvpro/Analyzer.html#method-c-new">::new</a>
|
@@ -124,9 +124,9 @@
|
|
124
124
|
<span class="container">Sycsvpro::Analyzer</span>
|
125
125
|
|
126
126
|
<li class="method">
|
127
|
-
<a href="Sycsvpro/
|
127
|
+
<a href="Sycsvpro/Inserter.html#method-c-new">::new</a>
|
128
128
|
—
|
129
|
-
<span class="container">Sycsvpro::
|
129
|
+
<span class="container">Sycsvpro::Inserter</span>
|
130
130
|
|
131
131
|
<li class="method">
|
132
132
|
<a href="Sycsvpro/Calculator.html#method-c-new">::new</a>
|
@@ -134,9 +134,9 @@
|
|
134
134
|
<span class="container">Sycsvpro::Calculator</span>
|
135
135
|
|
136
136
|
<li class="method">
|
137
|
-
<a href="Sycsvpro/
|
137
|
+
<a href="Sycsvpro/Profiler.html#method-c-new">::new</a>
|
138
138
|
—
|
139
|
-
<span class="container">Sycsvpro::
|
139
|
+
<span class="container">Sycsvpro::Profiler</span>
|
140
140
|
|
141
141
|
<li class="method">
|
142
142
|
<a href="Sycsvpro/Header.html#method-c-new">::new</a>
|
@@ -148,11 +148,6 @@
|
|
148
148
|
—
|
149
149
|
<span class="container">Sycsvpro::Collector</span>
|
150
150
|
|
151
|
-
<li class="method">
|
152
|
-
<a href="Sycsvpro/ScriptList.html#method-c-new">::new</a>
|
153
|
-
—
|
154
|
-
<span class="container">Sycsvpro::ScriptList</span>
|
155
|
-
|
156
151
|
<li class="method">
|
157
152
|
<a href="Sycsvpro/Filter.html#method-c-new">::new</a>
|
158
153
|
—
|
@@ -164,14 +159,14 @@
|
|
164
159
|
<span class="container">Sycsvpro::Sorter</span>
|
165
160
|
|
166
161
|
<li class="method">
|
167
|
-
<a href="Sycsvpro/
|
162
|
+
<a href="Sycsvpro/Extractor.html#method-c-new">::new</a>
|
168
163
|
—
|
169
|
-
<span class="container">Sycsvpro::
|
164
|
+
<span class="container">Sycsvpro::Extractor</span>
|
170
165
|
|
171
166
|
<li class="method">
|
172
|
-
<a href="Sycsvpro/
|
167
|
+
<a href="Sycsvpro/Counter.html#method-c-new">::new</a>
|
173
168
|
—
|
174
|
-
<span class="container">Sycsvpro::
|
169
|
+
<span class="container">Sycsvpro::Counter</span>
|
175
170
|
|
176
171
|
<li class="method">
|
177
172
|
<a href="Sycsvpro/ScriptCreator.html#method-c-new">::new</a>
|
@@ -179,7 +174,7 @@
|
|
179
174
|
<span class="container">Sycsvpro::ScriptCreator</span>
|
180
175
|
|
181
176
|
<li class="method">
|
182
|
-
<a href="Sycsvpro/ScriptList.html#method-
|
177
|
+
<a href="Sycsvpro/ScriptList.html#method-c-new">::new</a>
|
183
178
|
—
|
184
179
|
<span class="container">Sycsvpro::ScriptList</span>
|
185
180
|
|
@@ -189,24 +184,29 @@
|
|
189
184
|
<span class="container">Sycsvpro::Counter</span>
|
190
185
|
|
191
186
|
<li class="method">
|
192
|
-
<a href="Sycsvpro/
|
187
|
+
<a href="Sycsvpro/ScriptList.html#method-i-execute">#execute</a>
|
193
188
|
—
|
194
|
-
<span class="container">Sycsvpro::
|
189
|
+
<span class="container">Sycsvpro::ScriptList</span>
|
195
190
|
|
196
191
|
<li class="method">
|
197
|
-
<a href="Sycsvpro/
|
192
|
+
<a href="Sycsvpro/Extractor.html#method-i-execute">#execute</a>
|
198
193
|
—
|
199
|
-
<span class="container">Sycsvpro::
|
194
|
+
<span class="container">Sycsvpro::Extractor</span>
|
200
195
|
|
201
196
|
<li class="method">
|
202
|
-
<a href="Sycsvpro/
|
197
|
+
<a href="Sycsvpro/Collector.html#method-i-execute">#execute</a>
|
203
198
|
—
|
204
|
-
<span class="container">Sycsvpro::
|
199
|
+
<span class="container">Sycsvpro::Collector</span>
|
205
200
|
|
206
201
|
<li class="method">
|
207
|
-
<a href="Sycsvpro/
|
202
|
+
<a href="Sycsvpro/Allocator.html#method-i-execute">#execute</a>
|
208
203
|
—
|
209
|
-
<span class="container">Sycsvpro::
|
204
|
+
<span class="container">Sycsvpro::Allocator</span>
|
205
|
+
|
206
|
+
<li class="method">
|
207
|
+
<a href="Sycsvpro/Profiler.html#method-i-execute">#execute</a>
|
208
|
+
—
|
209
|
+
<span class="container">Sycsvpro::Profiler</span>
|
210
210
|
|
211
211
|
<li class="method">
|
212
212
|
<a href="Sycsvpro/Sorter.html#method-i-execute">#execute</a>
|
@@ -224,9 +224,9 @@
|
|
224
224
|
<span class="container">Sycsvpro::Calculator</span>
|
225
225
|
|
226
226
|
<li class="method">
|
227
|
-
<a href="Sycsvpro/
|
227
|
+
<a href="Sycsvpro/Mapper.html#method-i-execute">#execute</a>
|
228
228
|
—
|
229
|
-
<span class="container">Sycsvpro::
|
229
|
+
<span class="container">Sycsvpro::Mapper</span>
|
230
230
|
|
231
231
|
<li class="method">
|
232
232
|
<a href="Sycsvpro/Filter.html#method-i-has_filter-3F">#has_filter?</a>
|
@@ -249,14 +249,14 @@
|
|
249
249
|
<span class="container">Sycsvpro::Filter</span>
|
250
250
|
|
251
251
|
<li class="method">
|
252
|
-
<a href="Sycsvpro/
|
252
|
+
<a href="Sycsvpro/Header.html#method-i-process">#process</a>
|
253
253
|
—
|
254
|
-
<span class="container">Sycsvpro::
|
254
|
+
<span class="container">Sycsvpro::Header</span>
|
255
255
|
|
256
256
|
<li class="method">
|
257
|
-
<a href="Sycsvpro/
|
257
|
+
<a href="Sycsvpro/Filter.html#method-i-process">#process</a>
|
258
258
|
—
|
259
|
-
<span class="container">Sycsvpro::
|
259
|
+
<span class="container">Sycsvpro::Filter</span>
|
260
260
|
|
261
261
|
<li class="method">
|
262
262
|
<a href="Sycsvpro/RowFilter.html#method-i-process">#process</a>
|
@@ -264,14 +264,14 @@
|
|
264
264
|
<span class="container">Sycsvpro::RowFilter</span>
|
265
265
|
|
266
266
|
<li class="method">
|
267
|
-
<a href="Sycsvpro/
|
267
|
+
<a href="Sycsvpro/ColumnTypeFilter.html#method-i-process">#process</a>
|
268
268
|
—
|
269
|
-
<span class="container">Sycsvpro::
|
269
|
+
<span class="container">Sycsvpro::ColumnTypeFilter</span>
|
270
270
|
|
271
271
|
<li class="method">
|
272
|
-
<a href="Sycsvpro/
|
272
|
+
<a href="Sycsvpro/ColumnFilter.html#method-i-process">#process</a>
|
273
273
|
—
|
274
|
-
<span class="container">Sycsvpro::
|
274
|
+
<span class="container">Sycsvpro::ColumnFilter</span>
|
275
275
|
|
276
276
|
<li class="method">
|
277
277
|
<a href="Sycsvpro/Counter.html#method-i-process_file">#process_file</a>
|
@@ -288,6 +288,11 @@
|
|
288
288
|
—
|
289
289
|
<span class="container">Dsl</span>
|
290
290
|
|
291
|
+
<li class="method">
|
292
|
+
<a href="Dsl.html#method-i-str2utf8">#str2utf8</a>
|
293
|
+
—
|
294
|
+
<span class="container">Dsl</span>
|
295
|
+
|
291
296
|
<li class="method">
|
292
297
|
<a href="Dsl.html#method-i-unstring">#unstring</a>
|
293
298
|
—
|
@@ -10,12 +10,17 @@ module Sycsvpro
|
|
10
10
|
def process(object, options={})
|
11
11
|
return nil if object.nil? or object.empty?
|
12
12
|
object = object.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
13
|
+
object += " " if object =~ /;$/
|
13
14
|
return object if filter.empty? and pivot.empty?
|
14
15
|
filtered = object.split(';').values_at(*filter.flatten.uniq)
|
15
16
|
pivot_each_column(object.split(';')) do |column, match|
|
16
17
|
filtered << column if match
|
17
18
|
end
|
18
|
-
filtered.
|
19
|
+
if !filtered.last.nil? and filtered.last.empty?
|
20
|
+
filtered.compact.join(';') + " "
|
21
|
+
else
|
22
|
+
filtered.compact.join(';')
|
23
|
+
end
|
19
24
|
end
|
20
25
|
|
21
26
|
end
|
@@ -21,10 +21,14 @@ module Sycsvpro
|
|
21
21
|
end
|
22
22
|
values[index] = number_value
|
23
23
|
elsif types[index] == 'd'
|
24
|
-
if value.empty?
|
24
|
+
if value.strip.empty?
|
25
25
|
date = Date.strptime('9999-9-9', '%Y-%m-%d')
|
26
26
|
else
|
27
|
-
|
27
|
+
begin
|
28
|
+
date = Date.strptime(value, date_format)
|
29
|
+
rescue
|
30
|
+
puts "Error #{value}, #{index}"
|
31
|
+
end
|
28
32
|
end
|
29
33
|
values[index] = date
|
30
34
|
end
|
data/lib/sycsvpro/dsl.rb
CHANGED
@@ -28,11 +28,20 @@ module Dsl
|
|
28
28
|
end
|
29
29
|
|
30
30
|
# Remove leading and trailing " and spaces as well as reducing more than 2 spaces between words
|
31
|
-
# from csv values
|
31
|
+
# from csv values. Replac ; with , from values as ; is used as value separator
|
32
32
|
def unstring(line)
|
33
|
+
line = str2utf8(line)
|
34
|
+
line.scan(/(?<=^"|;")[^"]+(?=;)+[^"]*|;+[^"](?=";|"$)/).each do |value|
|
35
|
+
line = line.gsub(value, value.gsub(';', ','))
|
36
|
+
end
|
33
37
|
line.gsub(/(?<=^|;)\s*"?\s*|\s*"?\s*(?=;|$)/, "").gsub(/\s{2,}/, " ") unless line.nil?
|
34
38
|
end
|
35
39
|
|
40
|
+
# Remove non-UTF chars from string
|
41
|
+
def str2utf8(str)
|
42
|
+
str.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
|
43
|
+
end
|
44
|
+
|
36
45
|
private
|
37
46
|
|
38
47
|
# Assigns values to keys that are used in rows and yielded to the block
|
data/lib/sycsvpro/sorter.rb
CHANGED
@@ -20,14 +20,17 @@ module Sycsvpro
|
|
20
20
|
attr_reader :col_type_filter
|
21
21
|
# sorted rows
|
22
22
|
attr_reader :sorted_rows
|
23
|
+
# file doesn't contain a header
|
24
|
+
attr_reader :headerless
|
23
25
|
# sort order descending or ascending
|
24
26
|
attr_reader :desc
|
25
27
|
|
26
28
|
# Creates a Sorter and takes as options infile, outfile, rows, cols including types and a
|
27
|
-
# date format for the date columns to sort (optional)
|
29
|
+
# date format for the date columns to sort (optional).
|
28
30
|
def initialize(options={})
|
29
31
|
@infile = options[:infile]
|
30
32
|
@outfile = options[:outfile]
|
33
|
+
@headerless = options[:headerless] || false
|
31
34
|
@desc = options[:desc] || false
|
32
35
|
@row_filter = RowFilter.new(options[:rows])
|
33
36
|
@col_type_filter = ColumnTypeFilter.new(options[:cols], df: options[:df])
|
@@ -38,6 +41,11 @@ module Sycsvpro
|
|
38
41
|
def execute
|
39
42
|
rows = File.readlines(infile)
|
40
43
|
|
44
|
+
unless headerless
|
45
|
+
header = ""
|
46
|
+
header = rows.shift while header.chomp.strip.empty?
|
47
|
+
end
|
48
|
+
|
41
49
|
rows.each_with_index do |line, index|
|
42
50
|
filtered = col_type_filter.process(row_filter.process(line, row: index))
|
43
51
|
next if filtered.nil?
|
@@ -45,6 +53,10 @@ module Sycsvpro
|
|
45
53
|
end
|
46
54
|
|
47
55
|
File.open(outfile, 'w') do |out|
|
56
|
+
unless headerless
|
57
|
+
out.puts header
|
58
|
+
end
|
59
|
+
|
48
60
|
if desc
|
49
61
|
sorted_rows.compact.sort.reverse.each do |row|
|
50
62
|
out.puts unstring(rows[row.last])
|
data/lib/sycsvpro/version.rb
CHANGED
@@ -7,6 +7,7 @@ module Sycsvpro
|
|
7
7
|
before do
|
8
8
|
@in_file = File.join(File.dirname(__FILE__), "files/in.csv")
|
9
9
|
@in_2_file = File.join(File.dirname(__FILE__), "files/in2.csv")
|
10
|
+
@in_3_file = File.join(File.dirname(__FILE__), "files/in3.csv")
|
10
11
|
@out_file = File.join(File.dirname(__FILE__), "files/out.csv")
|
11
12
|
end
|
12
13
|
|
@@ -15,7 +16,8 @@ module Sycsvpro
|
|
15
16
|
cols = "s:0"
|
16
17
|
df = "%d.%m.%Y"
|
17
18
|
|
18
|
-
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df: df
|
19
|
+
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
20
|
+
headerless: true)
|
19
21
|
|
20
22
|
sorter.execute
|
21
23
|
|
@@ -37,7 +39,8 @@ module Sycsvpro
|
|
37
39
|
cols = "n:1,s:0"
|
38
40
|
df = "%d.%m.%Y"
|
39
41
|
|
40
|
-
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df: df
|
42
|
+
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
43
|
+
headerless: true)
|
41
44
|
|
42
45
|
sorter.execute
|
43
46
|
|
@@ -59,7 +62,8 @@ module Sycsvpro
|
|
59
62
|
cols = "s:3-5,s:0"
|
60
63
|
df = "%d.%m.%Y"
|
61
64
|
|
62
|
-
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df:
|
65
|
+
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df:
|
66
|
+
df, headerless: true)
|
63
67
|
|
64
68
|
sorter.execute
|
65
69
|
|
@@ -82,7 +86,8 @@ module Sycsvpro
|
|
82
86
|
cols = "d:2,s:0"
|
83
87
|
df = "%d.%m.%Y"
|
84
88
|
|
85
|
-
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df: df
|
89
|
+
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
90
|
+
headerless: true)
|
86
91
|
|
87
92
|
sorter.execute
|
88
93
|
|
@@ -105,7 +110,7 @@ module Sycsvpro
|
|
105
110
|
df = "%d.%m.%Y"
|
106
111
|
|
107
112
|
sorter = Sorter.new(infile: @in_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
108
|
-
desc: true)
|
113
|
+
desc: true, headerless: true)
|
109
114
|
|
110
115
|
sorter.execute
|
111
116
|
|
@@ -128,7 +133,7 @@ module Sycsvpro
|
|
128
133
|
df = "%d.%m.%Y"
|
129
134
|
|
130
135
|
sorter = Sorter.new(infile: @in_2_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
131
|
-
desc: false)
|
136
|
+
desc: false, headerless: true)
|
132
137
|
|
133
138
|
sorter.execute
|
134
139
|
|
@@ -147,7 +152,7 @@ module Sycsvpro
|
|
147
152
|
df = "%d.%m.%Y"
|
148
153
|
|
149
154
|
sorter = Sorter.new(infile: @in_2_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
150
|
-
desc: true)
|
155
|
+
desc: true, headerless: true)
|
151
156
|
|
152
157
|
sorter.execute
|
153
158
|
|
@@ -166,7 +171,7 @@ module Sycsvpro
|
|
166
171
|
df = "%d.%m.%Y"
|
167
172
|
|
168
173
|
sorter = Sorter.new(infile: @in_2_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
169
|
-
desc: false)
|
174
|
+
desc: false, headerless: true)
|
170
175
|
|
171
176
|
sorter.execute
|
172
177
|
|
@@ -179,6 +184,29 @@ module Sycsvpro
|
|
179
184
|
end
|
180
185
|
end
|
181
186
|
|
187
|
+
it "should sort strings with values containing value separators" do
|
188
|
+
rows = "0-6"
|
189
|
+
cols = "s:1,s:4,s:5"
|
190
|
+
df = "%d.%m.%Y"
|
191
|
+
|
192
|
+
sorter = Sorter.new(infile: @in_3_file, outfile: @out_file, rows: rows, cols: cols, df: df,
|
193
|
+
desc: false, headerless: true)
|
194
|
+
|
195
|
+
sorter.execute
|
196
|
+
|
197
|
+
result = [ "Fink;1234;20.12.2015;f1;con123;dri222",
|
198
|
+
"fink;1234;;f3;con332;dri321,dri323",
|
199
|
+
"Fink;1234;30.12.2016;f2;con333;dri321",
|
200
|
+
"Rank;3232;1.5.2013;r1;con332;dri321",
|
201
|
+
"Haas;3322;1.10.2011;h1;con332;dri111",
|
202
|
+
"Gent;4323,4434;1.3.2014;g1;con123;dri111",
|
203
|
+
"Klig;4432;;k1;con332,con331;dri222" ]
|
204
|
+
|
205
|
+
File.open(@out_file).each_with_index do |line, index|
|
206
|
+
line.chomp.should eq result[index]
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
182
210
|
end
|
183
211
|
|
184
212
|
end
|
data/sycsvpro.rdoc
CHANGED
@@ -7,12 +7,13 @@ SYNOPSIS
|
|
7
7
|
sycsvpro [global options] command [command options] [arguments...]
|
8
8
|
|
9
9
|
VERSION
|
10
|
-
0.0.
|
10
|
+
0.0.9
|
11
11
|
|
12
12
|
GLOBAL OPTIONS
|
13
13
|
-f, --file=FILE - CSV file to operate on (default: none)
|
14
14
|
--help - Show this message
|
15
15
|
-o, --out=OUT_FILE - CSV file to write the result to (default: none)
|
16
|
+
-s, --[no-]silent - Silent progress doesn't show progress indicator
|
16
17
|
--version - Display the program version
|
17
18
|
|
18
19
|
COMMANDS
|
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
|
+
version: 0.0.9
|
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
|
11
|
+
date: 2014-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|