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
有没有一种方法来返回字符串,而不是浮点数,以便我可以拥有一个包含我的字符串的变量?
答案 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