censive 0.23 → 0.25
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 +4 -4
- data/censive.gemspec +1 -1
- data/lib/censive.rb +8 -37
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 576378807981d5da8807494a94c45c7a9c42939f216b579daa97b39bfd179b28
|
4
|
+
data.tar.gz: 325e720a55384d7ecee7059b3889e2c401f0bed74bf3a212b44533113017a3a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5975a7104ed337ce034e76d322cc6096714cbfd3807261ec127d5c8ed78f438e618d1d72ea1d8e7fa058e561690c63cf4662967f6d5311c100169144e974225f
|
7
|
+
data.tar.gz: 359d426bd92041250647aa85c17262b1a6356c49147236c3b6ab86df16c56e87708b09839c74970ccafa17121d80ee764b80824b5723ea3817447ba43d514ae9
|
data/censive.gemspec
CHANGED
data/lib/censive.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
VERSION="0.25"
|
4
|
+
|
3
5
|
# ============================================================================
|
4
6
|
# censive - A quick and lightweight CSV handling library for Ruby
|
5
7
|
#
|
@@ -36,7 +38,7 @@ class Censive < StringScanner
|
|
36
38
|
|
37
39
|
def self.writer(obj=nil, **opts, &code)
|
38
40
|
case obj
|
39
|
-
when String then File.open(obj, "w") {|io|
|
41
|
+
when String then File.open(obj, "w") {|io| new(out: io, **opts, &code) }
|
40
42
|
when IO,nil then new(out: obj, **opts, &code)
|
41
43
|
else abort "#{File.basename($0)}: invalid #{obj.class} object in writer"
|
42
44
|
end
|
@@ -71,7 +73,7 @@ class Censive < StringScanner
|
|
71
73
|
@encoding = str.encoding
|
72
74
|
@excel = excel
|
73
75
|
@mode = mode
|
74
|
-
@out = out ||
|
76
|
+
@out = out || $stdout
|
75
77
|
@relax = relax
|
76
78
|
@strip = strip
|
77
79
|
|
@@ -100,6 +102,8 @@ class Censive < StringScanner
|
|
100
102
|
@quoted = @excel ? /(?:=)?#{@quote}/o : @quote
|
101
103
|
@unquoted = /[^#{@sep}#{@cr}#{@lf}][^#{@quote}#{@cr}#{@lf}]*/o
|
102
104
|
@leadzero = /\A0\d*\z/
|
105
|
+
|
106
|
+
yield self if block_given?
|
103
107
|
end
|
104
108
|
|
105
109
|
def reset(str=nil)
|
@@ -153,6 +157,7 @@ class Censive < StringScanner
|
|
153
157
|
scan(@eoc) and break
|
154
158
|
@relax or bomb "invalid character after quote"
|
155
159
|
token << @quote + (scan_until(@quotes) or bomb "bad inline quote")
|
160
|
+
scan(@eoc) and break
|
156
161
|
end
|
157
162
|
scan(@sep)
|
158
163
|
@strip ? token.strip : token
|
@@ -190,7 +195,7 @@ class Censive < StringScanner
|
|
190
195
|
# returns 2 (must be quoted and escaped), 1 (must be quoted), 0 (neither)
|
191
196
|
def grok(str)
|
192
197
|
if idx = str.index(@escapes)
|
193
|
-
$1 ? 2 : str.index(@
|
198
|
+
$1 ? 2 : str.index(@quote, idx) ? 2 : 1
|
194
199
|
else
|
195
200
|
0
|
196
201
|
end
|
@@ -247,37 +252,3 @@ class Censive < StringScanner
|
|
247
252
|
abort "\n#{File.basename($0)}: #{msg} at character #{pos} near '#{string[pos-4,7]}'"
|
248
253
|
end
|
249
254
|
end
|
250
|
-
|
251
|
-
if __FILE__ == $0
|
252
|
-
str = DATA.gets("\n\n").chomp
|
253
|
-
# str = File.read(ARGV.first || "lc-2023.csv")
|
254
|
-
# str = File.open("KEN_ALL.CSV", "r:cp932").read
|
255
|
-
|
256
|
-
# require "stringio"
|
257
|
-
# csv = Censive.new(str, excel: true, relax: true)
|
258
|
-
# out = "" # StringIO.new
|
259
|
-
# csv.export(out: out) # (excel: true) # sep: "|")
|
260
|
-
# puts out # .string
|
261
|
-
|
262
|
-
# csv = Censive.new(str, excel: true, relax: true, out: "")
|
263
|
-
# out = csv.export
|
264
|
-
# puts out.out
|
265
|
-
|
266
|
-
Censive.parse(str, excel: true, relax: true).to_csv
|
267
|
-
end
|
268
|
-
|
269
|
-
__END__
|
270
|
-
"Don",="007",10,"Ed"
|
271
|
-
Name,Age,,,Shoe,,,
|
272
|
-
"Alice",27,5
|
273
|
-
Bob,33,10 1/2
|
274
|
-
Charlie or "Chuck",=B2 + B3,9
|
275
|
-
Subtotal,=sum(B2:B5),="01234"
|
276
|
-
A,B,C,D
|
277
|
-
A,B,"C",D
|
278
|
-
A,B,C",D
|
279
|
-
A,B,"C",D
|
280
|
-
123,"CHO, JOELLE "JOJO"",456
|
281
|
-
123,"CHO, JOELLE ""JOJO""",456
|
282
|
-
=,=x,x=,="x",="","","=",123,0123,="123",="0123"
|
283
|
-
,=x,x=,x,,,,,,=,,123,="0123",123,,="0123"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: censive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.25'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Shreeve
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-15 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A quick and lightweight CSV handling library for Ruby
|
14
14
|
email: steve.shreeve@gmail.com
|
@@ -47,7 +47,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
requirements: []
|
50
|
-
rubygems_version: 3.4.
|
50
|
+
rubygems_version: 3.4.8
|
51
51
|
signing_key:
|
52
52
|
specification_version: 4
|
53
53
|
summary: A quick and lightweight CSV handling library for Ruby
|