[#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:42468] Re: 多量の正規表現との効率的なマッチのアイデアを、、

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

> ブロックを使うととつぜんrubyらしくなる。

Rubyの醍醐味です^^

> File.read("testdata") ここについて質問です。
> 
> 巨大なファイルをこうやって読んでしまうと、メモリはどうなるのでしょう。
> 400Byte/行 10000行位のデータがあります。

この程度のファイルなら問題ないと思いますけど…
僕の場合数十MBくらいまでは一度に読み込んでしまいます。

どうしても心配ならば、こんなイテレータを定義して、

def gets_chomp_iter(filename)
  open(filename) do |f|
    while line = f.gets
      yield(line.chomp)
    end
  end
end


File.read("testdata").split(/\n/).each do |line|
を
gets_chomp_iter("testdata") do |line|
に置き換えてみましょう。

「1行1行処理していく」というレベルで抽象化されているので、
そのまま置き換えがききます。

openはブロックを持てます。ブロックの実行が終わったときに自動でcloseされます!

yieldでブロックの実行にうつります。

# 名前がアレですが…

> 多分、2、3ケ月のうちに処理するデータが 1G位になりそうなので、、、
うおっ!
こうなると集計をincrementalに行うことを考えたほうがいいかもしれません。

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

In This Thread