2010-11-07 2 views
8

У меня есть файл, который имеет пару имя/значение в каждой строке, я хочу открыть файл, прочитать каждую строку и инициализировать хэш.Использование Ruby, чтение файла, содержащего пары имя/значение в хэш

файл:

john, 234 
joe, 2222 

И загрузить хэш, так что я могу перебрать пар ключ-значение.

ответ

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

+0

Сканирование действительно полезно здесь для файла, который не содержит согласованного формата. –

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

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

Метод #split дает массив похожий [ "Джон,", "234", "Джо", "2222"]. Оператор * (AKA splat) преобразует этот массив в кучу аргументов. Hash # [] принимает эту кучу аргументов (когда есть четное количество аргументов) и доставляет хэш.

+0

+1, yay splat. Вероятно, требуется регулярное выражение. Теперь я собираюсь изменить свой ответ ... – DigitalRoss

+0

@ DigitalRoss: да, не обратили внимания на запятую. Добавлено регулярное выражение. – steenslag

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

Nice. И регулярное выражение может быть еще короче: '/, | \ n /' – Nakilon

+1

yay! Иди рубин! – Zabba

Смежные вопросы