# Please help with fixing output

**URL:** <https://www.ruby-forum.com/t/please-help-with-fixing-output/162110>\
**Category:** Ruby\
**Created:** [March 5, 2009, 8:25pm UTC](https://www.ruby-forum.com/t/please-help-with-fixing-output/162110 "2009-03-05T20:25:34Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![lionbarrage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/9fc348/32.png) [@lionbarrage](https://www.ruby-forum.com/u/lionbarrage)\
**Post date:** [March 5, 2009, 8:25pm UTC](https://www.ruby-forum.com/t/please-help-with-fixing-output/162110/1 "2009-03-05T20:25:34Z")

</div>

Hi all,

I’m having trouble with a hash output.

The original files are:  
File 1  
ALPHA|OMEGA|GAMMA  
1|2|3  
4|5|6

File 2  
EPSILON|GREEK|OMEGA|BETA  
7|8|9|0  
12||13|  
10|11|5|15

and I’m using the following code:

sets = Hash.new { | h, k | h[k] = [] } # hash that contains a new  
array  
# for every new key  
%w(file1.txt file2).each do | filename |  
File.open(filename) do | f |  
names = f.gets.chop.split(’|’)  
f.each do | line |  
names.zip(line.chop.split(’|’)).each do | name, value |  
sets[name] \<\< value.to\_i if value and value !~ /^\s\*$/  
end  
end  
end  
end

sets.values.each { | a | a.uniq! }

puts sets.keys.map { | k | ‘%8s ’ % k }.join(’|’)

rows = sets.values.map { | a | a.size }.max

(1…rows).zip(\*sets.values) do | row |  
row.shift  
puts row.map { | v | if v then ‘%8s ’ % v else ’ ‘\*9 end }.join  
(’|’)  
end

but the output seems a little strange and I’m not sure why that is.

Output should be  
ALPHA | OMEGA | GAMMA | EPSILON | GREEK | BETA  
1 | 2 | 3 | | |  
4 | 5 | 6 | 10 | 11 | 15  
| 9 | | 7 | 8 | 0  
| 13 | | 12 | |

instead it gets:  
ALPHA | OMEGA | GAMMA | EPSILON | GREEK | BETA  
1 | 2 | 3 | 7 | 8 | 0  
4 | 5 | 6 | 12 | 11 | 15  
| 9 | | 10 | |  
| 13 | | | |

Please advise on what’s going on.

Thanks

---

<div class="post-metadata">

**Author:** ![lionbarrage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/9fc348/32.png) [@lionbarrage](https://www.ruby-forum.com/u/lionbarrage)\
**Post date:** [March 6, 2009, 1:45am UTC](https://www.ruby-forum.com/t/please-help-with-fixing-output/162110/2 "2009-03-06T01:45:44Z")

</div>

lionbarrage wrote:

> 10|11|5|15  
> f.each do | line |
> 
> Output should be  
> ALPHA | OMEGA | GAMMA | EPSILON | GREEK | BETA  
> 1 | 2 | 3 | | |  
> 4 | 5 | 6 | 10 | 11 | 15  
> | 9 | | 7 | 8 | 0  
> | 13 | | 12 | |

This doesn’t look right. Consider the Epsilon column.  
In the file the column is

7  
12  
10

And you want the output to be

10  
7  
12

---

<div class="post-metadata">

**Author:** ![lionbarrage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/9fc348/32.png) [@lionbarrage](https://www.ruby-forum.com/u/lionbarrage)\
**Post date:** [March 6, 2009, 5:27pm UTC](https://www.ruby-forum.com/t/please-help-with-fixing-output/162110/3 "2009-03-06T17:27:20Z")

</div>

On Mar 5, 12:51 pm, “William J.” \<\> wrote:

> > ```
> > # for every new key
> > 
> > ```
> 
> > end  
> > instead it gets:  
> > Try this.  
> > line.strip.split("|").each\_with\_index{|v,i|  
> > sets.values.each{ |a| a.uniq! }

Unfortunately no luck, it did the first row right, but the 2nd row is  
supposed to contain 4,5,6,10,11,15 . 7.8.9 should have |||7|8|9

ALPHA | OMEGA | GAMMA | EPSILON | GREEK | BETA  
1 | 2 | 3 | | |  
4 | 5 | 6 | 7 | 8 | 0  
| 9 | | 12 | | 15  
| 13 | | 10 | 11 |

---

<div class="post-metadata">

**Author:** ![lionbarrage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/9fc348/32.png) [@lionbarrage](https://www.ruby-forum.com/u/lionbarrage)\
**Post date:** [March 6, 2009, 6:06pm UTC](https://www.ruby-forum.com/t/please-help-with-fixing-output/162110/4 "2009-03-06T18:06:38Z")

</div>

On Mar 5, 4:43 pm, “William J.” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > 12||13|  
> > f.each do | line |
> 
> > Output should be  
> > 12  
> > 10
> 
> And you want the output to be
> 
> 10  
> 7  
> 12

Ahh, I see where it causes confusion. The idea is to combine the two  
columns using Omega.

So the row  
ALPHA|OMEGA|GAMMA  
4|5|6 in file 1 and the row  
EPSILON|GREEK|OMEGA|BETA  
10|11|5|15  
in file 2 gets combined but the rest, who don’t have a match in the  
other file, does not.

---

<div class="post-metadata">

**Author:** ![lionbarrage](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/9fc348/32.png) [@lionbarrage](https://www.ruby-forum.com/u/lionbarrage)\
**Post date:** [March 13, 2009, 6:05pm UTC](https://www.ruby-forum.com/t/please-help-with-fixing-output/162110/5 "2009-03-13T18:05:55Z")

</div>

On Mar 6, 10:04 am, lionbarrage [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > > ```
> > > # for every new key
> > > 
> > > ```
> 
> > > end  
> > > This doesn’t look right. Consider the Epsilon column.  
> > > 12  
> > > other file, does not.  
> > > I am still confused on how to do this. Tried using SQL Lite but Full  
> > > outer joins are not supported. Any ideas would be great!

Thanks!
