2010-02-21 76 views
1

我試圖讀取文件和創建的內容是一個HashMap,但我有在分析步驟的麻煩。文本文件的一個示例是解析文本文件時,內容沒有很好形成

put 3 
returns 3 
between 
3 
pargraphs 1 
4 
3 
#foo 18 
****** 2 

單詞變成鍵,數字是值。請注意,間距相當不穩定。這個單詞並不總是一個單詞(它不會被/ \ w + /拾取),與該單詞相關的數字並不總是在同一行上。這就是爲什麼我稱它不健全的原因。如果一行中有一個單詞和一個數字,我可以將它分開,但不幸的是,情況並非如此。我正在嘗試創建一個像這樣的hashmap。

{"put"=>3, "#foo"=>18, "returns"=>3, "paragraphs"=>1, "******"=>2, "4"=>3, "between"=>3} 

來自Java,這相當簡單。使用Scanner我可以使用scanner.next()作爲下一個關鍵字,scanner.nextInt()作爲關聯的數字。我不太清楚在Ruby中如何做到這一點,看起來我必須使用正則表達式來處理所有事情。

+0

順便說一句,我完全不建議在這個例子(見我答案),但是Ruby有一個'StringScanner'庫。 http://ruby-doc.org/core/classes/StringScanner.html – Peter 2010-02-21 06:24:19

回答

2

我建議只使用split,如:

h = Hash[*s.split] 

其中s是你的文本(例如s = open('filename').read信不信由你,這會給你,你正是後

編輯:我意識到你想要的值作爲整數您可以添加如下:

h.each{|k,v| h[k] = v.to_i} 
+0

太棒了!我不知道splat操作符(*)執行類似的操作。謝謝! – Marcos 2010-02-21 08:46:31

相關問題