From: aito@...5sun.yz.yamagata-u.ac.jp Date: 1997-09-04T11:34:12+09:00 Subject: [ruby-list:4102] Re: [Q] 文字列処理 あ伊藤です. In article <19970904111435V.conan@Armonicos.co.jp>, Yasunari Momoi writes: > 早速質問なんですが,次のようなものをエレガントに処理したいん > ですが,どう書くのが一番美しく書けるのでしょうか? 私は if > 文を並べる方法しか思い付きませんでした... こんな感じでは? lines = [ "field-a: hoge a1\n", "field-b: hoge b\n", "field-c: hoge c\n", "field-d: hoge d\n", "field-e: hoge e\n", "field-a: hoge a2\n ge\n", "field-a: hoge a3\n gege\n", "field-a: hoge a4\n gegege\n", ] through = { "field-a:" => TRUE, "field-b:" => TRUE } cook = {"field-d:" => TRUE } target = [] lines.each do |l| f = l.split[0] if through[f] then target << l elsif cook[f] then line = l # なんか書換える target << line end end さらに,処理までカプセル化するとしたら field_proc = { "field-a:" => Proc.new { |l| l }, "field-b:" => Proc.new { |l| l }, "field-d:" => Proc.new { |l| "適当に書きかえる" }, } target = [] lines.each do |l| f = l.split[0] if field_proc.key?(f) then target << field_proc[f].call(l) end end --_ ITO Akinori at YAMAGATA UNIVERSITY 伊藤 彰則 山形 大学