我将您的示例文本保存到一个名为“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"}
]