如何在Ruby脚本中编写table_print输出?

时间:2016-09-08 23:39:59

标签: ruby-on-rails ruby formatting

所以,我有一个脚本,比如,program.rb,其中我想输出一个列表数组的table_print版本

['value1','value2','value3']
['value4','value4','value6']

所以在我输出的.txt文件中看起来像这样。

  col1              | col2              | col3
  -------------------------------------------------------------------------
  value1            | value2            | value3
  .
  .
  .

我已经安装了table_print,但这就是我所拥有的工作模型:

require 'table_print'

TABLEPRINT STUFF?

open('table_print_output.txt','a'){|g|
    g.puts TABLEPRINT?
}

我想我还没有得到如何使用Ruby等效的MySQL创建表

CREATE TABLE MyGuests (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)

并插入

INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)

我不想让一个临时/潜在的数据库无缘无故地坐着。这就像我需要一个数据库作为变量或其他东西;也就是说,我创造它,我填充它,我打印它,我销毁它。

2 个答案:

答案 0 :(得分:1)

看起来您需要String#ljust

rows = [
  ['value1','value2','value3'],
  ['value4','value4','value6']
]

rows.each do |row|
  puts "#{row[0].ljust(30)}|#{row[1].ljust(30)}|#{row[2].ljust(30)}"
end

答案 1 :(得分:1)

table_print无法打印嵌套数组,如下所示:

arrays = [
  ['value1', 'value2', 'value3'],
  ['value4', 'value5', 'value6']
]

因为它会使输入变平。您必须将内部数组转换为另一个对象。

Hash可行:

hashes = array.map { |values| %w(col1 col2 col3).zip(values).to_h }
#=> [
#     {"col1"=>"value1", "col2"=>"value2", "col3"=>"value3"},
#     {"col1"=>"value4", "col2"=>"value5", "col3"=>"value6"}
#   ]

tp hashes
# COL1   | COL2   | COL3
# -------|--------|-------
# value1 | value2 | value3
# value4 | value5 | value6

Struct也会起作用:

Row = Struct.new(:col1, :col2, :col3)
rows = arrays.map { |values| Row.new(*values) }
#=> [
#     #<struct Row col1="value1", col2="value2", col3="value3">,
#     #<struct Row col1="value4", col2="value5", col3="value6">
#   ]

tp rows
# COL1   | COL2   | COL3
# -------|--------|-------
# value1 | value2 | value3
# value4 | value5 | value6