1

我正在尝试使用 Ruby 概括数据检索机制,但似乎无法找到一种方法来检索 CSV 文件并通过使用点运算符访问行的列之一,如下所示:

假设我有一个 CSV 表:

#some_file.csv
name,age
albert,13

我从中创建了一个 FasterCSV 表:

a = FasterCSV.new(File.open('some_file.csv'), :headers => :first_row)

然后,当访问一行时,我想说:

a[0].name
=> 'albert'

代替

a[0]['name']
=> 'albert'

有谁知道该怎么做?

4

2 回答 2

3

好吧,如果你没有找到一个,你总是可以猴子补丁FasterCSV::Row类,比如:

class FasterCSV::Row
  def method_missing(m,*args)
    if self.field?(m.to_s)
      return self[m.to_s]
    else
      super
    end
  end
end

(我自己没有尝试过代码。)

PS。当您概括数据检索机制时,我假设 CSV 只是您计划支持的几个数据源之一。那么合乎逻辑的事情是为每个数据源创建一个包装类,并使用一些通用接口(可能使用也可能不使用访问器来访问行字段)。但在它下面仍然应该以通常的方式访问 CSV 行,使用[]方法。所以,正如 Glenjamin 已经问过的,你为什么需要这个?;)

于 2010-03-09T16:38:20.653 回答
2

最简单的答案是……为什么?

我假设它主要是语法糖,所以这里有一个小猴子补丁,应该可以满足你的需求:

class FasterCSV::Row
  def method_missing(row)
    field(row)
  end
end

请注意,任何与现有 Row 方法冲突的字段名称都不会像这样工作。

于 2010-03-09T16:40:40.337 回答