捕获table_print的输出

时间:2019-04-17 16:20:24

标签: ruby

table_print是一颗宝石,用于格式化表中的字符串。

我想在变量中捕获table_print的输出,以最终将其写入文件。

采用以下字符串:

my_string_data = [
   {'header1' => 'elem1', 'header2' => 'elem2', 'header3' => 'elem3'},
   {'header1' => 'elem1', 'header2' => 'elem2', 'header3' => 'elem3'}
]

我可以使用table_print很好地打印它:

tp my_string_data
HEADER1 | HEADER2 | HEADER3
--------|---------|--------
elem1   | elem2   | elem3
elem1   | elem2   | elem3
=> 0.00036

但是我似乎无法捕获输出,因为tp实际上返回了float

tp_output = tp my_string_data
HEADER1 | HEADER2 | HEADER3
--------|---------|--------
elem1   | elem2   | elem3
elem1   | elem2   | elem3
=> 0.000367

tp_output
=> 0.000367

有没有一种方法来返回字符串,而不是浮点数,以便我可以拥有一个包含我的字符串的变量?

3 个答案:

答案 0 :(得分:2)

从table_print gem版本开始

您可以执行以下操作:

table = TablePrint::Printer.new(my_string_data)
tp_output = table.table_print
puts tp_output
HEADER1 | HEADER2 | HEADER3
--------|---------|--------
elem1   | elem2   | elem3
elem1   | elem2   | elem3

答案 1 :(得分:2)

无需像接受的答案中那样创建TablePrint::Printer的实例。该类具有一个table_print静态方法,可以为您完成工作:

data = [
  {'header1' => 'elem1', 'header2' => 'elem2', 'header3' => 'elem3'},
  {'header1' => 'elem1', 'header2' => 'elem2', 'header3' => 'elem3'}
]

str = TablePrint::Printer.table_print(data)

puts str
# => HEADER1 | HEADER2 | HEADER3
#    --------|---------|--------
#    elem1   | elem2   | elem3  
#    elem1   | elem2   | elem3

查看有关repl.it的实际操作:https://repl.it/@jrunning/CrimsonVibrantMath

答案 2 :(得分:0)

您可以临时重定向STDOUT

str = <<_
# => HEADER1 | HEADER2 | HEADER3
#    --------|---------|--------
#    elem1   | elem2   | elem3  
#    elem1   | elem2   | elem3
_

io = StringIO.new
  #=> #<StringIO:0x0000557df4b227b8>
$stdout = io

puts str
$stdout = STDOUT

s = io.string.lines[1..-2]
puts s
# => HEADER1 | HEADER2 | HEADER3
#    --------|---------|--------
#    elem1   | elem2   | elem3  
#    elem1   | elem2   | elem3