"puts"ing an array

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

On Tue, Jun 9, 2009 at 2:52 PM, Peter B.[email protected] 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.

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
[email protected]

2009/6/9 Rob B. [email protected]:

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

Robert K. wrote:

2009/6/9 Rob B. [email protected]:

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

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.

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
[email protected]

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