rbbt-util 5.6.11 → 5.6.12
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/lib/rbbt/tsv/accessor.rb +50 -3
- data/lib/rbbt/util/misc.rb +5 -1
- data/share/rbbt_commands/tsv/unzip +5 -2
- data/test/rbbt/tsv/test_accessor.rb +12 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7078269d0f470647e84541e1db1cb8a088e804c
|
4
|
+
data.tar.gz: ae9b295bb59220995ba1d8b81d833e809a4ddf0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c6c0e5e5b36bc9b9606ebcc45b9f2ab6d00ef4c86f1ca1ee16740e3674a8c594f71c93cef42330f7b85c7c168934b9b4973ca73eb9cde3e4b8c92f0b7fe976f4
|
7
|
+
data.tar.gz: 99e0a39b90f299e839136bbe618189ee37d5b48089a82209d58eca81481f5d5a1a3bedaef3d332b73bc34aaac6cc2439273756a1629d789dcb71c468129b733f
|
data/lib/rbbt/tsv/accessor.rb
CHANGED
@@ -548,21 +548,68 @@ Example:
|
|
548
548
|
new
|
549
549
|
end
|
550
550
|
|
551
|
-
def unzip(field = 0)
|
551
|
+
def unzip(field = 0, merge = false)
|
552
552
|
new = {}
|
553
553
|
field_pos = self.identify_field field
|
554
554
|
|
555
555
|
self.through do |key,values|
|
556
556
|
field_values = values.delete_at field_pos
|
557
557
|
zipped = values.zip_fields
|
558
|
-
field_values.zip(zipped) do |value, *rest|
|
559
|
-
|
558
|
+
field_values.zip(zipped).each do |value, *rest|
|
559
|
+
k = [key,value]*":"
|
560
|
+
if merge and new.include? k
|
561
|
+
new[k] = Misc.zip_fields(rest)
|
562
|
+
else
|
563
|
+
new[k] = Misc.zip_fields(rest)
|
564
|
+
end
|
560
565
|
end
|
561
566
|
end
|
562
567
|
|
563
568
|
self.annotate new
|
564
569
|
new.type = :list
|
565
570
|
|
571
|
+
new.key_field = [self.key_field, self.fields[field_pos]] * ":"
|
572
|
+
new_fields = self.fields.dup
|
573
|
+
new_fields.delete_at field_pos
|
574
|
+
new.fields = new_fields
|
575
|
+
|
576
|
+
new
|
577
|
+
end
|
578
|
+
|
579
|
+
def unzip(field = 0, merge = false)
|
580
|
+
new = {}
|
581
|
+
self.annotate new
|
582
|
+
|
583
|
+
field_pos = self.identify_field field
|
584
|
+
new.with_unnamed do
|
585
|
+
if merge
|
586
|
+
self.through do |key,values|
|
587
|
+
field_values = values.delete_at field_pos
|
588
|
+
zipped = values.zip_fields
|
589
|
+
field_values.zip(zipped).each do |field_value,rest|
|
590
|
+
k = [key,field_value]*":"
|
591
|
+
if new.include? k
|
592
|
+
new[k] = Misc.zip_fields(Misc.zip_fields(new[k]) << rest)
|
593
|
+
else
|
594
|
+
new[k] = rest.collect{|v| [v]}
|
595
|
+
end
|
596
|
+
end
|
597
|
+
end
|
598
|
+
new.type = :double
|
599
|
+
else
|
600
|
+
self.through do |key,values|
|
601
|
+
field_values = values.delete_at field_pos
|
602
|
+
zipped = values.zip_fields
|
603
|
+
field_values.zip(zipped).each do |field_value,rest|
|
604
|
+
k = [key,field_value]*":"
|
605
|
+
new[k] = rest
|
606
|
+
end
|
607
|
+
end
|
608
|
+
new.type = :list
|
609
|
+
end
|
610
|
+
end
|
611
|
+
|
612
|
+
|
566
613
|
new.key_field = [self.key_field, self.fields[field_pos]] * ":"
|
567
614
|
new_fields = self.fields.dup
|
568
615
|
new_fields.delete_at field_pos
|
data/lib/rbbt/util/misc.rb
CHANGED
@@ -3,12 +3,15 @@
|
|
3
3
|
require 'rbbt-util'
|
4
4
|
require 'rbbt/util/simpleopt'
|
5
5
|
|
6
|
-
options = SOPT.get("-tch--tokyocabinet:-tcb--tokyocabinet_bd")
|
6
|
+
options = SOPT.get("-tch--tokyocabinet:-tcb--tokyocabinet_bd:-f--field Field to append to key:-m--merge Consider multiple values even after unzip")
|
7
7
|
|
8
8
|
file = ARGV.shift
|
9
9
|
|
10
10
|
file = STDIN if file == '-'
|
11
11
|
|
12
|
+
field = options[:field] || 0
|
13
|
+
merge = options[:merge] || false
|
14
|
+
|
12
15
|
case
|
13
16
|
when options[:tokyocabinet]
|
14
17
|
tsv = Persist.open_tokyocabinet(file, false)
|
@@ -22,4 +25,4 @@ else
|
|
22
25
|
tsv = TSV.open(file)
|
23
26
|
end
|
24
27
|
|
25
|
-
puts tsv.unzip.to_s
|
28
|
+
puts tsv.unzip(field, merge).to_s
|
@@ -185,4 +185,16 @@ row3 A|AA|AAA|AAA B Id3 3
|
|
185
185
|
assert_equal (0..10-1).to_a, pos
|
186
186
|
end
|
187
187
|
|
188
|
+
def test_unzip
|
189
|
+
content =<<-EOF
|
190
|
+
#Id ValueA ValueB OtherID
|
191
|
+
row1 a|A b|B Id1|Id2
|
192
|
+
row2 aa|aa|AA|AA b1|b2|B1|B2 Id1|Id1|Id2|Id2
|
193
|
+
EOF
|
194
|
+
|
195
|
+
TmpFile.with_file(content) do |filename|
|
196
|
+
tsv = TSV.open(filename, :sep => /\s+/)
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
188
200
|
end
|