2010-03-05 47 views
1

我试图查询表,获取所有记录并将结果保存为CSV文件。 这是我迄今所做的:将查询的输出保存到Ruby中的文本文件中

require 'OCI8' 
conn = OCI8.new('scott','tiger','020') 
file = File.open('output.csv','w') do |f| 
conn.exec('select * from emp') do |e| 
    f.write log.join(',') 
end 
end 

..虽然它生成一个CSV文件,问题是,所有的记录得到保存成一条线。我怎样才能把这些数据放在一个新的记录上?

回答

2

好了,你可以用f.puts代替f.write那里,但我建议你看一看CSV模块:

http://ruby-doc.org/stdlib/libdoc/csv/rdoc/index.html

outfile = File.open('csvout', 'wb') 
CSV::Writer.generate(outfile) do |csv| 
    csv << ['c1', nil, '', '"', "\r\n", 'c2'] 
    ... 
end 

outfile.close 

PS:其实,还有另外一个CSV库调用FasterCSV,它在Ruby 1.9的标准库中变成了CSV。但总的来说,任何应该比自己写作更好。

+0

我如何将每列映射到一个单独的值?对不起,如果这个Q听起来很愚蠢,但是文件处理(&Ruby)是我吸取并且想要克服的东西,我认为这将是一个很好的学习方式。 – Sathya 2010-03-05 23:22:39

+0

我不明白你的问题,你是什么意思的“单独的价值”。正如我从OCI8文档中看到的,块中的“e”已经是一个数组,您可以使用'csv << e'将它写入CSV行。 – 2010-03-06 00:19:56

+0

感谢您的帮助,我完成了! – Sathya 2010-03-08 15:37:32

相关问题