From: Sven Schott Date: 2004-06-16T07:59:57+09:00 Subject: Re: How to read a .csv file into a 2D array? Very nice! I wanted to do a one-liner but I had no idea how. I love ruby. Sven On 15/06/2004, at 5:58 PM, Robert Klemme wrote: > > "Sven Schott" schrieb im Newsbeitrag > news:CBD4166F-BE86-11D8-B72B-000A9571732E@compnow.com.au... >> I was actually just about to ask that. This was how I did it(pretty >> much the same way as yours). >> >> file = File.open("file.csv", "r") >> arr =[] >> file.each { |i| arr << i.chomp.split(/\t/) } > > This can be nicely done with a one liner: > > arr = File.open("file.csv") {|io| io.inject([]) {|a, line| a << > line.chomp.split(/\t/)} } > > which has the added value of closing the file properly. > >> if you want to output it nicely you can do something like >> >> puts arr.each { |a| puts a.join("\t").to_s + "\n" } >> >> Or to a file >> >> savefile = File.new("file2.csv", "w") >> arr.each { |a| savefile << arr.join("\t").to_s + "\n" } > > File.open("file2.csv", "w") do |savefile| > arr.each { |a| savefile.puts arr.join("\t") } > end > >> Just my 2c. I think I did it well 'cause I worked on it for a while. I >> love blocks. > > Then you should get used to the habit to use them with File.open() - > that > way you ensure that file handles are closed properly. :-) > > Kind regards > > robert > > >> >> Sven >> >> >> On 14/06/2004, at 9:43 AM, Todd Gardner wrote: >> >>> Actually this is a tab delimited file, here is the .csv. >>> >>> 6/10/2004,-44.87,4INKJETS.COM 888-321-2552 CA >>> 6/8/2004,-107.26,SAFEWAY STORE00014837 SAN JOSE CA >>> 6/7/2004,-24.95,DR *REGSOFT.COM Regsoft.com GA >>> 6/3/2004,114.96,ONLINE PAYMENT >>> 5/28/2004,214.99,ONLINE PAYMENT >>> 5/27/2004,-114.96,SAFEWAY STORE00014837 SAN JOSE CA >>> 5/24/2004,-214.99,NEWEGG COMPUTERS 800-390-1119 CA >>> 3/9/2004,-40,TQ PHONE ADVANCE - CA >>> >>> How can I do this more elegantly? >>> >>> ary = [] >>> fi = File.open("test1.csv","r") >>> fo = File.open("test1.out","w") >>> fi.each { |line| >>> a = line.strip.split(',') >>> ary << a >>> fo.puts line >>> } >>> #~ # test print-out of one arrayrow >>> i=0 >>> 1.times do >>> puts ary[i] >>> i+=1 >>> end >>> >>> fi.close >>> fo.close >>> >>> Thanks again for listening to the newbie question! >>> >>> Todd >>> >> >> >> >