# "puts"ing an array

**URL:** <https://www.ruby-forum.com/t/puts-ing-an-array/169843>\
**Category:** Ruby\
**Created:** [June 9, 2009, 2:52pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843 "2009-06-09T14:52:38Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [June 9, 2009, 2:52pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843/1 "2009-06-09T14:52:38Z")

</div>

Hi,  
In the “pickaxe” book I see how to use a “puts” to populate a file with  
data. I try the same thing, and, it works, but, it’s listing the data as  
an array. How can I get separate lines for each item in the array?  
Thanks,  
Peter

In the book:  
File.open(“output.txt”, “w”) do |file|  
file.puts “Hello”  
file.puts “1 + 2 = #{1+2}”  
end

# Now read the file in and print its contents to STDOUT

puts File.read(“output.txt”)  
produces:  
Hello  
1 + 2 = 3

My script:  
Dir.chdir(“L:/png/69000”)  
files = Dir.glob("\*.png")  
File.open(“F:/workflows/graphics/receipts/pngfiles.txt”, “w”) do |file|  
file.puts “#{files}”  
end  
produces:  
69116.png69251.png69391.pngAZ69080.pngAZ69982.pngcx69362.pngcx69363.png  
. . .

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [June 9, 2009, 3:32pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843/2 "2009-06-09T15:32:03Z")

</div>

On Tue, Jun 9, 2009 at 2:52 PM, Peter B.[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> file.puts “1 + 2 = #{1+2}”  
> File.open(“F:/workflows/graphics/receipts/pngfiles.txt”, “w”) do |file|  
> file.puts “#{files}”  
> end  
> produces:  
> 69116.png69251.png69391.pngAZ69080.pngAZ69982.pngcx69362.pngcx69363.png

Dir.glob returns an array, so two possibilities are (untested):

File.open(“F:/workflows/graphics/receipts/pngfiles.txt”, “w”) do |file|  
file.puts files.join(“\n”)  
end

File.open(“F:/workflows/graphics/receipts/pngfiles.txt”, “w”) do |file|  
files.each {|f| file.puts f }  
end

Hope this helps,

Jesus.

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [June 9, 2009, 3:48pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843/3 "2009-06-09T15:48:30Z")

</div>

On Jun 9, 2009, at 8:52 AM, Peter B. wrote:

> File.open(“output.txt”, “w”) do |file|  
> Dir.chdir(“L:/png/69000”)  
> files = Dir.glob(“\*.png”)  
> Dir.glob returns an Array
> 
> File.open(“F:/workflows/graphics/receipts/pngfiles.txt”, “w”) do |  
> file|  
> file.puts “#{files}”  
> end  
> The default Array#to\_s is like Array#join(‘’). You probably want to  
> do either:  
> file.puts files.join(“\n”)  
> or iterate on the files:  
> files.each do |pngfilename|  
> file.puts pngfilename  
> end
> 
> produces:  
> 69116  
> .png69251.png69391.pngAZ69080.pngAZ69982.pngcx69362.pngcx69363.png  
> . . .

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [June 9, 2009, 4:08pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843/4 "2009-06-09T16:08:27Z")

</div>

2009/6/9 Rob B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > File.open(“output.txt”, “w”) do |file|  
> > Dir.chdir(“L:/png/69000”)  
> > file.puts files.join(“\n”)  
> > or iterate on the files:  
> > files.each do |pngfilename|  
> > file.puts pngfilename  
> > end

It’s even simpler:

file.puts files

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [June 9, 2009, 4:39pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843/5 "2009-06-09T16:39:55Z")

</div>

Robert K. wrote:

> 2009/6/9 Rob B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > > File.open(“output.txt”, “w”) do |file|  
> > > Dir.chdir(“L:/png/69000”)  
> > > ï¿½file.puts files.join(“\n”)  
> > > or iterate on the files:  
> > > ï¿½files.each do |pngfilename|  
> > > ï¿½ ï¿½file.puts pngfilename  
> > > ï¿½end
> 
> It’s even simpler:
> 
> file.puts files
> 
> Kind regards
> 
> robert

Wow. Sometimes Ruby is too beautifully simple.  
Thanks, Robert.  
Peter

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [June 9, 2009, 4:47pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843/6 "2009-06-09T16:47:59Z")

</div>

> Sometimes Ruby is too beautifully simple.

It inspired my general rule that if something is not looking beautiful -  
or if it looks downright ugly - there must be a better way.

---

<div class="post-metadata">

**Author:** ![bodikp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e79b87/32.png) [@bodikp](https://www.ruby-forum.com/u/bodikp)\
**Post date:** [June 9, 2009, 3:50pm UTC](https://www.ruby-forum.com/t/puts-ing-an-array/169843/7 "2009-06-09T15:50:01Z")

</div>

Rob B. wrote:

> On Jun 9, 2009, at 8:52 AM, Peter B. wrote:
> 
> > File.open(“output.txt”, “w”) do |file|  
> > Dir.chdir(“L:/png/69000”)  
> > files = Dir.glob(“\*.png”)  
> > Dir.glob returns an Array
> > 
> > File.open(“F:/workflows/graphics/receipts/pngfiles.txt”, “w”) do |  
> > file|  
> > file.puts “#{files}”  
> > end  
> > The default Array#to\_s is like Array#join(‘’). You probably want to  
> > do either:  
> > file.puts files.join(“\n”)  
> > or iterate on the files:  
> > files.each do |pngfilename|  
> > file.puts pngfilename  
> > end
> > 
> > produces:  
> > 69116  
> > .png69251.png69391.pngAZ69080.pngAZ69982.pngcx69362.pngcx69363.png  
> > . . .
> 
> -Rob
> 
> Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
> removed\_email\_address@domain.invalid

Thank you very much, gentlemen. Yes, I did actually figure it out by  
simply making two loops, one for the file and one for the png files  
inside it.  
Cheers,  
Peter
