Class: CsvReader
- Inherits:
-
Object
show all
- Extended by:
- Forwardable
- Includes:
- Enumerable
- Defined in:
- lib/csvreader/version.rb,
lib/csvreader/base.rb,
lib/csvreader/base.rb,
lib/csvreader/buffer.rb,
lib/csvreader/parser.rb,
lib/csvreader/reader.rb,
lib/csvreader/builder.rb,
lib/csvreader/converter.rb,
lib/csvreader/parser_std.rb,
lib/csvreader/parser_tab.rb,
lib/csvreader/parser_strict.rb
Overview
note: uses a class for now - change to module - why? why not?
Defined Under Namespace
Classes: Buffer, Builder, Converter, Error, ParseError, Parser, ParserStd, ParserStrict, ParserTab
Constant Summary
collapse
- DEFAULT =
pre-define CsvReader (built-in) formats/dialect
Builder.new( Parser::DEFAULT )
- NUMERIC =
Builder.new( Parser::NUMERIC )
- STRICT =
Builder.new( Parser::STRICT )
- RFC4180 =
Builder.new( Parser::RFC4180 )
- EXCEL =
Builder.new( Parser::EXCEL )
- MYSQL =
Builder.new( Parser::MYSQL )
- POSTGRES =
POSTGRESQL = Builder.new( Parser::POSTGRESQL )
- POSTGRES_TEXT =
POSTGRESQL_TEXT = Builder.new( Parser::POSTGRESQL_TEXT )
- TAB =
Builder.new( Parser::TAB )
- MAJOR =
todo: namespace inside version or something - why? why not??
1
- MINOR =
0
- PATCH =
3
- VERSION =
[MAJOR,MINOR,PATCH].join('.')
Class Method Summary
collapse
-
.banner ⇒ Object
-
.default ⇒ Object
alternative alias for DEFAULT.
-
.excel ⇒ Object
alternative alias for EXCEL.
-
.foreach(path, sep: nil, converters: nil, parser: nil, &block) ⇒ Object
-
.header(path, sep: nil, parser: nil) ⇒ Object
use header or headers - or use both (with alias)?.
-
.mysql ⇒ Object
-
.n ⇒ Object
-
.num ⇒ Object
-
.numeric ⇒ Object
-
.open(path, mode = nil, sep: nil, converters: nil, parser: nil, &block) ⇒ Object
-
.parse(data, sep: nil, converters: nil, parser: nil, &block) ⇒ Object
-
.parse_line(data, sep: nil, converters: nil) ⇒ Object
note: only add parse_line convenience helper for default always use parse (do NOT/NOT/NOT use parse_line) - why? why not? todo/fix: remove parse_line!!!.
-
.postgres ⇒ Object
-
.postgres_text ⇒ Object
-
.postgresql ⇒ Object
-
.postgresql_text ⇒ Object
-
.read(path, sep: nil, converters: nil, parser: nil) ⇒ Object
-
.rfc4180 ⇒ Object
alternative alias for RFC4180.
-
.root ⇒ Object
-
.strict ⇒ Object
alternative alias for STRICT.
-
.tab ⇒ Object
-
.version ⇒ Object
Instance Method Summary
collapse
Constructor Details
#initialize(data, sep: nil, converters: nil, parser: nil) ⇒ CsvReader
Returns a new instance of CsvReader.
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# File 'lib/csvreader/reader.rb', line 108
def initialize( data, sep: nil, converters: nil, parser: nil )
raise ArgumentError.new( "Cannot parse nil as CSV" ) if data.nil?
@io = data.is_a?(String) ? StringIO.new(data) : data
@sep = sep
@converters = Converter.create_converters( converters )
@parser = parser.nil? ? Parser::DEFAULT : parser
end
|
Class Method Details
.banner ⇒ Object
16
17
18
|
# File 'lib/csvreader/version.rb', line 16
def self.banner
"csvreader/#{VERSION} on Ruby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]"
end
|
.default ⇒ Object
alternative alias for DEFAULT
101
|
# File 'lib/csvreader/base.rb', line 101
def self.default() DEFAULT; end
|
.excel ⇒ Object
alternative alias for EXCEL
107
|
# File 'lib/csvreader/base.rb', line 107
def self.excel() EXCEL; end
|
.foreach(path, sep: nil, converters: nil, parser: nil, &block) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
# File 'lib/csvreader/reader.rb', line 58
def self.foreach( path, sep: nil,
converters: nil, parser: nil, &block )
csv = open( path, sep: sep, converters: converters, parser: parser )
if block_given?
begin
csv.each( &block )
ensure
csv.close
end
else
csv.to_enum end
end
|
use header or headers - or use both (with alias)?
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/csvreader/reader.rb', line 39
def self.( path, sep: nil, parser: nil )
records = []
open( path, sep: sep, parser: parser ) do |csv|
csv.each do |record|
records << record
break end
end
records.size == 0 ? nil : records.first
end
|
.mysql ⇒ Object
108
|
# File 'lib/csvreader/base.rb', line 108
def self.mysql() MYSQL; end
|
.n ⇒ Object
104
|
# File 'lib/csvreader/base.rb', line 104
def self.n() numeric; end
|
.num ⇒ Object
103
|
# File 'lib/csvreader/base.rb', line 103
def self.num() numeric; end
|
.numeric ⇒ Object
102
|
# File 'lib/csvreader/base.rb', line 102
def self.numeric() NUMERIC; end
|
.open(path, mode = nil, sep: nil, converters: nil, parser: nil, &block) ⇒ Object
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/csvreader/reader.rb', line 5
def self.open( path, mode=nil,
sep: nil,
converters: nil,
parser: nil, &block )
f = File.open( path, mode ? mode : 'r:bom|utf-8' )
csv = new(f, sep: sep,
converters: converters,
parser: parser )
if block_given?
begin
block.call( csv )
ensure
csv.close
end
else
csv
end
end
|
.parse(data, sep: nil, converters: nil, parser: nil, &block) ⇒ Object
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/csvreader/reader.rb', line 77
def self.parse( data, sep: nil,
converters: nil,
parser: nil, &block )
csv = new( data, sep: sep, converters: converters, parser: parser )
if block_given?
csv.each( &block ) else csv.read end
end
|
.parse_line(data, sep: nil, converters: nil) ⇒ Object
note: only add parse_line convenience helper for default
always use parse (do NOT/NOT/NOT use parse_line) - why? why not?
todo/fix: remove parse_line!!!
95
96
97
98
99
100
101
102
103
|
# File 'lib/csvreader/reader.rb', line 95
def self.parse_line( data, sep: nil,
converters: nil )
records = []
parse( data, sep: sep, converters: converters ) do |record|
records << record
break end
records.size == 0 ? nil : records.first
end
|
.postgres ⇒ Object
110
|
# File 'lib/csvreader/base.rb', line 110
def self.postgres() postgresql; end
|
.postgres_text ⇒ Object
112
|
# File 'lib/csvreader/base.rb', line 112
def self.postgres_text() postgresql_text; end
|
.postgresql ⇒ Object
109
|
# File 'lib/csvreader/base.rb', line 109
def self.postgresql() POSTGRESQL; end
|
.postgresql_text ⇒ Object
111
|
# File 'lib/csvreader/base.rb', line 111
def self.postgresql_text() POSTGRESQL_TEXT; end
|
.read(path, sep: nil, converters: nil, parser: nil) ⇒ Object
29
30
31
32
33
34
35
36
|
# File 'lib/csvreader/reader.rb', line 29
def self.read( path, sep: nil,
converters: nil,
parser: nil )
open( path,
sep: sep,
converters: converters,
parser: parser ) { |csv| csv.read }
end
|
.rfc4180 ⇒ Object
alternative alias for RFC4180
106
|
# File 'lib/csvreader/base.rb', line 106
def self.rfc4180() RFC4180; end
|
.root ⇒ Object
20
21
22
|
# File 'lib/csvreader/version.rb', line 20
def self.root
File.expand_path( File.dirname(File.dirname(File.dirname(__FILE__))) )
end
|
.strict ⇒ Object
alternative alias for STRICT
105
|
# File 'lib/csvreader/base.rb', line 105
def self.strict() STRICT; end
|
.tab ⇒ Object
113
|
# File 'lib/csvreader/base.rb', line 113
def self.tab() TAB; end
|
.version ⇒ Object
12
13
14
|
# File 'lib/csvreader/version.rb', line 12
def self.version
VERSION
end
|
Instance Method Details
#each(&block) ⇒ Object
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
# File 'lib/csvreader/reader.rb', line 140
def each( &block )
if block_given?
kwargs = {}
kwargs[:sep] = @sep if @sep && @parser.respond_to?( :'sep=' )
if @converters.empty?
@parser.parse( @io, kwargs, &block )
else
@parser.parse( @io, kwargs ) do |raw_record|
record = []
raw_record.each_with_index do | value, i |
record << @converters.convert( value, i )
end
block.call( record )
end
end
else
to_enum
end
end
|
#read ⇒ Object
165
|
# File 'lib/csvreader/reader.rb', line 165
def read() to_a; end
|