0

我有一个从数据库中检索信息的脚本,我需要将结果写到文件中。在检索过程中,我提取了我喜欢以简洁格式显示的列标题和数据。这是我需要它看起来像的示例:

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             

我是创建特定格式的报告/文件的新手,因此将不胜感激任何帮助。

4

4 回答 4

2

Hirb gem 可以成为的一个很好的起点。它通常与 IRB 或 Rail 的控制台使用相关,但没有什么说我们不能将它用于其他用途。

通常它想要包装使用 ASCII 边框创建的表格:

+--------------------+---------------- -+------------+
| 用户名 | 姓名 | 登录数 |
+--------------------+---------------- -+------------+
| email_1@yahoo.com | 比奇伍德 | 2 |
| email_2@yahoo.com | 比奇伍德 | 2 |
| email_3@yahoo.com | 比奇伍德 | 2 |
| email_4@yahoo.com | 比奇伍德 | 2 |
| email_55@yahoo.com | 社区内科 | 6 |
+--------------------+---------------- -+------------+

但是,通过应用一点gsub爱,我们可以把它打扮成你想要的样子:

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('|', ' ')

看起来像:

  用户名 名称 num_logins  
  email_1@yahoo.com 比奇伍德 2           
  email_2@yahoo.com 比奇伍德 2           
  email_3@yahoo.com 比奇伍德 2           
  email_4@yahoo.com 比奇伍德 2           
  email_55@yahoo.com 社区内科 6           

您可能希望在将数组的标题行传递给 Hirb 之前将其弹出,或者从单独的数组中提供它。如果是,请更改:headers选项。

于 2013-01-18T17:21:44.593 回答
1

您应该查找 rubyprintf​​ 方法,它与同名的 C 函数非常相似。它允许您为要打印的每个值指定字段宽度和对齐方式。

printf "%20d %20d\n", 334, 44
于 2013-01-18T16:17:04.500 回答
0

根据您希望表格的精美程度,您可以为此使用诸如terminal-table之类的 gem 。

Github 上的 README 没有提到它,但是这个 pull request显示了如何禁用表格的边框。

Terminal::Table::X = ""
Terminal::Table::Y = ""
Terminal::Table::I = ""
于 2013-01-18T16:20:12.433 回答
0

您也可以尝试我的 table_print gem - 它非常灵活,但需要很少的设置/配置http://github.com/arches/table_print

于 2013-06-17T15:22:33.473 回答