一定範囲の行を取り出す
perlには開始パターンと終了パターンを指定すると,その範囲を取り出せる演算子が存在するらしい.
def range( a, s, e) def find(a, p) return a.index(p) unless p.kind_of? Regexp a.each_with_index {|x,c| return c if x =~ p } return nil end sl = find(a,s) if sl el = find( a[sl+1..-1], e) return a[sl+1, el] if el end nil end # 配列に各行が入っているものとする a = %w[aaa begin bbb ccc ddd end eee] p range( a, 'begin', 'end') p range( a, /\Abegin\b/, /\Aend\b/) #=> ["bbb", "ccc", "ddd"] #=> ["bbb", "ccc", "ddd"]
行番号(index)をペアにして返すだけにして,範囲を取り出すのは,メソッド呼び出し後にやったほうがいいかも?
また間抜けなことをしている予感.
メソッド内でメソッド定義しても,スコープ的にはダダモレなのか…