[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

<< : can some body check this code??

Chinna Karuppan

3/14/2008 1:33:00 AM

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

5 Answers

Chinna Karuppan

3/14/2008 1:41:00 AM

0

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

Todd Benson

3/14/2008 5:29:00 AM

0

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

Todd Benson

3/14/2008 5:35:00 AM

0

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

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

Rolando Abarca

3/14/2008 11:45:00 AM

0

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

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


regards,
--
Rolando Abarca M.





Chinna Karuppan

3/14/2008 3:59:00 PM

0

Thanks Todd, Rolando . I got the point (week[])....
I appreciate your help and time.
THnks
--
Posted via http://www.ruby-....