2017-06-20 5 views
0

以下は、入力ファイルのサンプルデータです。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_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 
****************************************************************************************** 
+0

... [groups][/]の内側にブロックを取得し、split(/^([^\s]+)\s*=\s*([^,\s])/)のようにそれを解析することです入力ファイル? – BKSpurgeon

+0

@BKSpurgeon:探していただきありがとうございます。ファイルを添付するオプションが見つからないため、質問を編集して入力内容を貼り付けました。 – dev

+0

year_onに@記号がない理由は何ですか? – BKSpurgeon

答えて

0

私はブロックで分割し始めるだろう。

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のアイデアは、uはplsは添付することができ

関連する問題