4

SiriProxyプロジェクトがwake-on-lanを使用するためのプラグインの設定ファイルとしてCSVを使用しようとしています。このプロジェクトはルビーに基づいています。

したがって、csvは次のようになります。

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

等々...

たとえば、変数userActionが「Desktop」の場合、CSVをクエリすると、MACアドレスが別の変数に返されます。私はこれを行う方法に迷っています。csvとfaster_csvを見たことがありますが、これらをこのように機能させる方法がわかりません。

前もって感謝します!

4

2 に答える 2

10

Ruby 1.9でFasterCSVを使用しようとすると、標準のRuby1.9CSVライブラリの方が実際には高速であるという警告が表示されます。そこで、標準のRubyCSVライブラリを使用しました。これはRuby1.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ファイルが最初に必要になったときに遅延ロードすることができます。

于 2011-12-11T19:32:44.917 に答える
6

ダートシンプルな方法をデモンストレーションします。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 => ', '})
于 2011-12-11T20:37:38.193 に答える