Home All Groups Group Topic Archive Search About
Author
13 Oct 2006 9:29 AM
iulian.ilea
Hello,

I have this code:
________________________________________________________

if VarType(eval("inTotal" & arr(4,i1)))=0 then
   response.write "ok, dim"
   execute("dim inTotal" & arr(4,i1) & ":inTotal" & arr(4,i1) & "=" &
arr_(i1,i2))
   'it is working, I have variable
else
   execute("inTotal" & arr(4,i1) & " = inTotal" & arr(4,i1) & " + " &
arr_(i1,i2))
  'here is not working any more.
end if
________________________________________________________

Error Type:
Microsoft VBScript compilation (0x800A0401)
Expected end of statement
/test.asp, line 308

What should be the problem?

Author
13 Oct 2006 10:48 AM
Anthony Jones
<iulian.i***@gmail.com> wrote in message
Show quoteHide quote
news:1160731752.508386.129980@k70g2000cwa.googlegroups.com...
> Hello,
>
> I have this code:
> ________________________________________________________
>
> if VarType(eval("inTotal" & arr(4,i1)))=0 then
>    response.write "ok, dim"
>    execute("dim inTotal" & arr(4,i1) & ":inTotal" & arr(4,i1) & "=" &
> arr_(i1,i2))
>    'it is working, I have variable
> else
>    execute("inTotal" & arr(4,i1) & " = inTotal" & arr(4,i1) & " + " &
> arr_(i1,i2))
>   'here is not working any more.
> end if
> ________________________________________________________
>
> Error Type:
> Microsoft VBScript compilation (0x800A0401)
> Expected end of statement
> /test.asp, line 308
>
> What should be the problem?
>

The problem is your using Execute and Eval.  Stop using them.  Make inTotal
into an array then you don't need them.  If arr(4, i1) returns a string then
use a Scripting.Dictionary object to store a name/value pairs.

Slap this in a VBS file and take a look at how it works:-

Dim arr_(2,2)
Dim temp
Dim Key
Dim i, j
Dim inTotal

For i = 0 to 2
arr_(0,i) = "ListOfValues" & i
arr_(1,i) = i
arr_(2,i) = i * 2
Next

Set inTotal = CreateObject("Scripting.Dictionary")

For i = LBound(arr_, 2) to UBound(arr_, 2)
temp = 0
For j = 1 To UBound(arr_, 1)
  temp = temp + arr_(j, i)
Next
inTotal(arr_(0,i)) = inTotal(arr_(0,i)) + temp
Next

For Each Key In inTotal
MsgBox Key & " Total = " & inTotal(Key)
Next

Anthony.
Are all your drivers up to date? click for free checkup

Author
13 Oct 2006 5:09 PM
iulian.ilea
I have to use those two (eval and execute), I have no other way to
resolve this because I can have 20 variables or more, just one or none.
So, obviously that I don't know what variables to define. I use option
explicit so it is mandatory to define them.

Another solution is to define an array with n elements (i.e.: arr(58))
and use only some of them (i.e.: arr(1), arr(32)) but in this case I
load in memory a full array. Is not a very good solution.

By the way: I made it work in the way I wanted.

Anthony Jones wrote:
Show quoteHide quote
> <iulian.i***@gmail.com> wrote in message
> news:1160731752.508386.129980@k70g2000cwa.googlegroups.com...
> > Hello,
> >
> > I have this code:
> > ________________________________________________________
> >
> > if VarType(eval("inTotal" & arr(4,i1)))=0 then
> >    response.write "ok, dim"
> >    execute("dim inTotal" & arr(4,i1) & ":inTotal" & arr(4,i1) & "=" &
> > arr_(i1,i2))
> >    'it is working, I have variable
> > else
> >    execute("inTotal" & arr(4,i1) & " = inTotal" & arr(4,i1) & " + " &
> > arr_(i1,i2))
> >   'here is not working any more.
> > end if
> > ________________________________________________________
> >
> > Error Type:
> > Microsoft VBScript compilation (0x800A0401)
> > Expected end of statement
> > /test.asp, line 308
> >
> > What should be the problem?
> >
>
> The problem is your using Execute and Eval.  Stop using them.  Make inTotal
> into an array then you don't need them.  If arr(4, i1) returns a string then
> use a Scripting.Dictionary object to store a name/value pairs.
>
> Slap this in a VBS file and take a look at how it works:-
>
> Dim arr_(2,2)
> Dim temp
> Dim Key
> Dim i, j
> Dim inTotal
>
> For i = 0 to 2
>  arr_(0,i) = "ListOfValues" & i
>  arr_(1,i) = i
>  arr_(2,i) = i * 2
> Next
>
> Set inTotal = CreateObject("Scripting.Dictionary")
>
> For i = LBound(arr_, 2) to UBound(arr_, 2)
>  temp = 0
>  For j = 1 To UBound(arr_, 1)
>   temp = temp + arr_(j, i)
>  Next
>  inTotal(arr_(0,i)) = inTotal(arr_(0,i)) + temp
> Next
>
> For Each Key In inTotal
>  MsgBox Key & " Total = " & inTotal(Key)
> Next
>
> Anthony.
Author
13 Oct 2006 5:24 PM
Anthony Jones
<iulian.i***@gmail.com> wrote in message
news:1160759384.724751.134070@e3g2000cwe.googlegroups.com...
> I have to use those two (eval and execute), I have no other way to
> resolve this because I can have 20 variables or more, just one or none.
> So, obviously that I don't know what variables to define. I use option
> explicit so it is mandatory to define them.
>
> Another solution is to define an array with n elements (i.e.: arr(58))
> and use only some of them (i.e.: arr(1), arr(32)) but in this case I
> load in memory a full array. Is not a very good solution.
>
> By the way: I made it work in the way I wanted.

Each to his own.  But arr(58) would've been better it equates to ;ess than
1KB of memory and will significantly out perform Executes and Evals.


Show quoteHide quote
>
> Anthony Jones wrote:
> > <iulian.i***@gmail.com> wrote in message
> > news:1160731752.508386.129980@k70g2000cwa.googlegroups.com...
> > > Hello,
> > >
> > > I have this code:
> > > ________________________________________________________
> > >
> > > if VarType(eval("inTotal" & arr(4,i1)))=0 then
> > >    response.write "ok, dim"
> > >    execute("dim inTotal" & arr(4,i1) & ":inTotal" & arr(4,i1) & "=" &
> > > arr_(i1,i2))
> > >    'it is working, I have variable
> > > else
> > >    execute("inTotal" & arr(4,i1) & " = inTotal" & arr(4,i1) & " + " &
> > > arr_(i1,i2))
> > >   'here is not working any more.
> > > end if
> > > ________________________________________________________
> > >
> > > Error Type:
> > > Microsoft VBScript compilation (0x800A0401)
> > > Expected end of statement
> > > /test.asp, line 308
> > >
> > > What should be the problem?
> > >
> >
> > The problem is your using Execute and Eval.  Stop using them.  Make
inTotal
> > into an array then you don't need them.  If arr(4, i1) returns a string
then
> > use a Scripting.Dictionary object to store a name/value pairs.
> >
> > Slap this in a VBS file and take a look at how it works:-
> >
> > Dim arr_(2,2)
> > Dim temp
> > Dim Key
> > Dim i, j
> > Dim inTotal
> >
> > For i = 0 to 2
> >  arr_(0,i) = "ListOfValues" & i
> >  arr_(1,i) = i
> >  arr_(2,i) = i * 2
> > Next
> >
> > Set inTotal = CreateObject("Scripting.Dictionary")
> >
> > For i = LBound(arr_, 2) to UBound(arr_, 2)
> >  temp = 0
> >  For j = 1 To UBound(arr_, 1)
> >   temp = temp + arr_(j, i)
> >  Next
> >  inTotal(arr_(0,i)) = inTotal(arr_(0,i)) + temp
> > Next
> >
> > For Each Key In inTotal
> >  MsgBox Key & " Total = " & inTotal(Key)
> > Next
> >
> > Anthony.
>
Author
22 Oct 2006 11:56 AM
iulian.ilea
Anthony Jones wrote:
Show quoteHide quote
> <iulian.i***@gmail.com> wrote in message
> news:1160759384.724751.134070@e3g2000cwe.googlegroups.com...
> > I have to use those two (eval and execute), I have no other way to
> > resolve this because I can have 20 variables or more, just one or none.
> > So, obviously that I don't know what variables to define. I use option
> > explicit so it is mandatory to define them.
> >
> > Another solution is to define an array with n elements (i.e.: arr(58))
> > and use only some of them (i.e.: arr(1), arr(32)) but in this case I
> > load in memory a full array. Is not a very good solution.
> >
> > By the way: I made it work in the way I wanted.
>
> Each to his own.  But arr(58) would've been better it equates to ;ess than
> 1KB of memory and will significantly out perform Executes and Evals.
>
>
> >
> > Anthony Jones wrote:
> > > <iulian.i***@gmail.com> wrote in message
> > > news:1160731752.508386.129980@k70g2000cwa.googlegroups.com...
> > > > Hello,
> > > >
> > > > I have this code:
> > > > ________________________________________________________
> > > >
> > > > if VarType(eval("inTotal" & arr(4,i1)))=0 then
> > > >    response.write "ok, dim"
> > > >    execute("dim inTotal" & arr(4,i1) & ":inTotal" & arr(4,i1) & "=" &
> > > > arr_(i1,i2))
> > > >    'it is working, I have variable
> > > > else
> > > >    execute("inTotal" & arr(4,i1) & " = inTotal" & arr(4,i1) & " + " &
> > > > arr_(i1,i2))
> > > >   'here is not working any more.
> > > > end if
> > > > ________________________________________________________
> > > >
> > > > Error Type:
> > > > Microsoft VBScript compilation (0x800A0401)
> > > > Expected end of statement
> > > > /test.asp, line 308
> > > >
> > > > What should be the problem?
> > > >
> > >
> > > The problem is your using Execute and Eval.  Stop using them.  Make
> inTotal
> > > into an array then you don't need them.  If arr(4, i1) returns a string
> then
> > > use a Scripting.Dictionary object to store a name/value pairs.
> > >
> > > Slap this in a VBS file and take a look at how it works:-
> > >
> > > Dim arr_(2,2)
> > > Dim temp
> > > Dim Key
> > > Dim i, j
> > > Dim inTotal
> > >
> > > For i = 0 to 2
> > >  arr_(0,i) = "ListOfValues" & i
> > >  arr_(1,i) = i
> > >  arr_(2,i) = i * 2
> > > Next
> > >
> > > Set inTotal = CreateObject("Scripting.Dictionary")
> > >
> > > For i = LBound(arr_, 2) to UBound(arr_, 2)
> > >  temp = 0
> > >  For j = 1 To UBound(arr_, 1)
> > >   temp = temp + arr_(j, i)
> > >  Next
> > >  inTotal(arr_(0,i)) = inTotal(arr_(0,i)) + temp
> > > Next
> > >
> > > For Each Key In inTotal
> > >  MsgBox Key & " Total = " & inTotal(Key)
> > > Next
> > >
> > > Anthony.
> >

Anthony, if I use arr(n) is more efficiently than using execute("dim
var...") ?
Author
22 Oct 2006 12:47 PM
Bob Barrows [MVP]
iulian.i***@gmail.com wrote:

> Anthony, if I use arr(n) is more efficiently than using execute("dim
> var...") ?

Absolutely. Execute should be avoided like the plague.

http://blogs.msdn.com/ericlippert/archive/2003/11/01/53329.aspx
http://blogs.msdn.com/ericlippert/archive/2003/11/04/53335.aspx

--
Microsoft MVP - ASP/ASP.NET
Please reply to the newsgroup. This email account is my spam trap so I
don't check it very often. If you must reply off-line, then remove the
"NO SPAM"
Author
13 Oct 2006 5:37 PM
Jon Paal
obviously we can't help as we don't know what line 308 is.....


Show quoteHide quote
<iulian.i***@gmail.com> wrote in message news:1160731752.508386.129980@k70g2000cwa.googlegroups.com...
> Hello,
>
> I have this code:
> ________________________________________________________
>
> if VarType(eval("inTotal" & arr(4,i1)))=0 then
>   response.write "ok, dim"
>   execute("dim inTotal" & arr(4,i1) & ":inTotal" & arr(4,i1) & "=" &
> arr_(i1,i2))
>   'it is working, I have variable
> else
>   execute("inTotal" & arr(4,i1) & " = inTotal" & arr(4,i1) & " + " &
> arr_(i1,i2))
>  'here is not working any more.
> end if
> ________________________________________________________
>
> Error Type:
> Microsoft VBScript compilation (0x800A0401)
> Expected end of statement
> /test.asp, line 308
>
> What should be the problem?
>

Bookmark and Share