我有一些文件有散列格式的数据,我试图以表格格式打印,
{
:outerkey1 => "value1",
:innerhash => {
:doubleinnerhash => {
:key1 => "",
:key2 => true,
:key3 => 0,
:key4 => "line1\nline2\n line3\nline4\n"
},
:innerkey => "OK",
:innerkey3 => 0
},
:outerkey2 => "value2",
:outerkye3 => "value3",
:outerkey4 => "value4"
}
在上面的格式化数据中,想要解析outerkey
和doubleinnerhash
的哈希值,然后以tabluar格式打印以显示它。
我在Python - Printing a dictionary as a horizontal table with headers的帮助下对Python有所了解但是如果想要实现那么我需要将这个Ruby哈希转换为Python Dict格式,这将导致数据不一致问题。
我希望低于格式化输出,
|----------------------------------------------------|
|outerkey1 | key1 | key2 | key3 | key4 |
|----------------------------------------------------|
|value1 | | true | 0 | line1|
| | | | | line2|
| | | | | line3|
| | | | | line4|
|----------------------------------------------------|
|value2 |error | false | 2 | line1|
| | | | | line2|
| | | | | line3|
| | | | | line4|
|----------------------------------------------------|
那么有没有直接的机制让这个工作在Ruby?
答案 0 :(得分:0)
我不知道会自动执行嵌套数据处理的任何内容,但此库可以帮助输出的固定字符宽度格式:https://github.com/piotrmurach/tty-table。
那就是说,我建议尽可能多地使用JSON或YAML - 是否有理由包含数据的文件不使用其中一种格式?或者是他们?
答案 1 :(得分:0)
有几种宝石可用,但在大多数花瓶中,您需要修改输入。
宝石text-tabl似乎对我来说是一个很好的候选人。
这是一个例子
require 'text-table'
table = Text::Table.new
table.head = ['A', 'B']
table.rows = [['a1', 'b1']]
table.rows << ['a2', 'b2']
table.to_s
# +----+----+
# | A | B |
# +----+----+
# | a1 | b1 |
# | a2 | b2 |
# +----+----+
所以你必须将你的哈希值转换为这个gem的数组数组。
我不会完全解决这个问题(哪个会对你有意思?)但这里有一篇文章可以帮助你开始......
h = {
:outerkey1 => "value1",
:innerhash => {
:doubleinnerhash => {
:key1 => "",
:key2 => true,
:key3 => 0,
:key4 => "line1\nline2\n line3\nline4\n"
},
:innerkey => "OK",
:innerkey3 => 0
},
:outerkey2 => "value2",
:outerkye3 => "value3",
:outerkey4 => "value4"
}
header = [h.keys.first, h[:innerhash][:doubleinnerhash].keys].flatten
rows = h[:innerhash][:doubleinnerhash].values