2011-01-10 54 views
3

我在尋找兩件事情的幫助。 1)我正在尋找一種方式讓Ruby在HTML中包裝字符串。我有一個我正在寫的程序,它爲文本文件生成一個單詞頻率哈希值,我希望將結果放到HTML文件中,而不是打印到STDOUT。我想每個字符串都需要使用readlines()或其他東西包裝在HTML段落標記中,但我無法弄清楚。然後,一旦我用HTML包裝了字符串2)我想寫入一個空的HTML文件。如何在HTML標籤中包裝Ruby字符串

現在我的計劃是這樣的:

filename = File.new(ARGV[0]).read().downcase().scan(/[\w']+/) 
frequency = Hash.new(0) 
words.each { |word| frequency[word] +=1 } 
frequency.sort_by { |x,y| y }.reverse().each{ |w,f| puts "#{f}, #{w}" } 

所以,如果我們跑了一個文本文件,通過這一點,並獲得:

35, the 
27, of 
20, to 
16, in 
# . . . 

我要導出到一個HTML文件,包裹線如:

<p>35, the</p> 
<p>27, of</p> 
<p>20, to</p> 
<p>16, in</p> 
# . . . 

感謝您的任何提示提前!

+0

你真的不需要後不帶參數的方法調用的括號... – 2011-01-10 04:52:35

+1

@Jacob我知道,我把它們包含和消除它們之間來回。在某些方面,我喜歡爲了可讀性而將它們放在那裏(例如,我可以立即看到什麼是方法和什麼是變量),但也擔心它會使程序混亂。 – 2011-01-10 05:27:05

回答

3

這是一個小問題。

#open file, write, and close 

File.open('words.html', 'w') do |ostream| 
    words = File.new(ARGV[0]).read.downcase.scan(/[\w']+/) 
    frequency = Hash.new 
    words.each { |word| frequency[word] +=1 } 

    frequency.sort_by {|x, y| y }.reverse.each do |w,f| 
    ostream.write "<p>#{f}, #{w}</p>" 
    end 
end 
2

事情是這樣的:

File.open("output.html", "w") do |output| 

    words = File.new(ARGV[0]).read().downcase().scan(/[\w']+/) 
    frequency = Hash.new(0) 
    words.each { |word| frequency[word] +=1 } 
    frequency.sort_by { |x,y| y }.reverse().each do |w,f| 
    output.write "<p>#{f}, #{w}</p>\n" 
    end 

end 
1

你可能想看看我開發的dom gem。你的字符串可以這樣產生:

require "dom" 

frequency.sort_by(&:last).reverse.map{|w, f| "#{f}, #{w}".dom(:p)}.dom 
# => "<p>35, the</p><p>27, of</p><p>20, to</p><p>16, in</p>" 
相關問題