2012-07-19 48 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保持每個項目的字符串具有相同的固定長度,因此它們都顯示在最後。可能是一些建立在。