2012-07-19 67 views
1

是否有任何简单的宝石或方法来打印一个数组(或CSV行)作为文本表,它自动跟随底线,然后包装到第2列,3等从顶端只要终端的宽度参数还没有用完呢?红宝石宝石文本分页到包装列

例如通知“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 
[email protected]  grub-mkconfig  stuck.packages  unity.log 
Desktop      Music    sync    Videos 

我一直在使用“文本表”宝石如。

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

但它只能垂直垂直打印100行,即使水平勉强可能会使用30个字符。我希望输出将一列或多列项目的右侧空间用于第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保持每个项目的字符串具有相同的固定长度,因此它们都显示在最后。可能是一些建立在。