如何从ARGF中读取csv

时间:2012-10-24 19:14:34

标签: ruby csv

在Ruby 1.9中如何从ARGF中读取CSV?

我尝试了以下内容,但它没有打印任何内容:

require 'csv'
CSV(ARGF).read do |row|
    p row
end

3 个答案:

答案 0 :(得分:6)

如果你想要懒惰,你可以试试:

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

答案 1 :(得分:4)

正如在http://www.ruby-doc.org/stdlib-1.9.3/libdoc/csv/rdoc/CSV.html#label-Wrap+an+IO+Object中所说的那样使用IO(如ARGF),你需要创建一个新的cvs对象:

#!/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

然后可以通过两种方式使用它:

  1. ./readCSV.rb < path/to/my.csv
  2. ./readCSV.rb path/to/my.csv | less
  3. {{1}}

答案 2 :(得分:0)

CSV.parse(ARGF.read) do |row|

这很有效,虽然它并不懒惰。