Write output to multiple files

M

Milo Thurston

I have encountered something I thought would be trivial but I can't
quite get it to work properly. I have a load of data that is stored in
various locations and need to create several files, one for each
location, each containing the data in that location. Getting an array of
objects containing the file name and location is easy, so I was thinking
along the lines of this pseudocode:

data.each do |d|
output_filename = "#{d.location}.txt"
if !File.exists?(output_filename)
# create it and write d.file_name to it
else
# simply write d.file_name to it
end
end
# close all open files

The locations of the data are numerical ids so I could expect filenames
like 1.txt, 2.txt and so on, and I have also sorted them before
processing so that they could be opened and filled sequentially. But, it
is not clear to me how to properly manage the file handles so any
suggestions would be welcome.
 
M

Milo Thurston

Robert said:
If I understood you properly:

# untested
last_name = nil
io = nil
begin
data.sort_by {|d| d.location}.each do |d|
output_filename = "#{d.location}.txt"

unless output_filename == last_name
io.close rescue nil
io = File.open(output_filename, "a")
end

io.puts d.file_name
ensure
io.close rescue nil
end


Yes, that looks like just the job, thanks. I was trying something
similar but without the begin/ensure/end block and that is presumably
why I was having difficulty.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top