ruby_tdms 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +31 -0
- data/LICENSE.txt +26 -0
- data/README.md +28 -0
- data/Rakefile +10 -0
- data/demo.rb +14 -0
- data/doc/data_types.txt +23 -0
- data/doc/example_disasm.txt +47 -0
- data/doc/tdms_format.txt +101 -0
- data/doc/usage.txt +48 -0
- data/lib/ruby_tdms.rb +2 -0
- data/lib/ruby_tdms/aggregate_channel.rb +53 -0
- data/lib/ruby_tdms/aggregate_channel_enumerator.rb +50 -0
- data/lib/ruby_tdms/channel_enumerator.rb +33 -0
- data/lib/ruby_tdms/data_types.rb +22 -0
- data/lib/ruby_tdms/data_types/base.rb +19 -0
- data/lib/ruby_tdms/data_types/boolean.rb +15 -0
- data/lib/ruby_tdms/data_types/double.rb +19 -0
- data/lib/ruby_tdms/data_types/double_with_unit.rb +19 -0
- data/lib/ruby_tdms/data_types/int16.rb +19 -0
- data/lib/ruby_tdms/data_types/int32.rb +19 -0
- data/lib/ruby_tdms/data_types/int64.rb +19 -0
- data/lib/ruby_tdms/data_types/int8.rb +15 -0
- data/lib/ruby_tdms/data_types/single.rb +19 -0
- data/lib/ruby_tdms/data_types/single_with_unit.rb +19 -0
- data/lib/ruby_tdms/data_types/string.rb +15 -0
- data/lib/ruby_tdms/data_types/timestamp.rb +15 -0
- data/lib/ruby_tdms/data_types/u_int16.rb +19 -0
- data/lib/ruby_tdms/data_types/u_int32.rb +19 -0
- data/lib/ruby_tdms/data_types/u_int64.rb +19 -0
- data/lib/ruby_tdms/data_types/u_int8.rb +15 -0
- data/lib/ruby_tdms/document.rb +105 -0
- data/lib/ruby_tdms/file.rb +13 -0
- data/lib/ruby_tdms/object_parser.rb +47 -0
- data/lib/ruby_tdms/objects/base.rb +47 -0
- data/lib/ruby_tdms/objects/channel.rb +105 -0
- data/lib/ruby_tdms/objects/file.rb +11 -0
- data/lib/ruby_tdms/objects/group.rb +22 -0
- data/lib/ruby_tdms/path.rb +97 -0
- data/lib/ruby_tdms/property.rb +16 -0
- data/lib/ruby_tdms/segment.rb +107 -0
- data/lib/ruby_tdms/streaming.rb +124 -0
- data/lib/ruby_tdms/string_channel_enumerator.rb +49 -0
- data/lib/ruby_tdms/version.rb +3 -0
- data/ruby_tdms.gemspec +38 -0
- metadata +185 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
require 'date'
|
|
2
|
+
require_relative 'data_types'
|
|
3
|
+
|
|
4
|
+
module RubyTDMS
|
|
5
|
+
module Streaming
|
|
6
|
+
def read_property(big_endian)
|
|
7
|
+
name = read_utf8_string
|
|
8
|
+
type_id = read_u32
|
|
9
|
+
|
|
10
|
+
data = DataTypes.find_by_id(type_id).read_from_stream self, big_endian
|
|
11
|
+
Property.new name, data
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def read_bool
|
|
16
|
+
read(1) != "\000"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def read_u8
|
|
21
|
+
read(1).unpack('C')[0]
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def read_u16
|
|
26
|
+
read(2).unpack('S<')[0]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def read_u16_be
|
|
31
|
+
read(2).unpack('S>')[0]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def read_u32
|
|
36
|
+
read(4).unpack('L<')[0]
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def read_u32_be
|
|
41
|
+
read(4).unpack('L>')[0]
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def read_u64
|
|
46
|
+
read(8).unpack('Q<')[0]
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def read_u64_be
|
|
51
|
+
read(8).unpack('Q>')[0]
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def read_i8
|
|
56
|
+
read(1).unpack('c')[0]
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def read_i16
|
|
61
|
+
read(2).unpack('s<')[0]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def read_i16_be
|
|
66
|
+
read(2).unpack('s>')[0]
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def read_i32
|
|
71
|
+
read(4).unpack('l<')[0]
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def read_i32_be
|
|
76
|
+
read(4).unpack('l>')[0]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def read_i64
|
|
81
|
+
read(8).unpack('q<')[0]
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def read_i64_be
|
|
86
|
+
read(8).unpack('q>')[0]
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def read_single
|
|
91
|
+
read(4).unpack('e')[0]
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def read_single_be
|
|
96
|
+
read(4).unpack('g')[0]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def read_double
|
|
101
|
+
read(8).unpack('E')[0]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def read_double_be
|
|
106
|
+
read(8).unpack('G')[0]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def read_utf8_string
|
|
111
|
+
length = read_u32
|
|
112
|
+
read length
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def read_timestamp
|
|
117
|
+
positive_fractions_of_second = read_u64 # ignored
|
|
118
|
+
seconds_since_labview_epoch = read(8).unpack('q<')[0]
|
|
119
|
+
|
|
120
|
+
labview_epoch = ::DateTime.new(1904, 1, 1)
|
|
121
|
+
labview_epoch + Rational(seconds_since_labview_epoch, 86400)
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module RubyTDMS
|
|
2
|
+
class StringChannelEnumerator
|
|
3
|
+
include Enumerable
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def initialize(channel)
|
|
7
|
+
@channel = channel
|
|
8
|
+
|
|
9
|
+
@index_offset = @channel.raw_data_offset
|
|
10
|
+
@data_offset = @index_offset + (4 * @channel.value_count)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def size
|
|
15
|
+
@size ||= @channel.value_count
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def each
|
|
20
|
+
data_pos = @data_offset
|
|
21
|
+
|
|
22
|
+
0.upto(size - 1) do |i|
|
|
23
|
+
index_pos = @index_offset + (4 * i)
|
|
24
|
+
|
|
25
|
+
@channel.stream.seek index_pos
|
|
26
|
+
next_data_pos = @data_offset + @channel.stream.read_u32
|
|
27
|
+
|
|
28
|
+
length = next_data_pos - data_pos
|
|
29
|
+
|
|
30
|
+
@channel.stream.seek data_pos
|
|
31
|
+
yield @channel.stream.read(length)
|
|
32
|
+
|
|
33
|
+
data_pos = next_data_pos
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def [](i)
|
|
39
|
+
if (i < 0) || (i >= size)
|
|
40
|
+
raise RangeError, 'Channel %s has a range of 0 to %d, got invalid index: %d' % [@channel.path, size - 1, i]
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
inject(0) do |j, value|
|
|
44
|
+
return value if j == i
|
|
45
|
+
j += 1
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/ruby_tdms.gemspec
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
+
require 'ruby_tdms/version'
|
|
5
|
+
|
|
6
|
+
Gem::Specification.new do |spec|
|
|
7
|
+
spec.name = 'ruby_tdms'
|
|
8
|
+
spec.version = RubyTDMS::VERSION
|
|
9
|
+
spec.authors = ['Mike Naberezny', 'Aaron Ten Clay']
|
|
10
|
+
spec.email = ['aarontc@aarontc.com']
|
|
11
|
+
|
|
12
|
+
spec.summary = %q{Reads TDMS files. TDMS is a binary file format for measurement data created by National Instruments.}
|
|
13
|
+
spec.description = <<-DESCRIPTION
|
|
14
|
+
TDMS is a binary file format for measurement data. It was created by National Instruments.
|
|
15
|
+
|
|
16
|
+
National Instruments software such as LabVIEW, DIAdem, and Measurement Studio support reading and writing TDMS files. NI also provides a DLL written in C for using TDMS files on Windows.
|
|
17
|
+
|
|
18
|
+
RubyTDMS provides a convenient way to work with TDMS files on Unix-like platforms.
|
|
19
|
+
|
|
20
|
+
The RubyTDMS gem was formerly known as "TDMS".
|
|
21
|
+
DESCRIPTION
|
|
22
|
+
spec.homepage = 'https://github.com/aarontc/ruby_tdms'
|
|
23
|
+
spec.license = 'BSD'
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
27
|
+
spec.bindir = 'exe'
|
|
28
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
29
|
+
spec.require_paths = ['lib']
|
|
30
|
+
|
|
31
|
+
spec.add_dependency 'coalesce'
|
|
32
|
+
spec.add_dependency 'require_all'
|
|
33
|
+
|
|
34
|
+
spec.add_development_dependency 'bundler', '>= 1.7'
|
|
35
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
|
36
|
+
spec.add_development_dependency 'minitest'
|
|
37
|
+
spec.add_development_dependency 'simplecov'
|
|
38
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: ruby_tdms
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 2.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Mike Naberezny
|
|
8
|
+
- Aaron Ten Clay
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: exe
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2017-07-11 00:00:00.000000000 Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
15
|
+
name: coalesce
|
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
|
17
|
+
requirements:
|
|
18
|
+
- - '>='
|
|
19
|
+
- !ruby/object:Gem::Version
|
|
20
|
+
version: '0'
|
|
21
|
+
type: :runtime
|
|
22
|
+
prerelease: false
|
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
24
|
+
requirements:
|
|
25
|
+
- - '>='
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: '0'
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: require_all
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - '>='
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '0'
|
|
35
|
+
type: :runtime
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - '>='
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
42
|
+
- !ruby/object:Gem::Dependency
|
|
43
|
+
name: bundler
|
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
|
45
|
+
requirements:
|
|
46
|
+
- - '>='
|
|
47
|
+
- !ruby/object:Gem::Version
|
|
48
|
+
version: '1.7'
|
|
49
|
+
type: :development
|
|
50
|
+
prerelease: false
|
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
52
|
+
requirements:
|
|
53
|
+
- - '>='
|
|
54
|
+
- !ruby/object:Gem::Version
|
|
55
|
+
version: '1.7'
|
|
56
|
+
- !ruby/object:Gem::Dependency
|
|
57
|
+
name: rake
|
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
|
59
|
+
requirements:
|
|
60
|
+
- - ~>
|
|
61
|
+
- !ruby/object:Gem::Version
|
|
62
|
+
version: '10.0'
|
|
63
|
+
type: :development
|
|
64
|
+
prerelease: false
|
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
66
|
+
requirements:
|
|
67
|
+
- - ~>
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: '10.0'
|
|
70
|
+
- !ruby/object:Gem::Dependency
|
|
71
|
+
name: minitest
|
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
|
73
|
+
requirements:
|
|
74
|
+
- - '>='
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0'
|
|
77
|
+
type: :development
|
|
78
|
+
prerelease: false
|
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
80
|
+
requirements:
|
|
81
|
+
- - '>='
|
|
82
|
+
- !ruby/object:Gem::Version
|
|
83
|
+
version: '0'
|
|
84
|
+
- !ruby/object:Gem::Dependency
|
|
85
|
+
name: simplecov
|
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
|
87
|
+
requirements:
|
|
88
|
+
- - '>='
|
|
89
|
+
- !ruby/object:Gem::Version
|
|
90
|
+
version: '0'
|
|
91
|
+
type: :development
|
|
92
|
+
prerelease: false
|
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - '>='
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: '0'
|
|
98
|
+
description: |
|
|
99
|
+
TDMS is a binary file format for measurement data. It was created by National Instruments.
|
|
100
|
+
|
|
101
|
+
National Instruments software such as LabVIEW, DIAdem, and Measurement Studio support reading and writing TDMS files. NI also provides a DLL written in C for using TDMS files on Windows.
|
|
102
|
+
|
|
103
|
+
RubyTDMS provides a convenient way to work with TDMS files on Unix-like platforms.
|
|
104
|
+
|
|
105
|
+
The RubyTDMS gem was formerly known as "TDMS".
|
|
106
|
+
email:
|
|
107
|
+
- aarontc@aarontc.com
|
|
108
|
+
executables: []
|
|
109
|
+
extensions: []
|
|
110
|
+
extra_rdoc_files: []
|
|
111
|
+
files:
|
|
112
|
+
- .gitignore
|
|
113
|
+
- .travis.yml
|
|
114
|
+
- CODE_OF_CONDUCT.md
|
|
115
|
+
- Gemfile
|
|
116
|
+
- Gemfile.lock
|
|
117
|
+
- LICENSE.txt
|
|
118
|
+
- README.md
|
|
119
|
+
- Rakefile
|
|
120
|
+
- demo.rb
|
|
121
|
+
- doc/data_types.txt
|
|
122
|
+
- doc/example_disasm.txt
|
|
123
|
+
- doc/tdms_format.txt
|
|
124
|
+
- doc/usage.txt
|
|
125
|
+
- lib/ruby_tdms.rb
|
|
126
|
+
- lib/ruby_tdms/aggregate_channel.rb
|
|
127
|
+
- lib/ruby_tdms/aggregate_channel_enumerator.rb
|
|
128
|
+
- lib/ruby_tdms/channel_enumerator.rb
|
|
129
|
+
- lib/ruby_tdms/data_types.rb
|
|
130
|
+
- lib/ruby_tdms/data_types/base.rb
|
|
131
|
+
- lib/ruby_tdms/data_types/boolean.rb
|
|
132
|
+
- lib/ruby_tdms/data_types/double.rb
|
|
133
|
+
- lib/ruby_tdms/data_types/double_with_unit.rb
|
|
134
|
+
- lib/ruby_tdms/data_types/int16.rb
|
|
135
|
+
- lib/ruby_tdms/data_types/int32.rb
|
|
136
|
+
- lib/ruby_tdms/data_types/int64.rb
|
|
137
|
+
- lib/ruby_tdms/data_types/int8.rb
|
|
138
|
+
- lib/ruby_tdms/data_types/single.rb
|
|
139
|
+
- lib/ruby_tdms/data_types/single_with_unit.rb
|
|
140
|
+
- lib/ruby_tdms/data_types/string.rb
|
|
141
|
+
- lib/ruby_tdms/data_types/timestamp.rb
|
|
142
|
+
- lib/ruby_tdms/data_types/u_int16.rb
|
|
143
|
+
- lib/ruby_tdms/data_types/u_int32.rb
|
|
144
|
+
- lib/ruby_tdms/data_types/u_int64.rb
|
|
145
|
+
- lib/ruby_tdms/data_types/u_int8.rb
|
|
146
|
+
- lib/ruby_tdms/document.rb
|
|
147
|
+
- lib/ruby_tdms/file.rb
|
|
148
|
+
- lib/ruby_tdms/object_parser.rb
|
|
149
|
+
- lib/ruby_tdms/objects/base.rb
|
|
150
|
+
- lib/ruby_tdms/objects/channel.rb
|
|
151
|
+
- lib/ruby_tdms/objects/file.rb
|
|
152
|
+
- lib/ruby_tdms/objects/group.rb
|
|
153
|
+
- lib/ruby_tdms/path.rb
|
|
154
|
+
- lib/ruby_tdms/property.rb
|
|
155
|
+
- lib/ruby_tdms/segment.rb
|
|
156
|
+
- lib/ruby_tdms/streaming.rb
|
|
157
|
+
- lib/ruby_tdms/string_channel_enumerator.rb
|
|
158
|
+
- lib/ruby_tdms/version.rb
|
|
159
|
+
- ruby_tdms.gemspec
|
|
160
|
+
homepage: https://github.com/aarontc/ruby_tdms
|
|
161
|
+
licenses:
|
|
162
|
+
- BSD
|
|
163
|
+
metadata: {}
|
|
164
|
+
post_install_message:
|
|
165
|
+
rdoc_options: []
|
|
166
|
+
require_paths:
|
|
167
|
+
- lib
|
|
168
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
169
|
+
requirements:
|
|
170
|
+
- - '>='
|
|
171
|
+
- !ruby/object:Gem::Version
|
|
172
|
+
version: '0'
|
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
|
+
requirements:
|
|
175
|
+
- - '>='
|
|
176
|
+
- !ruby/object:Gem::Version
|
|
177
|
+
version: '0'
|
|
178
|
+
requirements: []
|
|
179
|
+
rubyforge_project:
|
|
180
|
+
rubygems_version: 2.0.14
|
|
181
|
+
signing_key:
|
|
182
|
+
specification_version: 4
|
|
183
|
+
summary: Reads TDMS files. TDMS is a binary file format for measurement data created
|
|
184
|
+
by National Instruments.
|
|
185
|
+
test_files: []
|