[#42454] 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...>

出沢です

22 messages 2006/06/22
[#42455] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/22

From: しん <dezawa@aliadne.net>

[#42456] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42458] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42459] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です

[#42460] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — rubikitch <rubikitch@...> 2006/06/23

From: しん <dezawa@aliadne.net>

[#42461] Re: 多量の正規表現との効率的なマッチのアイデアを、、 — しん <dezawa@...> 2006/06/23

出沢です。

[ruby-list:42473] Re: 多量の正規表現との効率的なマッチのアイデアを、、

From: rubikitch <rubikitch@...>
Date: 2006-06-23 13:15:09 UTC
List: ruby-list #42473
From: しん <dezawa@aliadne.net>
Subject: [ruby-list:42472] Re: 多量の正規表現との効率的なマッチのアイデアを、、
Date: Fri, 23 Jun 2006 22:07:36 +0900

> IO.foreach が感覚的には良く分ります。
> ところで
> 1) これは 
>    IO.foreach(filename) do |line| hogehoge ;end
>    とあまり変らないような気もするのですがどうなのでしょう。

まぁsplitする場合はなかださんの言うようにchompは不要なのでIO.foreachと
変わりませんね。僕の場合 File.read/File.readlines するのが癖なので使っ
た記憶がないです(^^;;;

>   1行先読みしたいなぁ、って場合の gets  ungets 的な
>   使いかたには無理ですよね?
>   いちどに読みこめないような時は、実装で工夫するしかなさそうですね。

ではこんなので。1行前の内容もブロックに入れてみました。

require 'stringio'

# 文字列をIOっぽく扱うStringIO。IOオブジェクトのかわりに使えます。
@io = StringIO.new <<XXXX
first line
second line
third line
XXXX

def each_line_with_previous_line(io)
  prev_line = nil
  io.each_line do |line|
    begin
      yield(line, prev_line)
    ensure
      prev_line = line
    end
  end
end

# 使用例
each_line_with_previous_line(@io) do |line, prev|
  line.chomp!
  prev.chomp! if prev
  printf("current = %s / previous = %s\n", line.inspect, prev.inspect)
end

----
実行結果

current = "first line" / previous = nil
current = "second line" / previous = "first line"
current = "third line" / previous = "second line"

--
rubikitch
http://www.rubyist.net/~rubikitch/

In This Thread