Forum: Ruby Please help with fixing output

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
lionbarrage (Guest)
on 2009-03-05 21:25
(Received via mailing list)
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
William J. (Guest)
on 2009-03-06 02:45
(Received via mailing list)
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
lionbarrage (Guest)
on 2009-03-06 18:27
(Received via mailing list)
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 |
lionbarrage (Guest)
on 2009-03-06 19:06
(Received via mailing list)
On Mar 5, 4:43 pm, "William J." <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.
lionbarrage (Guest)
on 2009-03-13 19:05
(Received via mailing list)
On Mar 6, 10:04 am, lionbarrage <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!
This topic is locked and can not be replied to.