【问题标题】:How to read csv from ARGF如何从 ARGF 读取 csv
【发布时间】: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 csv


【解决方案1】:

如果你想偷懒,你可以试试:

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

【讨论】:

    【解决方案2】:

    正如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
    

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

    1. cat path/to/my.csv | ./readCSV.rb | less # for useless use of cat
    2. ./readCSV.rb < path/to/my.csv
    3. ./readCSV.rb path/to/my.csv | less

    【讨论】:

      【解决方案3】:
      CSV.parse(ARGF.read) do |row|
      

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

      【讨论】:

        猜你喜欢
        • 2022-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 2013-06-13
        • 2019-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多