2010-11-07 11 views

risposta

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 

Probabilmente vorrai aggiungere qualche convalida, ma questo è un modo semplice per realizzare ciò che ti serve.

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

o

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

questo è uno snippet di sicurezza del lavoro! hehe – Blankman

+0

La scansione è davvero utile qui per un file che non contiene un formato coerente. –

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

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

Il metodo #split dà una matrice che sembra [ "John,", "234", "Joe,", "2222"]. L'operatore * (AKA splat) converte questa matrice in un gruppo di argomenti. Hash # [] prende questo gruppo di argomenti (quando c'è un numero pari di argomenti) e consegna un hash.

+0

+1, yay splat. Probabilmente ha bisogno di una regex. Ho intenzione di modificare la mia risposta ora ... – DigitalRoss

+0

@DigitalRoss: sì, trascurato la virgola finale. Aggiunta la regex. – steenslag

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

Bello. E regexp può essere anche più breve: '/, | \ n /' – Nakilon

+1

yay! vai Ruby! – Zabba

Problemi correlati