如何在Ruby中拆分和组织数据

如何在Ruby中拆分和组织数据,ruby,Ruby,下面是输入文件中的示例数据 File Id: C:/my_files/456_Milo_123-values.txt #RakeBoss-Jan 21st Prod [groups] met = chk\rel_io_chk, chk\dev_op_io div = chk\kzhr2x, chk\, chk\czzjrt jee_only = chk\zz9ycd, chk\hz659l year_on = chk\dytg6 [/] @met = rw @div = rw @jee_onl

下面是输入文件中的示例数据

File Id: C:/my_files/456_Milo_123-values.txt

#RakeBoss-Jan 21st Prod
[groups]
met = chk\rel_io_chk, chk\dev_op_io
div = chk\kzhr2x, chk\, chk\czzjrt
jee_only = chk\zz9ycd, chk\hz659l
year_on = chk\dytg6
[/]
@met = rw
@div = rw
@jee_only = r

[/Release]
year_on = r

[/Redmine/Treehub]
@div = r
@jee_only = rw
我希望它像下面这样组织成一个输出文件

Name            group          id           folder             access
456_Milo_123    met         chk\rel_io_chk    /                 rw
456_Milo_123    met         chk\dev_op_io     /                 rw
456_Milo_123    div         chk\kzhr2x        /                 rw  
456_Milo_123    div         chk\czzjrt        /                 rw
456_Milo_123    div         chk\zz52t0        /                 rw
456_Milo_123    jee_only    chk\zz9ycd        /                 rw
456_Milo_123    jee_only    chk\zz9ycd        /                 rw
456_Milo_123    year_on     chk\dytg6         /Release          r
456_Milo_123    div         chk\czzjrt        /Redmine/Treehub  r
456_Milo_123    div         chk\zz52t0        /Redmine/Treehub  r
456_Milo_123    jee_only    chk\zz9ycd        /Redmine/Treehub  rw
456_Milo_123    jee_only    chk\zz9ycd        /Redmine/Treehub  rw     
我尝试了许多拆分和拼接的组合来组织它,但无法实现上述输出

我未完成的尝试

file = File.open("input.txt", "rb")
values = file.read.split("File Id:")
values.each do |val|
  val.reject {||a| a.match(/^#|^\[/m)}
    end
#not sure how to process further    
match_by_id("input.txt") do |id, lines|
  lines.each do |line|
    group, group_values = line.split("=")
    group.reject {|a| a.match(/^#|^\[/m)}
    end
#not sure how to process further    
end
values.shift
你知道怎么做吗?谢谢

输入文件

File Id: C:/my_files/00_Roll_Tom-values.txt

#RakeBoss-Random as on 12/19/2016
[groups]
met = chk\rel_io_chk, chk\dev_op_io,
div = chk\kzhr2x, chk\zz52t0, chk\czzjrt
rakeonly = chk\rzgnsd, chk\cztw5h

[/]
@met = rw
@div = rw
@rakeonly = r
*******************************************************************************************
File Id: C:/my_files/Rander-values.txt

#RakeBoss-Jan 21st QA
[groups]
met = chk\rel_io_chk, chk\dev_op_io
div = chk\541kmj, chk\zz52t0
app_only = chk\zz9ycd
check_io = chk\wder4, chk\zz9ycd
div_write = chk\lo98j3
year_on = chk\3w345f
[/]
@met = rw
@div = rw
@app_only= r
@check_io = r
@div_write = rw
@year_on = r

[/wedmin]
@check_io = rw
@div_write= rw

[/doc/prod]
@div = rw
@app_only = r
@year_on = rw
*******************************************************************************************
File Id: C:/my_files/456_Milo_123-values.txt

#RakeBoss-Jan 21st Prod
[groups]
met = chk\rel_io_chk, chk\dev_op_io
div = chk\kzhr2x, chk\, chk\czzjrt
jee_only = chk\zz9ycd, chk\hz659l
year_on = chk\dytg6
[/]
@met = rw
@div = rw
@jee_only = r

[/Release]
@year_on = r

[/Redmine/Treehub]
@div = r
@jee_only = rw
******************************************************************************************
File Id: C:/my_files/Docker_red-values.txt

#RakeBoss-Check it io.
[groups]
met = chk\rel_io_chk, chk\dev_op_io, chk\njk987
div = chk\gzlqvg, chk\zzkgyp, chk\lzg0rp, chk\gzp2kv
rakeonly = chk\qzvjq0, chk\kz6w6t, chk\bzy4kj, chk\dzfbhp

[/]
@met = rw
@div = rw
@rakeonly = r
******************************************************************************************

我先从分段开始

file = File.open("input.txt", "rb")
blocks = file.read.split(/\n\s*\n/)
每个区块需要不同的处理

name = parse_name blocks[0]
groups = parse_groups blocks[1]
....

parse_groups的想法是将块放入
[groups]
[/]
中,并像
拆分(/^([^\s]+)\s*=\s*([^,\s])/)一样对其进行解析

你能附上输入文件吗?@BKSpurgeon:谢谢你查看,我找不到任何附加文件的选项,所以我编辑了问题并粘贴了输入内容。有什么原因让year_on没有@符号吗?@BKSpurgeon:真诚的道歉,这是一个编辑错误。我已在问题中更正了它。谢谢年应为@symbol@BKSpurgeon字体你有没有可能看一看。谢谢