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 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