2016-09-08 2 views
1

Итак, у меня есть сценарий, скажем, program.rb, и в ней я хочу, чтобы вывести версию массива списковКак я могу написать вывод table_print в моем скрипте Ruby?

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

так table_print, что она выглядит, как это в текстовом файле Я выход

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

Я уже установлен table_print, но это все, что я до сих пор в качестве рабочей модели:

require 'table_print' 

TABLEPRINT STUFF? 

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

Я думаю, я просто не получение, как сделать Рубиновый эквивалент создания таблицы в 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,...) 

И я не хочу, временный/скрытая база данных просто сидеть без причины. Это похоже на то, что мне нужна база данных как переменная или что-то в этом роде; то есть я создаю его, я его заполняю, я его печатаю, я его уничтожаю.

+0

Постарайся и позволить немного больше места для имен и адресов электронной почты. Если у вас нет очень веских оснований для ограничения чего-либо, используйте 'VARCHAR (255)' по умолчанию. – tadman

+0

Да, я знаю, я использую VARCHAR (255), я просто скопировал это как пример. – Forwarding

ответ

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 
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 
Смежные вопросы