2011-12-11 3 views
2

Wake-on-lan을 사용하기 위해 SiriProxy 프로젝트 용 플러그인에서 CSV를 설정 파일로 사용하려고합니다. 이 프로젝트는 루비를 기반으로합니다.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

흙먼지 간단한 방법을 보여 드리겠습니다. 데이비드 그레이슨 (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 => ', '})