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

···

--
Posted via http://www.ruby-forum.com/.

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

···

--
Posted via http://www.ruby-forum.com/\.

you may want to look at fastercsv.

kind regards -botp

···

On Fri, Oct 9, 2009 at 4:07 AM, Li Chen <chen_li3@yahoo.com> wrote:

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

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

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, 4:07 pm, Li Chen <chen_...@yahoo.com> wrote:

On Oct 8, 10:09 pm, botp <botp...@gmail.com> 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.

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

···

--
Posted via http://www.ruby-forum.com/\.

Rodrigo Bermejo 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

···

--
Posted via http://www.ruby-forum.com/\.