2006年7月 7日

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

たけ(tk)です

[ruby-list:42553] Re: Array#default にて
take_tk さん曰く:

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

オブジェクトを残さない実装に変更するのも超簡単。

# aa[nn]=@workbook.worksheets(1).cells(n+1,nn+1)
# ↓
@workbook.worksheets(1).cells(n+1,nn+1) #←★オブジェクトを残さない

----
#! 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)
@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日 17:13
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/41467
トラックバック
コメント
コメントする




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