【发布时间】:2012-10-14 21:37:56
【问题描述】:
在 Ruby 1.9 中,我如何从 ARGF 读取 CSV?
我尝试了以下方法,但什么也没打印:
require 'csv'
CSV(ARGF).read do |row|
p row
end
【问题讨论】:
-
你为什么要从 ARGF 阅读? ARGV 对于 CSV 更为典型。
在 Ruby 1.9 中,我如何从 ARGF 读取 CSV?
我尝试了以下方法,但什么也没打印:
require 'csv'
CSV(ARGF).read do |row|
p row
end
【问题讨论】:
如果你想偷懒,你可以试试:
CSV.new(ARGF.file).each do |row|
...
end
来源:
http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#label-Wrap+an+IO+Object
【讨论】:
正如http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#label-Wrap+an+IO+Object 中所说,要使用 IO(如 ARGF),您需要创建一个新的 cvs 对象:
csv = CSV.new(io, options)
这样的例子可以正常工作:
#!/usr/bin/env ruby
#file : readCSV.rb
require "csv"
csv = CSV.new(ARGF, {:col_sep=>";", :headers=>:first_row})
csv.each do |line|
p line.to_s
end
它可以通过两种方式使用:
cat path/to/my.csv | ./readCSV.rb | less # for useless use of cat./readCSV.rb < path/to/my.csv./readCSV.rb path/to/my.csv | less【讨论】:
CSV.parse(ARGF.read) do |row|
这很有效,虽然它并不懒。
【讨论】: