我正在尝试使用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'
任何人都知道怎么做?
答案 0 :(得分: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已经问过的,为什么你需要这个呢? ;)
答案 1 :(得分:2)
最简单的答案是......为什么?
我会假设它主要是语法糖,所以这里有一个小的monkeypatch应该做你想要的:
class FasterCSV::Row
def method_missing(row)
field(row)
end
end
请注意,与现有Row方法冲突的任何字段名称都不会像这样工作。