2010-11-07 47 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

相关问题