censive 0.22 → 0.24
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 +19 -11
- metadata +2 -6
- data/diagram/NFA to Regex.pdf +0 -0
- data/lib/test-censive.rb +0 -12
- data/lib/test-csv.rb +0 -12
- data/test/a-uses-tabs-and-single-quotes-and-no-trailing-newline.tsv +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 76c05b90f6a522a328f86d7d142ed150b33c487e74619707e10f40453c7e9079
|
4
|
+
data.tar.gz: 1e5a93d293ad708b323e20e1323926f2bf70e219ffc502e8fc87025be7be23b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e56b1a6a0f943d962ff8c240625a8354283fcbccd1a640cd66054873e1803779ddb36e128841590e8a8aa0022694e1e22a4fa25b6f88eba7056dc68b838262fb
|
7
|
+
data.tar.gz: 41ddfb9d77a686bef546836d0a110b9603ac7e4f205b7d9760ed37203d23f32f6ba9d2cc5fcb9f8996713fbcdec8fcb924298b1052c1ecc5e9f6442deed3078f
|
data/censive.gemspec
CHANGED
data/lib/censive.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
# censive - A quick and lightweight CSV handling library for Ruby
|
5
5
|
#
|
6
6
|
# Author: Steve Shreeve (steve.shreeve@gmail.com)
|
7
|
-
# Date: Feb
|
7
|
+
# Date: Feb 17, 2023
|
8
8
|
#
|
9
9
|
# https://crystal-lang.org/api/1.7.2/CSV.html (Crystal's CSV library)
|
10
10
|
# https://github.com/ruby/strscan/blob/master/ext/strscan/strscan.c
|
@@ -46,11 +46,11 @@ class Censive < StringScanner
|
|
46
46
|
drop: false , # drop trailing empty columns?
|
47
47
|
encoding: nil , # character encoding
|
48
48
|
excel: false , # literals ="01" formulas =A1 + B2 http://bit.ly/3Y7jIvc
|
49
|
-
mode: :compact, #
|
49
|
+
mode: :compact, # output mode: compact or full
|
50
50
|
out: nil , # output stream, needs to respond to <<
|
51
51
|
quote: '"' , # quote character
|
52
52
|
relax: false , # relax quote parsing so ,"Fo"o, => ,"Fo""o",
|
53
|
-
rowsep: "\n" , # row separator for
|
53
|
+
rowsep: "\n" , # row separator for output
|
54
54
|
sep: "," , # column separator character
|
55
55
|
strip: false , # strip columns when reading
|
56
56
|
**opts # grab bag
|
@@ -71,7 +71,7 @@ class Censive < StringScanner
|
|
71
71
|
@encoding = str.encoding
|
72
72
|
@excel = excel
|
73
73
|
@mode = mode
|
74
|
-
@out = out ||
|
74
|
+
@out = out || ""
|
75
75
|
@relax = relax
|
76
76
|
@strip = strip
|
77
77
|
|
@@ -121,7 +121,7 @@ class Censive < StringScanner
|
|
121
121
|
@cols = count if count > @cols
|
122
122
|
@cells += count
|
123
123
|
end
|
124
|
-
|
124
|
+
self
|
125
125
|
end
|
126
126
|
|
127
127
|
def next_row
|
@@ -153,6 +153,7 @@ class Censive < StringScanner
|
|
153
153
|
scan(@eoc) and break
|
154
154
|
@relax or bomb "invalid character after quote"
|
155
155
|
token << @quote + (scan_until(@quotes) or bomb "bad inline quote")
|
156
|
+
scan(@eoc) and break
|
156
157
|
end
|
157
158
|
scan(@sep)
|
158
159
|
@strip ? token.strip : token
|
@@ -179,10 +180,10 @@ class Censive < StringScanner
|
|
179
180
|
@rows.each {|row| yield row }
|
180
181
|
end
|
181
182
|
|
182
|
-
def
|
183
|
+
def to_csv(**opts)
|
183
184
|
dest = opts.empty? ? self : self.class.writer(**opts)
|
184
185
|
each {|row| dest << row }
|
185
|
-
dest
|
186
|
+
dest.out
|
186
187
|
end
|
187
188
|
|
188
189
|
# ==[ Helpers ]==
|
@@ -190,7 +191,7 @@ class Censive < StringScanner
|
|
190
191
|
# returns 2 (must be quoted and escaped), 1 (must be quoted), 0 (neither)
|
191
192
|
def grok(str)
|
192
193
|
if idx = str.index(@escapes)
|
193
|
-
$1 ? 2 : str.index(@
|
194
|
+
$1 ? 2 : str.index(@quote, idx) ? 2 : 1
|
194
195
|
else
|
195
196
|
0
|
196
197
|
end
|
@@ -259,12 +260,17 @@ if __FILE__ == $0
|
|
259
260
|
# csv.export(out: out) # (excel: true) # sep: "|")
|
260
261
|
# puts out # .string
|
261
262
|
|
262
|
-
csv = Censive.new(str, excel: true, relax: true, out: "")
|
263
|
-
out = csv.export
|
264
|
-
puts out.out
|
263
|
+
# csv = Censive.new(str, excel: true, relax: true, out: "")
|
264
|
+
# out = csv.export
|
265
|
+
# puts out.out
|
266
|
+
|
267
|
+
puts Censive.parse(str, excel: true, relax: true).to_csv
|
265
268
|
end
|
266
269
|
|
267
270
|
__END__
|
271
|
+
"AAA "BBB",CCC,"DDD"
|
272
|
+
|
273
|
+
"CHUI, LOK HANG "BENNY",224325325610,="001453","Hemoglobin A1c",=""
|
268
274
|
"Don",="007",10,"Ed"
|
269
275
|
Name,Age,,,Shoe,,,
|
270
276
|
"Alice",27,5
|
@@ -275,6 +281,8 @@ A,B,C,D
|
|
275
281
|
A,B,"C",D
|
276
282
|
A,B,C",D
|
277
283
|
A,B,"C",D
|
284
|
+
08/27/2022,="73859443",="04043260",,"Crossover @ Mathilda","CHO, JOELLE "JOJO"",08/19/2022
|
285
|
+
123,
|
278
286
|
123,"CHO, JOELLE "JOJO"",456
|
279
287
|
123,"CHO, JOELLE ""JOJO""",456
|
280
288
|
=,=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.24'
|
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-02-
|
11
|
+
date: 2023-02-17 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
|
@@ -19,7 +19,6 @@ files:
|
|
19
19
|
- LICENSE
|
20
20
|
- README.md
|
21
21
|
- censive.gemspec
|
22
|
-
- diagram/NFA to Regex.pdf
|
23
22
|
- diagram/censive@ce9d51d.png
|
24
23
|
- diagram/csv-ragel.dot
|
25
24
|
- diagram/csv.dot
|
@@ -29,9 +28,6 @@ files:
|
|
29
28
|
- diagram/diagram.dot
|
30
29
|
- diagram/diagram.rl
|
31
30
|
- lib/censive.rb
|
32
|
-
- lib/test-censive.rb
|
33
|
-
- lib/test-csv.rb
|
34
|
-
- test/a-uses-tabs-and-single-quotes-and-no-trailing-newline.tsv
|
35
31
|
homepage: https://github.com/shreeve/censive
|
36
32
|
licenses:
|
37
33
|
- MIT
|
data/diagram/NFA to Regex.pdf
DELETED
Binary file
|
data/lib/test-censive.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "./censive"
|
4
|
-
require "digest/md5"
|
5
|
-
|
6
|
-
path = ARGV[0] || "KEN_ALL.CSV"
|
7
|
-
mode = path =~ /^ken/i ? "r:cp932" : "r"
|
8
|
-
|
9
|
-
data = File.open(path, mode).read
|
10
|
-
rows = Censive.parse(data)
|
11
|
-
|
12
|
-
puts "%s %s (%d size)" % [Digest::MD5.hexdigest(rows.join), path, File.stat(path).size], ""
|
data/lib/test-csv.rb
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "csv"
|
4
|
-
require "digest/md5"
|
5
|
-
|
6
|
-
path = ARGV[0] || "KEN_ALL.CSV"
|
7
|
-
mode = path =~ /^ken/i ? "r:cp932" : "r"
|
8
|
-
|
9
|
-
data = File.open(path, mode).read
|
10
|
-
rows = CSV.parse(data)
|
11
|
-
|
12
|
-
puts "%s %s (%d size)" % [Digest::MD5.hexdigest(rows.join), path, File.stat(path).size], ""
|