我有一个ruby脚本,当从shell提示符调用时,接受一些参数,然后从数据库中提取一些信息,然后将该信息输出到提示符。我在每个数据库信息之间添加了一个选项卡(\ t),尝试使其像一个表,包含列和行,其中一些正确排列,但并非总是如此。我该如何解决这个问题?
谢谢。
答案 0 :(得分:5)
使用ljust
的{{1}}方法:
string
将打印:
print 'column 1'.ljust(20)
print 'column 2'
但这不适用于较长的领域。要处理它们,您可以检测最长的字段或修剪内容。
答案 1 :(得分:1)
这是因为在大多数终端(或shell或控制台或CLI)窗口中,选项卡的含义是从序列1,9,17,25,33,41等转到下一列。
如果您有两行,比如说,
ABCDEFGHIJ\tKLM
ABC\tDEF
然后事情不会排列,因为第一行中的选项卡会跳转到第17列,但第二行中的选项卡会跳转到第9列。
编辑:我忘记回答“如何解决这个问题”。嗯,这很难,只有知道任何列的最大长度才能完成。如果这样做,您可以在字段之间输出“正确数量的选项卡”。取决于您的数据。答案 2 :(得分:1)
您可以使用printf
语句通过格式化打印来解决此问题。这使您可以控制每列的打印方式,有多宽,如何处理列太长的数据等。如果您之前没有使用其他类似C语言的操作,这可能会非常繁琐。请参阅sprintf的文档:http://ruby-doc.org/core/classes/Kernel.html#M001432
答案 3 :(得分:0)
column程序专为漂亮打印数据表而设计。假设你使用bash:
ruby-script.rb | column -s $'\t' -t