1

是否有任何简单的 gem 或方法可以将数组(或 CSV 行)打印为文本表,只要终端的宽度参数没有还没用完?

例如,注意 'ls' 的对齐、节省空间的输出(从上到下然后从左到右排序):

 # ls
30_os-prober                Documents         Pictures           sysadmin.geany  xorg.conf
avivotool.regdump_good.txt  Downloads         Public             Templates       xorg.conf.00
bin                         fbcmd_update.php  regdump_broke.txt  tmp
crontab.root@quant.txt      grub-mkconfig     stuck.packages     unity.log
Desktop                     Music             sync               Videos

我一直在使用“文本表”gem,例如。

  puts $csv_rows[1].to_a.transpose.to_table.align_column 2, :right

但它只能垂直垂直向下打印 100 行,即使水平方向可能只使用 30 个字符。我希望输出将右侧空间用于一列或多列项目,否则这些项目将位于第 1 列的底部。

4

1 回答 1

0

试验了一下。我根本不喜欢的一种方式,但只使用两列模式:

i=0; puts (sa=$csvrow.to_a.transpose.to_table.align_column(2, :right).to_s.split("\n") )[0..sa.size/2].map{|e| e + sa[(i+=1)+sa.size/2].to_s + "\n"}

它真正做的只是循环前半部分,从项目 i=0 到 n/2,从 i + n/2 (后半部分)附加项目,并在它进行时添加一个换行符。to_table 使每个项目的字符串保持相同的固定长度,因此最后看起来都是对齐的。可能是可以建立的东西。

于 2012-07-19T20:10:15.103 回答