Ruby on rails 将CSV数据导入ruby数组/变量
我正在尝试使用CSV作为SiriProxy项目使用wake on lan的插件中的设置文件。这个项目是基于ruby的 因此,csv如下所示:Ruby on rails 将CSV数据导入ruby数组/变量,ruby-on-rails,ruby,csv,fastercsv,Ruby On Rails,Ruby,Csv,Fastercsv,我正在尝试使用CSV作为SiriProxy项目使用wake on lan的插件中的设置文件。这个项目是基于ruby的 因此,csv如下所示: Name, MACAddress Desktop, 01-23-45-67-89-ab Computer, 02-46-81-02-46-cd 等等 因此,我希望发生的是,当变量userAction是“Desktop”时,例如,我查询CSV,它将MAC地址返回到另一个变量中。我不知道该怎么做。我见过csv和更快的_csv,但不知道如何让它们像这样工作 提
Name, MACAddress
Desktop, 01-23-45-67-89-ab
Computer, 02-46-81-02-46-cd
等等
因此,我希望发生的是,当变量userAction是“Desktop”时,例如,我查询CSV,它将MAC地址返回到另一个变量中。我不知道该怎么做。我见过csv和更快的_csv,但不知道如何让它们像这样工作
提前谢谢 如果您尝试在Ruby 1.9中使用FasterCSV,您会收到一条警告,指出标准Ruby 1.9 CSV库实际上更快。所以我使用了标准的Ruby CSV库。这应该可以在Ruby 1.9或1.8.7中使用
require 'csv'
module MyConfig
@mac_address_hash = {}
CSV.foreach("config.csv") do |row|
name, mac_address = row
next if name == "Name"
@mac_address_hash[name] = mac_address
end
puts "Now we have this hash: " + @mac_address_hash.inspect
def self.mac_address(computer_name)
@mac_address_hash[computer_name]
end
end
puts "MAC address of Desktop: " + MyConfig.mac_address("Desktop")
此代码的输出为:
Now we have this hash: {"Computer"=>" 02-46-81-02-46-cd", "Desktop"=>" 01-23-45-67-89-ab"}
MAC address of Desktop: 01-23-45-67-89-ab
现在我想让你们仔细阅读这段代码的每一行,试着理解它的作用以及为什么它是必要的。从长远来看,这将使您成为一名更好的程序员
您可以改进此代码,以便在第一次需要CSV文件时延迟加载该文件。我将演示最简单的方法。从长远来看,像大卫·格雷森(David Grayson)那样将所有内容填充到哈希中要有效得多,但对于一个运行了几次的脚本来说,这可能就足够了
require 'csv'
config = CSV.read('config.csv')
config.shift # Get rid of the header
# We're done! Start using like so:
p config.assoc("Computer").last #=>" 02-46-81-02-46-cd"
如果不需要前导空格:
config = CSV.read('config.csv', {:col_sep => ', '})
非常感谢!我就快到了。你是最好的,这个解决方案太复杂了@steenslag的更为地道。我已经添加了一条注释,说明如何将CSV.read()的结果转换为哈希。这应该是答案,只需添加一条——使用
Hash[arr]
将CSV.read()的结果转换为哈希:Hash[CSV.read('config.CSV',col sep:',')。