如何在Ruby中垂直对齐stdout文本(如Rails)

时间:2015-09-07 21:59:30

标签: ruby-on-rails ruby stdout thor

我正在尝试创建一个CLI应用程序,我想将文本输出到控制台。我无法弄清楚如何格式化我的想法。

当您输入rails new app时,您会收到以下输出:

  create  tmp/cache
  create  tmp/cache/assets
  create  vendor/assets/javascripts
  create  vendor/assets/javascripts/.keep
  create  vendor/assets/stylesheets
  create  vendor/assets/stylesheets/.keep
     run  bundle install

如何编写输出以确保所有命令都垂直对齐?

PS。我使用Thor是重要的。

由于

2 个答案:

答案 0 :(得分:1)

我认为你是在思考这个问题。它们只是打印出文本行,间距介于两者之间。

puts "  create  tmp/cache"
puts "  create  tmp/cache/assets"
# ...

将以完全相同的方式输出。

Ruby中有一个函数可以帮助解决这个问题(String#rjust),它会在字符串中填充左边的空格。因此,如果您希望第一列的宽度为10个字符,则可以rjust值为10的字符串,并将它们对齐到右侧。例如,如果您正在迭代哈希,则可以运行以下代码:

hash = { "hello" => "world", "foo" => "bar" }
hash.each do |key, value|
  puts "#{key.rjust(7)}  #{value}"
end
#  hello  world
#    foo  bar

答案 1 :(得分:1)

您可以在案例中使用尊敬的sprintf。有一个number of stylistic and utilitarian reasons why,但通常它会使代码更简洁。您还可以以编程方式指定所需的填充。在您的具体示例中:

output = {create: 'something.rb',
          identical: 'something_else.rb',}
output.each do |key, value|
  puts sprintf '%10s  %3s', key.to_s, value
end

给你

   create  something.rb 
identical  something_else.rb