打印对齐的横幅?

时间:2012-10-16 21:26:43

标签: ruby pretty-print

我想知道是否有一些ruby打印功能允许我打印一个字符串,使其居中并用空格填充。我需要为包含不同文本的程序制作横幅:

<!-- ======================================================================= --> 
<!--                     Whatever text is in the string....                  --> 
<!-- ======================================================================= --> 

我实际上找到了一种方法来为一个&lt; = 90 - 2个字符的字符串执行此操作..:

len = 90
msg = "random_string" 

str = msg.center( msg.length + (len - msg.length) )
print "<!-- " + str +  "-->"

但现在我想支持消息大小超过90的可能性,并允许我继续使用新行,如果是这样的话。如果它可以避免分裂单词更好(逻辑开始变得复杂)。任何想法,或现有的宝石/图书馆这样做?

谢谢, 泰德

1 个答案:

答案 0 :(得分:2)

修订:这是一个修改后的答案,希望这更符合您的想法。它假设您使用Unix工具fmt来调整行的大小。这可能可以在Ruby中实现,只需要做一些工作。

msg = <<MSG_END
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nunc tincidunt libero eget justo convallis tincidunt. Curabitur
augue arcu, eleifend sit amet porttitor a, porttitor ac purus.
Vivamus non leo nulla, vel pulvinar urna. Cum sociis natoque penatibus
et magnis dis parturient montes, nascetur ridiculus mus. In at purus
risus. Maecenas imperdiet commodo turpis ullamcorper porttitor. Sed
imperdiet porta rutrum. Proin sodales lorem et dui mattis accumsan.
Etiam fermentum magna sed justo tristique commodo. Nulla at purus
in leo dignissim ultrices. Mauris tincidunt egestas nunc, sit amet
placerat mauris hendrerit at. Vestibulum at vestibulum ante.
MSG_END

cols = 60 - 9 # subtract 9 to account for the extra `<!-- ` and ` -->`

sized = `echo '#{msg}' | fmt -w #{cols}`

centered = sized.split("\n").map do |l|
   "<!-- #{l.center(cols)} -->\n"
end

puts centered

返回:

<!-- Lorem ipsum dolor sit amet, consectetur adipiscing  -->
<!--  elit.  Nunc tincidunt libero eget justo convallis  -->
<!-- tincidunt. Curabitur augue arcu, eleifend sit amet  -->
<!--  porttitor a, porttitor ac purus.  Vivamus non leo  -->
<!--    nulla, vel pulvinar urna. Cum sociis natoque     -->
<!-- penatibus et magnis dis parturient montes, nascetur -->
<!--     ridiculus mus. In at purus risus. Maecenas      -->
<!-- imperdiet commodo turpis ullamcorper porttitor. Sed -->
<!-- imperdiet porta rutrum. Proin sodales lorem et dui  -->
<!--  mattis accumsan.  Etiam fermentum magna sed justo  -->
<!-- tristique commodo. Nulla at purus in leo dignissim  -->
<!--  ultrices. Mauris tincidunt egestas nunc, sit amet  -->
<!--     placerat mauris hendrerit at. Vestibulum at     -->
<!--                  vestibulum ante.                   -->