logo       

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

lang.ruby.japanese

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

From: しん <dezawa-eY1vtc/6GtbR7s880joybQ@xxxxxxxxxxxxxxxx>
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/




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise