rbbt-util 5.6.11 → 5.6.12
Sign up to get free protection for your applications and to get access to all the features.
- 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
|