<< : can some body check this code?

why is it not working properly( weekly calendar)…
require “Date”
def mon_days(month,year=Date.today.year)
mday = [nil,31,28,31,30,31,30,31,31,30,31,30,31]
mday[2] = 29 if Date.leap? year
mday[month]
end

def cal_week(month,year=Date.today.year)
days = 1…mon_days(month,year)
weeks = []
week = []
wday = 1
for i in days
wday = Date.new(year,month,i).wday
week[wday] = i
if wday == 6
weeks << week
p week,weeks
week.clear

end

end
weeks << week if week.length != 0
weeks
end

p cal_week(4)

I think it is the problem of week still remembering the values…
THnks
CHinna

I think I found an answer not sure if it is normal way to do things…
weeks << week.clone instead of week…
Looking forward for comments…
THnks

  weeks << week
  p week,weeks
  week.clear

end

end
weeks << week if week.length != 0
weeks
end

p cal_week(4)

I think it is the problem of week still remembering the values…
THnks
CHinna

On Thu, Mar 13, 2008 at 8:40 PM, Chinna K.
[email protected] wrote:

  week.clear

THnks
CHinna

Yes, you are using the same Array object over and over with
week.clear. I tend to just do week = [] instead of clone.

Todd

On Fri, Mar 14, 2008 at 12:29 AM, Todd B. [email protected]
wrote:

p cal_week(4)

I think it is the problem of week still remembering the values…
THnks
CHinna

Yes, you are using the same Array object over and over with
week.clear. I tend to just do week = [] instead of clone.

Todd

Sorry, didn’t post example. Here it is using your code…

require “Date”
def mon_days(month,year=Date.today.year)
mday = [nil,31,28,31,30,31,30,31,31,30,31,30,31]
mday[2] = 29 if Date.leap? year
mday[month]
end

def cal_week(month,year=Date.today.year)
days = 1…mon_days(month,year)
weeks = []
week = []
wday = 1
for i in days
wday = Date.new(year,month,i).wday
week[wday] = i
if wday == 6
weeks << week
week = []
end
end
weeks << week if week.length != 0
weeks
end

p cal_week(4)

Todd

Thanks Todd, Rolando . I got the point (week[])…
I appreciate your help and time.
THnks

On Mar 13, 2008, at 9:33 PM, Chinna K. wrote:

weeks = []
end
end
weeks << week if week.length != 0
weeks
end

p cal_week(4)

I think it is the problem of week still remembering the values…

the problem is that you’re using the same week array. Here’s another
solution for the same problem:

def cal_week(month, year = Date.today.year)
fotm = Date.new(year,month,1) # first of the month
lotm = (fotm >> 1) - 1 # last of the month
weeks = []
week = []
fotm.upto(lotm) do |d|
week[d.wday] = d.day
if d.wday == 6
weeks << week
week = []
end
end
weeks << week unless week.empty?
end

p cal_week(4)

THnks
CHinna

Posted via http://www.ruby-forum.com/.

regards,