# Output Manipulation

**URL:** <https://www.ruby-forum.com/t/output-manipulation/174151>\
**Category:** Ruby\
**Created:** [August 21, 2009, 11:49am UTC](https://www.ruby-forum.com/t/output-manipulation/174151 "2009-08-21T11:49:32Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![rookie\_core](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/65b543/32.png) [@rookie\_core](https://www.ruby-forum.com/u/rookie_core)\
**Post date:** [August 21, 2009, 11:49am UTC](https://www.ruby-forum.com/t/output-manipulation/174151/1 "2009-08-21T11:49:32Z")

</div>

puts “\nMODULE : "  
Module.constants.sort.select { |x| eval(x.to\_s).instance\_of? Module }  
puts”\nCLASSES : "

puts Module.constants.sort.select { |x|  
c = eval(x.to\_s)  
c.is\_a? Class and not c.ancestors.include? Exception  
}  
puts " \nEXCEPTIONS :"  
puts Module.constants.sort.select {|x|  
c = eval(x.to\_s)  
c.instance\_of? Class and c.ancestors.include? Exception  
}

Above code is taken from ‘The Ruby P.ming Language’; it prints all  
the modules , clases and exception classes when the interpreter is  
loaded ; however i want the output in row column form…please help

---

<div class="post-metadata">

**Author:** ![rookie\_core](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/65b543/32.png) [@rookie\_core](https://www.ruby-forum.com/u/rookie_core)\
**Post date:** [August 21, 2009, 12:41pm UTC](https://www.ruby-forum.com/t/output-manipulation/174151/2 "2009-08-21T12:41:02Z")

</div>

Ishan Nag wrote:

> puts “\nMODULE : "  
> Module.constants.sort.select { |x| eval(x.to\_s).instance\_of? Module }  
> puts”\nCLASSES : "  
> however i want the output in row column form…please help

print “\nMODULE : "  
print Module.constants.sort.select { |x| eval(x.to\_s).instance\_of?  
Module }[1, 20].join(”, “)  
puts”\nCLASSES : "

---

<div class="post-metadata">

**Author:** ![rookie\_core](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/65b543/32.png) [@rookie\_core](https://www.ruby-forum.com/u/rookie_core)\
**Post date:** [August 21, 2009, 8:02pm UTC](https://www.ruby-forum.com/t/output-manipulation/174151/3 "2009-08-21T20:02:59Z")

</div>

Thanks stud7 for the reply but what i was looking for was row column  
representation of “Modules:” & “Classes” & “Exception classes”…i  
would be glad if you could help with that

---

<div class="post-metadata">

**Author:** ![rookie\_core](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/65b543/32.png) [@rookie\_core](https://www.ruby-forum.com/u/rookie_core)\
**Post date:** [August 21, 2009, 8:17pm UTC](https://www.ruby-forum.com/t/output-manipulation/174151/4 "2009-08-21T20:17:09Z")

</div>

Ishan Nag wrote:

> Thanks stud7 for the reply but what i was looking for was row column  
> representation of “Modules:” & “Classes” & “Exception classes”…i  
> would be glad if you could help with that

How about:

modules = [“Modules”, “A”, “B”, “C”]  
classes = [“Classes”, “X”, “Y”, “Z”]  
exceptions = [“Exceptions”, “E1”, “E2”, “E3”]

names = []  
names \<\< modules \<\< classes \<\< exceptions  
results = names.transpose  
results.each do |arr|  
arr.each do |name|  
print name.ljust(20)  
end  
puts  
end

–output:–  
Modules Classes Exceptions  
A X E1  
B Y E2  
C Z E3

---

<div class="post-metadata">

**Author:** ![rookie\_core](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/65b543/32.png) [@rookie\_core](https://www.ruby-forum.com/u/rookie_core)\
**Post date:** [August 22, 2009, 6:26am UTC](https://www.ruby-forum.com/t/output-manipulation/174151/5 "2009-08-22T06:26:15Z")

</div>

7stud – wrote:

> Ishan Nag wrote:
> 
> > Thanks stud7 for the reply but what i was looking for was row column  
> > representation of “Modules:” & “Classes” & “Exception classes”…i  
> > would be glad if you could help with that
> 
> How about:
> 
> modules = [“Modules”, “A”, “B”, “C”]  
> classes = [“Classes”, “X”, “Y”, “Z”]  
> exceptions = [“Exceptions”, “E1”, “E2”, “E3”]
> 
> names = []  
> names \<\< modules \<\< classes \<\< exceptions  
> results = names.transpose  
> results.each do |arr|  
> arr.each do |name|  
> print name.ljust(20)  
> end  
> puts  
> end
> 
> –output:–  
> Modules Classes Exceptions  
> A X E1  
> B Y E2  
> C Z E3

That doesn’t work too good unless each heading has the same number of  
names. Here is a more general solution:

modules = [“Modules”, “A”, “B”, “C”]  
classes = [“Classes”, “X”, “Y”]  
exceptions = [“Exceptions”, “E1”, “E2”, “E3”, “E4”]

def my\_transpose(\*arrays)  
longest = arrays.max do |arr1, arr2|  
arr1.length \<=\> arr2.length  
end

transposed = []  
longest.length.times do |i|  
row = []  
arrays.each do |arr|  
val = arr.at(i)  
if val  
row \<\< val  
else  
row \<\< “”  
end  
end

```
transposed << row

```

end

transposed  
end

results = my\_transpose(modules, classes, exceptions)  
p results

results.each do |arr|  
arr.each do |name|  
if name  
print name.ljust(20)  
else  
print " " \* 20  
end  
end  
puts  
end

–output:–  
Modules Classes Exceptions  
A X E1  
B Y E2  
C E3  
E4

---

<div class="post-metadata">

**Author:** ![rookie\_core](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/65b543/32.png) [@rookie\_core](https://www.ruby-forum.com/u/rookie_core)\
**Post date:** [August 24, 2009, 4:26pm UTC](https://www.ruby-forum.com/t/output-manipulation/174151/6 "2009-08-24T16:26:00Z")

</div>

thanks stud7…that was very helpful

---

<div class="post-metadata">

**Author:** ![rookie\_core](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/65b543/32.png) [@rookie\_core](https://www.ruby-forum.com/u/rookie_core)\
**Post date:** [August 22, 2009, 6:31am UTC](https://www.ruby-forum.com/t/output-manipulation/174151/7 "2009-08-22T06:31:00Z")

</div>

7stud – wrote:

> results.each do |arr|  
> arr.each do |name|  
> if name  
> print name.ljust(20)  
> else  
> print " " \* 20  
> end  
> end  
> puts  
> end

That section can now be reduced to:

results.each do |arr|  
arr.each do |name|  
print name.ljust(20)  
end  
puts  
end
