Захват вывода table_print - PullRequest
       1

Захват вывода table_print

0 голосов
/ 17 апреля 2019

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

Есть ли способ вернуть строку, а не float, чтобы у меня была переменная, содержащая мою строку?

Ответы [ 3 ]

2 голосов
/ 17 апреля 2019

Нет необходимости создавать экземпляр 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 голосов
/ 17 апреля 2019

с версии гема table_print

Вы можете сделать это:

table = TablePrint::Printer.new(my_string_data)
tp_output = table.table_print
puts tp_output
HEADER1 | HEADER2 | HEADER3
--------|---------|--------
elem1   | elem2   | elem3
elem1   | elem2   | elem3
0 голосов
/ 17 апреля 2019

Вы можете временно перенаправить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...