extcsv 0.11.3 → 0.12.0
Sign up to get free protection for your applications and to get access to all the features.
- data/gemspec +2 -2
- data/lib/extcsv.rb +7 -2
- data/lib/extcsv_diagram.rb +145 -43
- data/lib/lsmodel.rb +0 -0
- data/rakefile +0 -0
- data/test/data/file00.txt +0 -0
- data/test/data/file01.txt +0 -0
- data/test/data/file02.txt +0 -0
- data/test/data/file03.txt +0 -0
- data/test/data/file04.csv +0 -0
- data/test/data/file05.csv +0 -0
- data/test/test_extcsv.rb +13 -12
- data/test/test_extcsv_diagram.rb +102 -131
- data/test/test_lsmodel.rb +0 -0
- metadata +22 -40
- data/lib/extcsv_units.rb +0 -26
data/gemspec
CHANGED
@@ -2,8 +2,8 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
spec = Gem::Specification.new do |s|
|
4
4
|
s.name = "extcsv"
|
5
|
-
s.version = "0.
|
6
|
-
s.date = Time.new.
|
5
|
+
s.version = "0.12.0"
|
6
|
+
s.date = Time.new.strftime("%Y-%m-%d")
|
7
7
|
s.author = "Ralf Mueller"
|
8
8
|
s.email = "stark.dreamdetective@gmail.com"
|
9
9
|
s.homepage = "http://extcsv.rubyforge.org"
|
data/lib/extcsv.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'csv'
|
2
2
|
require 'ostruct'
|
3
|
+
require 'extcsv_diagram'
|
3
4
|
|
4
5
|
class Nil
|
5
6
|
def to_s; ''; end
|
@@ -29,7 +30,7 @@ end
|
|
29
30
|
# ==== License: BSD - see {license file}[http:/extcsv.rubyforge.org/svn/extcsv/trunk/LICENSE]
|
30
31
|
################################################################################
|
31
32
|
class ExtCsv < OpenStruct
|
32
|
-
VERSION = '0.
|
33
|
+
VERSION = '0.12.0'
|
33
34
|
|
34
35
|
include Comparable
|
35
36
|
include Enumerable
|
@@ -684,7 +685,11 @@ class ExtCsv < OpenStruct
|
|
684
685
|
def ExtCsv.combine(obj, obj_=nil)
|
685
686
|
obj.combine(obj_)
|
686
687
|
end
|
687
|
-
|
688
|
+
|
689
|
+
def plot(*args)
|
690
|
+
ExtCsvDiagram.plot(self,*args)
|
691
|
+
end
|
692
|
+
private :deep_copy, :set_separators, :parse_content, :change_time_format
|
688
693
|
end
|
689
694
|
|
690
695
|
class ExtCsvExporter
|
data/lib/extcsv_diagram.rb
CHANGED
@@ -3,6 +3,35 @@ require 'gnuplot'
|
|
3
3
|
require 'win32ole' if RUBY_PLATFORM =~ /(win32|cygwin)/i
|
4
4
|
require 'extcsv_units'
|
5
5
|
|
6
|
+
################################################################################
|
7
|
+
# Author: Ralf Müller
|
8
|
+
#
|
9
|
+
# ==== TODO: Units are automatically selected from the column name. You could add
|
10
|
+
# units here and they will be used for graphs. I think, this is a premature
|
11
|
+
# solution, because the file will be edited by nearly every user, so it
|
12
|
+
# actually is a configutration file. But without units, the graphs loose much
|
13
|
+
# of their information. There are separate packages for units like
|
14
|
+
# units.rubyforge.org. But there will allways be the problem, that column names
|
15
|
+
# cannot be restricted to find a appropriate unit.
|
16
|
+
################################################################################
|
17
|
+
module ExtCsvUnits
|
18
|
+
Units =
|
19
|
+
{
|
20
|
+
:col1 => "kV",
|
21
|
+
:col2 => "kV",
|
22
|
+
:col3 => "kV",
|
23
|
+
:col4 => "kV",
|
24
|
+
:col5 => "kV",
|
25
|
+
:col6 => "kV",
|
26
|
+
:col7 => "kV",
|
27
|
+
:col8 => "kV",
|
28
|
+
:zeit => "yyyy-mm-dd hh:mm:ss",
|
29
|
+
:time => "yyyy-mm-dd hh:mm:ss",
|
30
|
+
:depth => "m",
|
31
|
+
:Temp => "degC"
|
32
|
+
}
|
33
|
+
end
|
34
|
+
################################################################################
|
6
35
|
# This module provides separate plotting methods
|
7
36
|
module ExtCsvDiagram
|
8
37
|
include ExtCsvUnits
|
@@ -13,6 +42,7 @@ module ExtCsvDiagram
|
|
13
42
|
:size => nil,
|
14
43
|
:filename => nil,
|
15
44
|
:title => nil,
|
45
|
+
:addSettings => [],
|
16
46
|
:label_position => "left",
|
17
47
|
:label? => true,
|
18
48
|
:grid => true,
|
@@ -27,9 +57,10 @@ module ExtCsvDiagram
|
|
27
57
|
:logscale => nil,
|
28
58
|
:add_settings => [],
|
29
59
|
:point_label? => false,
|
30
|
-
:
|
60
|
+
:output_time_format => '"%Y-%m-%d\n%H:%M:%S"',
|
61
|
+
:input_time_format => '"%Y-%m-%d\n%H:%M:%S"'
|
31
62
|
}
|
32
|
-
@@timeColumns = %w[time time_camera zeit]
|
63
|
+
@@timeColumns = %w[time time_camera zeit date datetime timestamp]
|
33
64
|
|
34
65
|
def ExtCsvDiagram.set_pointlabel(obj, plot, x_col, x, y, label_col=nil, size='10')
|
35
66
|
timemode = (%w[zeit zeitstempel time timestamp].include?(x_col.to_s))
|
@@ -68,14 +99,111 @@ module ExtCsvDiagram
|
|
68
99
|
def ExtCsvDiagram.enhanceTitleByGroup(group_by,ob)
|
69
100
|
title = ''
|
70
101
|
group_by.each {|col|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
title
|
102
|
+
unit = Units[col.to_sym]
|
103
|
+
colunit = unit.nil? ? col.to_s : unit
|
104
|
+
name = [ob.send(col)[0],colunit]
|
105
|
+
title += (col.to_sym != :focus) ? name.join('') : name[0]
|
106
|
+
title += " " unless col == group_by.last
|
75
107
|
}
|
76
108
|
title
|
77
109
|
end
|
78
110
|
|
111
|
+
def ExtCsvDiagram.checkColumns(obj,*cols)
|
112
|
+
cols.each {|col|
|
113
|
+
next if col.kind_of?(Hash)
|
114
|
+
unless obj.datacolumns.include?(col)
|
115
|
+
print "[plot] Input data does NOT contain column '#{col.to_s}'\n"
|
116
|
+
raise ArgumentError
|
117
|
+
end
|
118
|
+
}
|
119
|
+
end
|
120
|
+
|
121
|
+
def ExtCsvDiagram.setRangeAndLabel(plot,options)
|
122
|
+
plot.xrange options[:xrange] unless options[:xrange].nil?
|
123
|
+
plot.yrange options[:yrange] unless options[:yrange].nil?
|
124
|
+
plot.xlabel options[:xlabel] unless options[:xlabel].nil?
|
125
|
+
plot.ylabel options[:ylabel] unless options[:ylabel].nil?
|
126
|
+
plot.x2range options[:x2range] unless options[:x2range].nil?
|
127
|
+
plot.y2range options[:y2range] unless options[:y2range].nil?
|
128
|
+
plot.x2label options[:x2label] unless options[:x2label].nil?
|
129
|
+
plot.y2label options[:y2label] unless options[:y2label].nil?
|
130
|
+
end
|
131
|
+
def ExtCsvDiagram.setXTimeAxis(plot,input_time_format,output_time_format,*xColumns)
|
132
|
+
xColumns.each_with_index {|xcol,i|
|
133
|
+
next if xcol.nil? or xcol.kind_of?(Hash)
|
134
|
+
if @@timeColumns.include?(xcol.to_s)
|
135
|
+
plot.timefmt input_time_format
|
136
|
+
if 0 == i
|
137
|
+
plot.xdata 'time'
|
138
|
+
plot.format 'x ' + output_time_format
|
139
|
+
else
|
140
|
+
plot.x2data 'time'
|
141
|
+
plot.format 'x2 ' + output_time_format
|
142
|
+
end
|
143
|
+
end
|
144
|
+
}
|
145
|
+
end
|
146
|
+
|
147
|
+
def ExtCsvDiagram.addSettings(plot,settings)
|
148
|
+
settings.each {|setting|
|
149
|
+
md = /^(\w+)/.match(setting)
|
150
|
+
plot.set(md[1],md.post_match) unless md.nil?
|
151
|
+
}
|
152
|
+
end
|
153
|
+
|
154
|
+
def ExtCsvDiagram.setKeys(plot,options)
|
155
|
+
plot.key options[:label_position]
|
156
|
+
plot.key 'off' unless options[:label?]
|
157
|
+
end
|
158
|
+
|
159
|
+
def ExtCsvDiagram.setOutput(plot,options)
|
160
|
+
size = (options[:size].nil?) ? '' : " size #{options[:size]}"
|
161
|
+
plot.terminal options[:terminal] + size
|
162
|
+
plot.output outputfilename + "." + options[:terminal].split(" ")[0]
|
163
|
+
end
|
164
|
+
|
165
|
+
def ExtCsvDiagram.addDataToPlot(plot,obj,xColumn,yColumn,groupBy,options)
|
166
|
+
x = obj.send(xColumn)
|
167
|
+
y = obj.send(yColumn)
|
168
|
+
title = enhanceTitleByGroup(groupBy,obj)
|
169
|
+
plot.data << Gnuplot::DataSet.new([x,y]) {|ds|
|
170
|
+
unit = Units[yColumn.to_sym].nil? ? '' : "[#{Units[yColumn.to_sym]}]"
|
171
|
+
ds.using = @@timeColumns.include?(xColumn.to_s) ? '1:3' : '1:2'
|
172
|
+
ds.with = options[:type]
|
173
|
+
ds.title = options[:onlyGroupTitle] ? "#{title}" : "#{yColumn} #{unit}, #{title}"
|
174
|
+
}
|
175
|
+
return [x,y]
|
176
|
+
end
|
177
|
+
def ExtCsvDiagram.plot_xy(obj,xColumn,yColumn,title,options={})
|
178
|
+
checkColumns(obj,xColumn,yColumn) unless options[:skipColumnCheck]
|
179
|
+
options = GRAPH_OPTIONS.merge(options)
|
180
|
+
outputfilename = (options[:filename].nil?) ? obj.filename : options[:filename]
|
181
|
+
groupBy = (options[:groupBy]).nil? ? [] : options[:groupBy]
|
182
|
+
Gnuplot.open {|gp|
|
183
|
+
Gnuplot::Plot.new(gp) {|plot|
|
184
|
+
plot.title "'" + title + "'"
|
185
|
+
setKeys(plot,options)
|
186
|
+
|
187
|
+
setOutput(plot,options) unless 'x11' == options[:terminal]
|
188
|
+
|
189
|
+
plot.grid if options[:grid]
|
190
|
+
|
191
|
+
addSettings(plot,options[:addSettings]) unless options[:addSettings].empty?
|
192
|
+
|
193
|
+
setRangeAndLabel(plot,options)
|
194
|
+
|
195
|
+
setXTimeAxis(plot,options[:input_time_format],options[:output_time_format],xColumn)
|
196
|
+
|
197
|
+
# Data for first x-axes
|
198
|
+
obj.split(*groupBy) {|obj|
|
199
|
+
x,y = ExtCsvDiagram.addDataToPlot(plot,obj,xColumn,yColumn,groupBy,options)
|
200
|
+
|
201
|
+
# set labels if requested
|
202
|
+
set_pointlabel(ob,plot, xColumn, x,y, options[:label_column],options[:label_fsize]) if options[:point_label?]
|
203
|
+
}
|
204
|
+
}
|
205
|
+
}
|
206
|
+
end
|
79
207
|
def ExtCsvDiagram.plot(obj,
|
80
208
|
group_by, # array[col0, ..., colN]
|
81
209
|
x1_col,
|
@@ -84,9 +212,12 @@ module ExtCsvDiagram
|
|
84
212
|
y2_cols=[],
|
85
213
|
title='',
|
86
214
|
options={})
|
87
|
-
|
88
|
-
|
215
|
+
|
216
|
+
ExtCsvDiagram.checkColumns(obj,*([group_by,x1_col,y1_cols,x2_col,y2_cols].flatten.uniq.compact))
|
217
|
+
|
218
|
+
options = GRAPH_OPTIONS.merge(options)
|
89
219
|
outputfilename = (options[:filename].nil?) ? obj.filename : options[:filename]
|
220
|
+
|
90
221
|
Gnuplot.open {|gp|
|
91
222
|
Gnuplot::Plot.new(gp) {|plot|
|
92
223
|
plot.title "'" + title + "'"
|
@@ -100,52 +231,23 @@ module ExtCsvDiagram
|
|
100
231
|
|
101
232
|
plot.grid if options[:grid]
|
102
233
|
|
103
|
-
options[:
|
104
|
-
md = /^(\w+)/.match(setting)
|
105
|
-
plot.set(md[1],md.post_match) unless md.nil?
|
106
|
-
}
|
234
|
+
addSettings(plot,options[:addSettings]) unless options[:addSettings].empty?
|
107
235
|
|
108
236
|
# handling of axes
|
109
|
-
plot.y2tics 'in'
|
110
|
-
plot.x2tics 'in'
|
111
|
-
|
112
|
-
plot.xrange options[:xrange] unless options[:xrange].nil?
|
113
|
-
plot.yrange options[:yrange] unless options[:yrange].nil?
|
114
|
-
plot.x2range options[:x2range] unless options[:x2range].nil?
|
115
|
-
plot.y2range options[:y2range] unless options[:y2range].nil?
|
116
|
-
plot.xlabel options[:xlabel] unless options[:xlabel].nil?
|
117
|
-
plot.ylabel options[:ylabel] unless options[:ylabel].nil?
|
118
|
-
plot.x2label options[:x2label] unless options[:x2label].nil?
|
119
|
-
plot.y2label options[:y2label] unless options[:y2label].nil?
|
237
|
+
plot.y2tics 'in' unless ( y2_cols.nil? or y2_cols.empty? )
|
238
|
+
plot.x2tics 'in' unless ( x2_col.nil? or x2_col.kind_of?(Hash) )
|
120
239
|
|
240
|
+
setRangeAndLabel(plot,options)
|
121
241
|
|
122
|
-
|
123
|
-
plot.xdata 'time'
|
124
|
-
plot.timefmt '"%Y-%m-%d %H:%M:%S"'
|
125
|
-
plot.format 'x ' + options[:time_format]
|
126
|
-
end
|
127
|
-
if @@timeColumns.include?(x2_col.to_s)
|
128
|
-
plot.x2data 'time'
|
129
|
-
plot.timefmt '"%Y-%m-%d %H:%M:%S"'
|
130
|
-
plot.format 'x2 ' + options[:time_format]
|
131
|
-
end
|
242
|
+
setXTimeAxis(plot,options[:input_time_format],options[:output_time_format],x1_col,x2_col)
|
132
243
|
|
133
244
|
# Data for first x-axes
|
134
245
|
obj.split(*group_by) {|ob|
|
135
246
|
y1_cols.each {|y_col|
|
136
|
-
x =
|
137
|
-
y = ob.send(y_col)
|
138
|
-
title = enhanceTitleByGroup(group_by,ob)
|
139
|
-
plot.data << Gnuplot::DataSet.new([x,y]) {|ds|
|
140
|
-
unit = Units[y_col.to_sym].nil? ? '' : "[#{Units[y_col.to_sym]}]"
|
141
|
-
ds.using = @@timeColumns.include?(x1_col.to_s) ? '1:3' : '1:2'
|
142
|
-
ds.with = options[:type] + " axes x1y1 lw #{options[:linewidth]}"
|
143
|
-
ds.title = options[:onlyGroupTitle] ? "#{title}" : "#{y_col} #{unit}, #{title}"
|
144
|
-
}
|
247
|
+
x,y = ExtCsvDiagram.addDataToPlot(plot,ob,x1_col,y_col,group_by,options)
|
145
248
|
|
146
249
|
# set labels if requested
|
147
250
|
set_pointlabel(ob,plot, x1_col, x,y, options[:label_column],options[:label_fsize]) if options[:point_label?]
|
148
|
-
|
149
251
|
}
|
150
252
|
y2_cols.each {|y_col|
|
151
253
|
x = ob.send(x1_col)
|
data/lib/lsmodel.rb
CHANGED
File without changes
|
data/rakefile
CHANGED
File without changes
|
data/test/data/file00.txt
CHANGED
File without changes
|
data/test/data/file01.txt
CHANGED
File without changes
|
data/test/data/file02.txt
CHANGED
File without changes
|
data/test/data/file03.txt
CHANGED
File without changes
|
data/test/data/file04.csv
CHANGED
File without changes
|
data/test/data/file05.csv
CHANGED
File without changes
|
data/test/test_extcsv.rb
CHANGED
@@ -12,17 +12,16 @@ class ExtCsv
|
|
12
12
|
def setmode(mode)
|
13
13
|
@mode = mode
|
14
14
|
end
|
15
|
-
public :deep_split
|
16
15
|
end
|
17
16
|
|
18
17
|
class TestExtCsv < Test::Unit::TestCase
|
19
|
-
TEST_DIR
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
TEST_FD_DATA
|
25
|
-
ERG_CSV_DATA
|
18
|
+
TEST_DIR = "test/"
|
19
|
+
TEST_DATA_DIR = TEST_DIR + "data/"
|
20
|
+
TEST_DATA = TEST_DIR + "data/file00.txt"
|
21
|
+
TEST_DATA_NEW = TEST_DIR + "data/file01.txt"
|
22
|
+
TEST_DATA_GERMAN = TEST_DIR + "data/german.txt"
|
23
|
+
TEST_FD_DATA = TEST_DATA_NEW
|
24
|
+
ERG_CSV_DATA = TEST_DIR + "data/file04.csv"
|
26
25
|
ERG_CSV_DATA_ = TEST_DIR + "data/file05.csv"
|
27
26
|
ERG_CSV_DATA.freeze
|
28
27
|
TEST_OUTOUT_DIR = TEST_DIR + "output"
|
@@ -31,6 +30,10 @@ class TestExtCsv < Test::Unit::TestCase
|
|
31
30
|
test_simple = ExtCsv.new(IMPORT_TYPE,"txt",TEST_DATA)
|
32
31
|
assert_equal("txt",test_simple.datatype)
|
33
32
|
end
|
33
|
+
def test_respond
|
34
|
+
test_simple = ExtCsv.new(IMPORT_TYPE,"txt",TEST_DATA)
|
35
|
+
%w|step try col1 col2 col4|.each {|col| assert_respond_to(test_simple,col.to_sym)}
|
36
|
+
end
|
34
37
|
def test_create_csv
|
35
38
|
test_simple = ExtCsv.new(IMPORT_TYPE,"ssv",ERG_CSV_DATA)
|
36
39
|
end
|
@@ -302,8 +305,6 @@ class TestExtCsv < Test::Unit::TestCase
|
|
302
305
|
assert_equal(ExtCsv.concat(obj0, obj1),ExtCsv.concat(*[obj0, obj1]))
|
303
306
|
newobj01 = ExtCsv.concat(obj0, obj1)
|
304
307
|
assert_equal(228,newobj01.size)
|
305
|
-
obj0.delete_field(:step)
|
306
|
-
obj2.delete_field(:step)
|
307
308
|
#pp obj0.rsize
|
308
309
|
#pp obj2.rsize
|
309
310
|
newobj02 = ExtCsv.concat(obj0, obj2)
|
@@ -494,7 +495,7 @@ class TestExtCsv < Test::Unit::TestCase
|
|
494
495
|
assert_nil(csv + simple0)
|
495
496
|
end
|
496
497
|
def test_version
|
497
|
-
assert_equal('0.
|
498
|
+
assert_equal('0.12.0',ExtCsv::VERSION)
|
498
499
|
end
|
499
500
|
|
500
501
|
def test_add
|
@@ -509,7 +510,7 @@ class TestExtCsv < Test::Unit::TestCase
|
|
509
510
|
end
|
510
511
|
|
511
512
|
def test_umlaut
|
512
|
-
simple = ExtCsv.new(IMPORT_TYPE, "txt",
|
513
|
+
simple = ExtCsv.new(IMPORT_TYPE, "txt", TEST_DATA_GERMAN)
|
513
514
|
#pp simple
|
514
515
|
end
|
515
516
|
def test_columns
|
data/test/test_extcsv_diagram.rb
CHANGED
@@ -8,142 +8,113 @@ require 'pp'
|
|
8
8
|
# Author:: Ralf M�ller
|
9
9
|
################################################################################
|
10
10
|
class TestExtCsvDisplay < Test::Unit::TestCase
|
11
|
-
|
11
|
+
include ExtCsvDiagram
|
12
12
|
|
13
13
|
TEST_DIR = "test"
|
14
14
|
TEST_DATA = TEST_DIR + "/data/file00.txt"
|
15
15
|
TEST_DATA_NEW = TEST_DIR + "/data/file01.txt"
|
16
16
|
DATALOGGER_DATA = TEST_DIR + ""
|
17
17
|
IMPORT_TYPE = "file"
|
18
|
+
ICON = "/home/ram/src/git/icon/experiments/xom.r8563.tsrel_R2B02_linDesity/xomFldminT.dat"
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
:
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
:yrange => "[0.7:1.4]",
|
120
|
-
:graph_title => "Plotted from a combined Object: col2 = const"
|
121
|
-
}
|
122
|
-
)
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_tube_diagram_labels
|
126
|
-
erg_csv = ExtCsv.new("file","txt",TEST_DATA_NEW)[0..10]
|
127
|
-
ExtCsvDiagram.plot(erg_csv,[],:col2,[:col7,:col8],'',[],'',:point_label? => true,:label_column => :string)
|
128
|
-
end
|
129
|
-
def test_extcsv_diagram_limits
|
130
|
-
td = ExtCsv.new("file","txt",TEST_DATA_NEW)
|
131
|
-
ExtCsvDiagram.plot(td[0,21],
|
132
|
-
[:col1],
|
133
|
-
:index,
|
134
|
-
[:col3],
|
135
|
-
:zeit,
|
136
|
-
[:col8],
|
137
|
-
'limit test',
|
138
|
-
:y1limits => [1.9],
|
139
|
-
:y1limitname => "y1 Limit",
|
140
|
-
:y2limits => [8.2],
|
141
|
-
:y2limitname => "y2 Limit",
|
142
|
-
:xlabel => "index",
|
143
|
-
:ylabel => "YLabel",
|
144
|
-
:y2label => "'Y2Label'",
|
145
|
-
:label_position => "out horiz bot",
|
146
|
-
:time_format => "'%H:%M'",
|
147
|
-
:linewidth => 1)
|
148
|
-
end
|
20
|
+
def test_simple
|
21
|
+
f=ExtCsv.new("file","txt",TEST_DATA)
|
22
|
+
ExtCsvDiagram.plot(f,["col4"],"col0",["col1"])
|
23
|
+
end
|
24
|
+
def test_icon
|
25
|
+
icon = ExtCsv.new(IMPORT_TYPE,"psv",ICON)
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
icon.datetime = []
|
32
|
+
icon.date.each_with_index{|date,i| icon.datetime << [date,icon.time[i]].join(' ') }
|
33
|
+
|
34
|
+
[:date,:time,:depth,:temp].each {|col| pp [col.to_s,icon.send(col).max].join('[max]: ') }
|
35
|
+
ExtCsvDiagram.plot_xy(icon,"datetime","temp",'ICON OCE_BASE (lin. Desity): Min. Tempratures at different depths',
|
36
|
+
:label_position => 'outside',:skipColumnCheck => true,
|
37
|
+
:type => 'lines',:groupBy => ["depth"],
|
38
|
+
:yrange => '[-2.5:0.5]',:onlyGroupTitle => true,
|
39
|
+
# :terminal => "png",
|
40
|
+
:input_time_format => "'%Y%m%d %H:%M:%S'",
|
41
|
+
:filename => "icon",:output_time_format => "'%Y'",:size => "800,600")
|
42
|
+
|
43
|
+
end
|
44
|
+
def test_plotxy
|
45
|
+
f = ExtCsv.new(IMPORT_TYPE,"txt",TEST_DATA)
|
46
|
+
ExtCsvDiagram.plot_xy(f,"step","col5",'test',
|
47
|
+
:label_position => 'outside',
|
48
|
+
:groupBy => [:col4],
|
49
|
+
:type => 'lines')
|
50
|
+
end
|
51
|
+
def test_gnuplot
|
52
|
+
test_file = TEST_DATA
|
53
|
+
drift_test_file = TEST_DATA_NEW
|
54
|
+
qpol = ExtCsv.new(IMPORT_TYPE,"txt",test_file)
|
55
|
+
qpol_drift = ExtCsv.new(IMPORT_TYPE,"txt",drift_test_file)
|
56
|
+
|
57
|
+
f = qpol.selectBy(:col4 => /(5|4)/)
|
58
|
+
assert_not_equal(0,f.size)
|
59
|
+
ExtCsvDiagram.plot(f,["col4"],"col1",
|
60
|
+
["col5"],nil,[],'',
|
61
|
+
:graph_title => "SIZEMODE",
|
62
|
+
:point_label? => true,
|
63
|
+
:label_positions => 'outside',
|
64
|
+
:dataset_title => 'notitle',
|
65
|
+
:mode => "size" )
|
66
|
+
f = qpol_drift.selectBy(:col4 => 5)
|
67
|
+
f.plot([],"zeit",["col6"],:type => 'lines')
|
68
|
+
qpol.plot([],
|
69
|
+
"step",
|
70
|
+
["col7","col8"],
|
71
|
+
{
|
72
|
+
:point_label? => true,
|
73
|
+
:xrange => "[0:1200]",
|
74
|
+
:label_position => "right",
|
75
|
+
:datasets => {:using => [nil,'1:($2*10)']},
|
76
|
+
:graph_title => "USING-TEST",
|
77
|
+
:mode => "qp" })
|
78
|
+
# qpol_drift.selectBy(:focus => "5").plot(["zeit","zeit"],
|
79
|
+
# ["iqa","iqc"],
|
80
|
+
# {
|
81
|
+
# #:yrange => "[0.7:1.4]",
|
82
|
+
# :graph_title => "Multi-Graph",
|
83
|
+
# :mode => "multi",
|
84
|
+
# :label_column => "col5",
|
85
|
+
# :point_label? => true,
|
86
|
+
# :time_format => "'%H:%M'"
|
87
|
+
# })
|
88
|
+
# qpol.selectBy(:col2 => "5",:col4 => "120").operate_on(:col1,"*rand(10.0)").operate_on(:x2,"*10.2*rand(1.0)").operate_on(:z1,"/rand(8.0)").operate_on(:z2,"*rand(10.0)").plot(["col1","col2"],["col1","col2"],
|
89
|
+
# :graph_type => 'vectors',
|
90
|
+
# :mode => "multi",
|
91
|
+
# :arrowstyle => " arrow 1 head filled size screen 0.2, 30, 45 ",
|
92
|
+
# :linewidth => "1",
|
93
|
+
# #:linetype => "rgb '#ffee33'",
|
94
|
+
# :dataset_title => ["t3","t1"],
|
95
|
+
# :drawBox => "0,0,5,5,gray,1",
|
96
|
+
# :drawCurve => "1,1,6,6,blue,2",
|
97
|
+
# :graph_title => "Multi-Vectors"
|
98
|
+
# ) #if false
|
99
|
+
end
|
100
|
+
def test_extcsv_diagram_limits
|
101
|
+
td = ExtCsv.new("file","txt",TEST_DATA_NEW)
|
102
|
+
ExtCsvDiagram.plot(td[0,21],
|
103
|
+
[:col1],
|
104
|
+
:index,
|
105
|
+
[:col3],
|
106
|
+
:zeit,
|
107
|
+
[:col8],
|
108
|
+
'limit test',
|
109
|
+
:y1limits => [1.9],
|
110
|
+
:y1limitname => "y1 Limit",
|
111
|
+
:y2limits => [8.2],
|
112
|
+
:y2limitname => "y2 Limit",
|
113
|
+
:xlabel => "index",
|
114
|
+
:ylabel => "YLabel",
|
115
|
+
:y2label => "'Y2Label'",
|
116
|
+
:label_position => "out horiz bot",
|
117
|
+
:time_format => "'%H:%M'",
|
118
|
+
:linewidth => 1)
|
119
|
+
end
|
149
120
|
end
|
data/test/test_lsmodel.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,34 +1,23 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: extcsv
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 11
|
8
|
-
- 3
|
9
|
-
version: 0.11.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.12.0
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Ralf Mueller
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
date: 2011-05-12 14:20:20 +02:00
|
18
|
-
default_executable:
|
12
|
+
date: 2012-04-11 00:00:00.000000000 Z
|
19
13
|
dependencies: []
|
20
|
-
|
21
14
|
description:
|
22
15
|
email: stark.dreamdetective@gmail.com
|
23
16
|
executables: []
|
24
|
-
|
25
17
|
extensions: []
|
26
|
-
|
27
18
|
extra_rdoc_files: []
|
28
|
-
|
29
|
-
files:
|
19
|
+
files:
|
30
20
|
- lib/lsmodel.rb
|
31
|
-
- lib/extcsv_units.rb
|
32
21
|
- lib/extcsv_diagram.rb
|
33
22
|
- lib/extcsv.rb
|
34
23
|
- rakefile
|
@@ -44,39 +33,32 @@ files:
|
|
44
33
|
- test/data/file03.txt
|
45
34
|
- test/data/german.txt
|
46
35
|
- test/data/file01.txt
|
47
|
-
has_rdoc: true
|
48
36
|
homepage: http://extcsv.rubyforge.org
|
49
37
|
licenses: []
|
50
|
-
|
51
38
|
post_install_message:
|
52
39
|
rdoc_options: []
|
53
|
-
|
54
|
-
require_paths:
|
40
|
+
require_paths:
|
55
41
|
- lib
|
56
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
42
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
43
|
none: false
|
58
|
-
requirements:
|
59
|
-
- -
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
63
|
-
version: "0"
|
64
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
49
|
none: false
|
66
|
-
requirements:
|
67
|
-
- -
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
|
70
|
-
- 0
|
71
|
-
version: "0"
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
72
54
|
requirements: []
|
73
|
-
|
74
55
|
rubyforge_project: extcsv
|
75
|
-
rubygems_version: 1.
|
56
|
+
rubygems_version: 1.8.17
|
76
57
|
signing_key:
|
77
58
|
specification_version: 3
|
78
|
-
summary:
|
79
|
-
|
59
|
+
summary: ! 'Let CSV-like files behave like DB-tables: selection, data operations on
|
60
|
+
columns. Easy plotting with gnuplot and modelling'
|
61
|
+
test_files:
|
80
62
|
- test/test_lsmodel.rb
|
81
63
|
- test/test_extcsv_diagram.rb
|
82
64
|
- test/test_extcsv.rb
|
data/lib/extcsv_units.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
################################################################################
|
2
|
-
# Author: Ralf M�ller
|
3
|
-
#
|
4
|
-
# ==== TODO: Units are automatically selected from the column name. You could add
|
5
|
-
# units here and they will be used for graphs. I think, this is a premature
|
6
|
-
# solution, because the file will be edited by nearly every user, so it
|
7
|
-
# actually is a configutration file. But without units, the graphs loose much
|
8
|
-
# of their information. There are separate packages for units like
|
9
|
-
# units.rubyforge.org. But there will allways be the problem, that column names
|
10
|
-
# cannot be restricted to find a appropriate unit.
|
11
|
-
################################################################################
|
12
|
-
module ExtCsvUnits
|
13
|
-
Units =
|
14
|
-
{
|
15
|
-
:col1 => "kV",
|
16
|
-
:col2 => "kV",
|
17
|
-
:col3 => "kV",
|
18
|
-
:col4 => "kV",
|
19
|
-
:col5 => "kV",
|
20
|
-
:col6 => "kV",
|
21
|
-
:col7 => "kV",
|
22
|
-
:col8 => "kV",
|
23
|
-
:zeit => "yyyy-mm-dd hh:mm:ss",
|
24
|
-
:time => "yyyy-mm-dd hh:mm:ss"
|
25
|
-
}
|
26
|
-
end
|