输出到Shell提示符时Ruby中的选项卡问题

时间:2011-07-12 06:51:39

标签: ruby shell

我有一个ruby脚本,当从shell提示符调用时,接受一些参数,然后从数据库中提取一些信息,然后将该信息输出到提示符。我在每个数据库信息之间添加了一个选项卡(\ t),尝试使其像一个表,包含列和行,其中一些正确排列,但并非总是如此。我该如何解决这个问题?

谢谢。

4 个答案:

答案 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