我有一个从数据库中检索信息的脚本,我需要将结果写出来。在检索过程中,我会以简洁的格式提取我想要显示的列标题和数据。以下是我需要它的示例:
user_name name num_logins
email_1@yahoo.com Beachwood 2
email_2@yahoo.com Beachwood 2
email_3@yahoo.com Beachwood 2
email_4@yahoo.com Beachwood 2
email_55@yahoo.com Community Internal Medicine 6
我是创建特定格式的报告/文件的新手,因此非常感谢任何帮助。
答案 0 :(得分:2)
Hirb宝石可能是一个很好的起点。它通常与IRB或Rail的控制台使用相关联,但没有任何迹象表明我们不能将其用于其他用途。
通常它想要包装用ASCII边框创建的表:
+--------------------+-----------------------------+------------+ | user_name | name | num_logins | +--------------------+-----------------------------+------------+ | email_1@yahoo.com | Beachwood | 2 | | email_2@yahoo.com | Beachwood | 2 | | email_3@yahoo.com | Beachwood | 2 | | email_4@yahoo.com | Beachwood | 2 | | email_55@yahoo.com | Community Internal Medicine | 6 | +--------------------+-----------------------------+------------+
但是,通过应用一点gsub
lovin',我们可以按照您的要求打扮:
values = [
[ 'user_name', 'name', 'num_logins' ],
[ 'email_1@yahoo.com', 'Beachwood', '2' ],
[ 'email_2@yahoo.com', 'Beachwood', '2' ],
[ 'email_3@yahoo.com', 'Beachwood', '2' ],
[ 'email_4@yahoo.com', 'Beachwood', '2' ],
[ 'email_55@yahoo.com', 'Community Internal Medicine', '6' ],
]
puts Hirb::Helpers::AutoTable.render(
values,
:headers => values.shift,
:description => false
).gsub(/^[+-]+\n?/, '').gsub('|', ' ')
看起来像:
user_name name num_logins email_1@yahoo.com Beachwood 2 email_2@yahoo.com Beachwood 2 email_3@yahoo.com Beachwood 2 email_4@yahoo.com Beachwood 2 email_55@yahoo.com Community Internal Medicine 6
您可能希望在将数组传递给Hirb之前弹出数组的标题行,或者从单独的数组中提供它。如果是,请更改:headers
选项。
答案 1 :(得分:1)
您应该查找ruby printf
方法,该方法与C函数的名称非常相似。它允许您为要打印的每个值指定字段宽度和对齐方式。
printf "%20d %20d\n", 334, 44
答案 2 :(得分:0)
根据您对表格的看法,您可以使用terminal-table这样的宝石。
Github上的README没有提到它,但是this pull request显示了如何禁用表的边框。
Terminal::Table::X = "" Terminal::Table::Y = "" Terminal::Table::I = ""
答案 3 :(得分:0)
您也可以尝试我的table_print gem - 它非常灵活,但几乎不需要设置/配置http://github.com/arches/table_print