<< : 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

···

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

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

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

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....

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,

···

On Mar 13, 2008, at 9:33 PM, Chinna Karuppan wrote:
--
Rolando Abarca M.

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 Thu, Mar 13, 2008 at 8:40 PM, Chinna Karuppan <chinnakaruppan@gmail.com> wrote:

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

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

···

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

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

···

On Fri, Mar 14, 2008 at 12:29 AM, Todd Benson <caduceass@gmail.com> wrote:

On Thu, Mar 13, 2008 at 8:40 PM, Chinna Karuppan > <chinnakaruppan@gmail.com> wrote:
> 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

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

Todd