2010-02-21 37 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

相关问题