2006年7月 7日

[ruby-list:42553] Re: Array#default

たけ(tk)です

[ruby-list:42549] Re: Array#default にて
Yukihiro Matsumoto さん曰く:
> 配列は疎なデータ構造を持っていませんから、離散的だろうがなん
> だろうが、初期化コストは同じです。defaultで遅延する価値はな
> いんじゃないでしょうかね。

excelのデータにアクセスするサンプルを作ってみました。

WIN32OLEのオブジェクトがどの程度重たいのか分かりませんが、excelの表全体
にオブジェクトを振り撒くよりは、コストが軽いのではないかと思います。

----
#! ruby -Ks

require "Array_default" # [ruby-list:42536] Array#default
require "win32ole"

path = "W:/夏休予定表.xls"

APPLICATION = WIN32OLE.new('Excel.Application')
WIN32OLE.const_load(APPLICATION, WIN32OLE)
APPLICATION.visible = true
APPLICATION.displayAlerts = true

@workbook = APPLICATION.Workbooks.open(path)

array = []
array.extend(Array_default)
array.default = proc{|a,n|
a[n] = []
a[n].extend(Array_default)
a[n].default = proc{|aa,nn|
aa[nn]=@workbook.worksheets(1).cells(n+1,nn+1)
}
a[n]
}

x = 1 ; y = 0
p [x,y,array[x][y].value]

#=> [1, 0, "2006年 夏休み予定表"]

array[x][y].value = "2007年 夏休み予定表" # エクセルの書き換えもOK
p [x,y,array[x][y].value]

#=> [1, 0, "2007年 夏休み予定表"]

(4..10).each{|x| (0..1).each{|y|
p [x,y,array[x][y].value]
}}

#=> [4, 0, "日付"] [4, 1, "曜日"]
#=> [5, 0, "2006/07/01 00:00:00"] [5, 1, "土"]
#=> [6, 0, "2006/07/02 00:00:00"] [6, 1, "日"]
#=> [7, 0, "2006/07/03 00:00:00"] [7, 1, "月"]
#=> [8, 0, "2006/07/04 00:00:00"] [8, 1, "火"]
#=> [9, 0, "2006/07/05 00:00:00"] [9, 1, "水"]
#=> [10, 0, "2006/07/06 00:00:00"] [10, 1, "木"]

p array

#=> [nil,
#=> [#],
#=> nil,
#=> nil,
#=> [#, #],
#=> [#, #],
#=> [#, #],
#=> [#, #],
#=> [#, #],
#=> [#, #],
#=> [#, #]
#=> ]

p :ok
----

* このプログラムで、オブジェクトを残す実装が良いとは思えないけど、それ
はそれ・・。

Take_tk = KUMAGAI Hidetake
たけ(tk)=熊谷秀武


投稿者 xml-rpc : 2006年7月 7日 16:29
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/41463
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。