我正在寻找两件事的帮助。 1)我正在寻找一种方法让Ruby用HTML包装字符串。我有一个正在编写的程序,它为文本文件生成一个单词频率哈希,我想把结果放到一个HTML文件而不是打印到STDOUT。我认为每个字符串都需要使用readlines()或其他东西包装在HTML段落标记中,但我无法弄明白。然后,一旦我在HTML 2中包装了字符串,我想写一个空的HTML文件。
现在我的程序看起来像:
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 :(得分: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
答案 1 :(得分: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
答案 2 :(得分: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>"