サンプル テキストを「test.txt」というファイルに保存しました。それを開く:
File.foreach('test.txt').slice_before(/^---/).to_a
戻り値:
[
["requestID: saldksadk\n", "time: 92389389\n", "action: foobarr\n"],
["----------------------\n", "requestID: 2393029\n", "time: 92389389\n", "action: helloworld\n", "source: email\n"],
["----------------------\n", "requestID: skjflkjasf3\n", "time: 92389389\n", "userAgent: mobile browser\n"],
["----------------------\n", "requestID: gdfgfdsdf\n", "time: 92389389\n", "action: randoms\n"]
]
各サブ配列をフィルターに通すことで、先頭の「---」を取り除くことができます。
blocks = File.foreach('test.txt').slice_before(/^---/).map { |ary|
ary.shift if ary.first[/^---/]
ary.map(&:chomp)
}
実行後blocks
は次のとおりです。
[
["requestID: saldksadk", "time: 92389389", "action: foobarr"],
["requestID: 2393029", "time: 92389389", "action: helloworld", "source: email"],
["requestID: skjflkjasf3", "time: 92389389", "userAgent: mobile browser"],
["requestID: gdfgfdsdf", "time: 92389389", "action: randoms"]
]
もう少し微調整:
blocks = File.foreach('test.txt').slice_before(/^---/).map { |ary|
ary.shift if ary.first[/^---/]
Hash[ary.map{ |s| s.chomp.split(':') }]
}
となり、次のblocks
ようになります。
[
{"requestID"=>" saldksadk", "time"=>" 92389389", "action"=>" foobarr"},
{"requestID"=>" 2393029", "time"=>" 92389389", "action"=>" helloworld", "source"=>" email"},
{"requestID"=>" skjflkjasf3", "time"=>" 92389389", "userAgent"=>" mobile browser"},
{"requestID"=>" gdfgfdsdf", "time"=>" 92389389", "action"=>" randoms"}
]