Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将CSV数据导入ruby数组/变量_Ruby On Rails_Ruby_Csv_Fastercsv - Fatal编程技术网

Ruby on rails 将CSV数据导入ruby数组/变量

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,但不知道如何让它们像这样工作 提

我正在尝试使用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,但不知道如何让它们像这样工作


提前谢谢

如果您尝试在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:',')。