2011-12-11 59 views
2

我想使用一個CSV作爲設置文件插件的SiriProxy項目使用喚醒LAN。這個項目基於ruby。CSV數據導入到一個紅寶石數組/變量

所以CSV如下:

Name, MACAddress 
Desktop, 01-23-45-67-89-ab 
Computer, 02-46-81-02-46-cd 

等等...

所以我想發生什麼事是,當變量userAction是「桌面」來說吧,然後我查詢CSV並將MAC地址返回到另一個變量。我迷失在如何做到這一點。我已經看到了csv和faster_csv,但不知道如何讓這些工作像這樣。

在此先感謝!

回答

8

如果您嘗試在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文件。

+0

感謝一大堆!我幾乎在那裏。你是最棒的 – IMcD23

5

我將演示污垢簡單的方法。從長遠來看,大衛格雷森做的所有事情都是非常有效的,但對於幾次運行的腳本來說,這可能就足夠了。

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 => ', '})