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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c30ab5dc60391c384494c4607cc74c765d507b5
4
- data.tar.gz: 8a599300be751940d1feb9b11a14fc83be187722
3
+ metadata.gz: f7078269d0f470647e84541e1db1cb8a088e804c
4
+ data.tar.gz: ae9b295bb59220995ba1d8b81d833e809a4ddf0b
5
5
  SHA512:
6
- metadata.gz: 05b7d25435ee522bb08c7b0d8ad5355d56d1b1d91816c191bf1a4d831ae2fb829af9b0201ae84f7544fd51f37abb72395f4cd1d88bdc432ac0688c6e6fd27de7
7
- data.tar.gz: 185cfbaa226f9512d56a42c76a9fbcc2c8b24de266c7ed4a91e7d1f6055608c4a5b7e6f087ac3090a673015af29c5d93e4b19d292a04fdf00c48ab5f8b4de4cc
6
+ metadata.gz: c6c0e5e5b36bc9b9606ebcc45b9f2ab6d00ef4c86f1ca1ee16740e3674a8c594f71c93cef42330f7b85c7c168934b9b4973ca73eb9cde3e4b8c92f0b7fe976f4
7
+ data.tar.gz: 99e0a39b90f299e839136bbe618189ee37d5b48089a82209d58eca81481f5d5a1a3bedaef3d332b73bc34aaac6cc2439273756a1629d789dcb71c468129b733f
@@ -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
- new[[key,value]*":"] = Misc.zip_fields(rest)
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
@@ -278,7 +278,11 @@ module Misc
278
278
  obj.each do |k,v|
279
279
  new << k.to_s << '=>' << fingerprint(v) << ' '
280
280
  end
281
- new[-1] = "}"
281
+ if new.length > 1
282
+ new[-1] = "}"
283
+ else
284
+ new << '}'
285
+ end
282
286
  new
283
287
  end
284
288
  else
@@ -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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.11
4
+ version: 5.6.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez