Write a file

Hi all,

I use the following script to write a 2D array. I wonder if there is
improvement for them.

Thanks,

Li

############script##########
data_all=[
(1…10).to_a,
(1…10).to_a,
(1…10).to_a,
(1…10).to_a
]# a 2D array

File.open(‘test3.txt’,‘w’) do |a_f|
data_all.each do |row |
row.each {|e| a_f.print e ; a_f.print “\t”}
a_f.puts
end

end

Li Chen wrote:

Hi all,

I use the following script to write a 2D array. I wonder if there is
improvement for them.

Thanks,

Li

############script##########
data_all=[
(1…10).to_a,
(1…10).to_a,
(1…10).to_a,
(1…10).to_a
]# a 2D array

File.open(‘test3.txt’,‘w’) do |a_f|
data_all.each do |row |
row.each {|e| a_f.print e ; a_f.print “\t”}
a_f.puts
end

end

What you have is good enough.
There are a few things which could be better, for example formatting
(sprintf), and error reporting, also what I would do is to encapsulate
this code into a function so that you can re use it later on.

def array2D_to_file(array2D,file_name)


end

my 2 cents

Rodrigo B. wrote:

What you have is good enough.
There are a few things which could be better, for example formatting
(sprintf), and error reporting, also what I would do is to encapsulate
this code into a function so that you can re use it later on.

def array2D_to_file(array2D,file_name)


end

my 2 cents

Unfortunately Excel doesn’t see the formatted outputs correctly, so I
don’t perform the formatting.

Li

On Fri, Oct 9, 2009 at 4:07 AM, Li Chen [email protected] wrote:

I use the following script to write a 2D array. I wonder if there is
improvement for them.

you may want to look at fastercsv.

kind regards -botp

On Oct 8, 4:07 pm, Li Chen [email protected] wrote:

          a_f.puts
   end

end

I would do something more along the lines of this:

File.open(‘test.txt’, ‘w’) do |file|
data_all.each do |row|
file.puts row.join("\t")
end
end

On Oct 8, 10:09 pm, botp [email protected] wrote:

you may want to look at fastercsv.

kind regards -botp

This is tab-separated, but if Excel is the ultimate goal, I guess that
CSV would work. Fortunately, I don’t use Excel, so I don’t know much
along those lines.

#I try to shorten it

File.open(‘test3.txt’,‘w’) do |a_f|
a_f.print data_all.map{|row| row.join("\t")}.join("\n")
end

#but for Excel, csv file is better

File.open(‘test3.csv’,‘w’) do |a_f|
a_f.print data_all.map{|row| row.join(",")}.join("\n")
end

Thairuby TH wrote:

#I try to shorten it

File.open(‘test3.txt’,‘w’) do |a_f|
a_f.print data_all.map{|row| row.join("\t")}.join("\n")
end

#but for Excel, csv file is better

File.open(‘test3.csv’,‘w’) do |a_f|
a_f.print data_all.map{|row| row.join(",")}.join("\n")
end

Thank you very much for the code. But I still like to do the format
after file
is read by Excel.

Li