2010-11-07 49 views

回答

4
file_data = {} 
File.open('some_file', 'r') do |file| 
    file.each_line do |line| 
    line_data = line.split(',') 
    file_data[line_data[0]] = line_data[1] 
    end 
end 

您可能想要添加一些驗證,但這是一種簡單的方法來完成您所需要的。

7
Hash[File.read('some.txt').split("\n").map{|i|i.split(', ')}] 

Hash[File.read('some.txt').scan(/(.+?), (.+)/)] 
+0

這是一份工作安全片段! hehe – Blankman 2010-11-07 21:56:07

+0

掃描對於不包含一致格式的文件來說非常有用。 – 2018-02-02 18:56:52

4
f = <<EOF 
john, 234 
joe, 2222 
EOF 

p Hash[*f.split(/, |\n/)] 

#split給出了一個陣列看起來像[ 「約翰」, 「234」, 「喬,」, 「2222」]的方法。 *(AKA splat)運算符將此數組轉換爲一堆參數。哈希#[]採用這一堆參數(當有偶數個參數時)並提供一個哈希值。

+0

+1,yay splat。可能需要一個正則表達式。我現在要修改我的答案... – DigitalRoss 2010-11-07 23:34:50

+0

@DigitalRoss:是的,忽略了尾隨的逗號。添加了正則表達式。 – steenslag 2010-11-08 07:33:57

17
Hash[*File.read('f.txt').split(/[, \n]+/)] 
+1

不錯。而正則表達式可以更短:'/,| \ n /' – Nakilon 2010-11-08 01:36:41

+1

耶!去Ruby吧! – Zabba 2010-11-08 07:35:37

相關問題