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