1

配列(または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

私は「テキストテーブル」の宝石を使用しています。

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

ただし、水平方向にわずか30文字しか使用されていない場合でも、垂直方向に100行しか印刷されません。出力では、列 1 の下部に続く項目の 1 つ以上の列にその右側のスペースを使用することをお勧めします。

4

1 に答える 1

0

少し実験しました。私がまったく好きではない1つの方法ですが、2列モードのみで逃げます:

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 に答える