• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 2030
  • Last Modified:

Array of structs

I know you can use Arrays in VBScript, but can you do an array of structs?

Something like:

Type LabelType
  message As String
  active As Boolean
End Type

Dim LabelStruct(30) As LabelType

Response.Write LabelStruct(1).message
Response.Write LabelStruct(2).message
Response.Write LabelStruct(2).active
Response.Write LabelStruct(3).message


etc???
0
Tom Knowlton
Asked:
Tom Knowlton
  • 11
  • 8
  • 3
2 Solutions
 
fritz_the_blankCommented:
With ASP.Net you can create hash tables to do this. In ASP classic, you can create your own custom classes, but I don't know that you can iterate through the values the way that you list above.

Fritz the Blank
0
 
Mike_MetroCommented:
ASP does not allow the Type statement or explicit data types.  You have to create a class.

Class LabelType
  Public message
  Public active
End Class

Set oType = new LabelType
oType.Message = "Hello"
oType.Active = true

Set LabelStruct(1) = oType
etc.

Response.Write LabelStruct(1).message
Response.Write LabelStruct(2).message
Response.Write LabelStruct(2).active
Response.Write LabelStruct(3).message


0
 
Mike_MetroCommented:
Sorry Fritz I meant to say ...."as Fritz the Blank stated ASP does not allow .... " didn't mean to plagerize
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
fritz_the_blankCommented:
To build on what Mike_Metro has said (and continuing with my idea of using a custom class):

If you do this:

Class LabelType
  Public message
  Public active
End Class

Set oType = new LabelType
oType.Message = "Hello"
oType.Active = true

Set LabelStruct(1) = oType
etc.

you will still need to create a new instance of the class for each Message/Active pair. If you follow a consistent naming convention, however, you can iterate through like this:

for i=0 to 10
  response.write(eval("LabelStruct(" & i &")")
next

but it is inefficient....

FtB
0
 
fritz_the_blankCommented:
Using a multideminsional array would be better:

arrLabel =  new Array(12,2)

arrLabel(0,0)="This is the first message"
arrLabel(0,1)="Active"
arrLabel(1,0)="This is the second message"
arrLabel(1,1)="Inactive"
arrLabel(2,0)="This is the third message"
arrLabel(2,1)="Active"


Now you can iterate through everything easily.

Fritz the Blank
0
 
Tom KnowltonWeb developerAuthor Commented:
fritz:

Not sure what you mean (sorry).
0
 
Tom KnowltonWeb developerAuthor Commented:
Can I return multi-dimensional arrays back from function calls?

Function FillArray(myArray As Array) As Array
  'Fill the array


  FillArray = myArray
End Function
0
 
Tom KnowltonWeb developerAuthor Commented:
http://www.knowltonfamily.com/robotz_te/tom_test.asp


Is not working.


Here is the source code for this page:

<%
arrLabel =  new Array(12,2)

arrLabel(0,0)="This is the first message"
arrLabel(0,1)="Active"
arrLabel(1,0)="This is the second message"
arrLabel(1,1)="Inactive"
arrLabel(2,0)="This is the third message"
arrLabel(2,1)="Active"

Response.Write arrLabel(0,0)
Response.Write arrLabel(0,1)
Response.Write arrLabel(1,0)
Response.Write arrLabel(1,1)
Response.Write arrLabel(2,0)
Response.Write arrLabel(2,1)

%>

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

</body>
</html>
0
 
Tom KnowltonWeb developerAuthor Commented:
I get this message:

Microsoft VBScript compilation  error '800a0401'

Expected end of statement

/robotz_te/tom_test.asp, line 2

arrLabel =  new Array(12,2)
---------------------^
0
 
fritz_the_blankCommented:
I haven't tried that. so I can't say for certain. However, you can always declare the array outside of the function and manipulate it with a subroutine. Alternatively, and again I haven't tried this, you can pass the array as an object to your funciton:

Function FillArray(By Ref myArray)

About this:

>>Not sure what you mean (sorry).<<

Is there something that I can clarify?


FtB
0
 
Tom KnowltonWeb developerAuthor Commented:
>>Not sure what you mean (sorry).<<


Moot at this point.......ignore it.
0
 
Mike_MetroCommented:
Try this:
Dim arrLabel(12,2)
0
 
Tom KnowltonWeb developerAuthor Commented:
That did the trick!!!!



~~~~~~~~~~~~~~~~~~~~~~~~
Sample code for those who follow:
~~~~~~~~~~~~~~~~~~~~~~~~


<%
Dim arrLabel(12,2)

arrLabel(0,0)="This is the first message"
arrLabel(0,1)="Active"
arrLabel(1,0)="This is the second message"
arrLabel(1,1)="Inactive"
arrLabel(2,0)="This is the third message"
arrLabel(2,1)="Active"

Response.Write arrLabel(0,0)
Response.Write arrLabel(0,1)
Response.Write arrLabel(1,0)
Response.Write arrLabel(1,1)
Response.Write arrLabel(2,0)
Response.Write arrLabel(2,1)

%>

<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

</body>
</html>
0
 
fritz_the_blankCommented:
Oops! Sorry about the syntax error--I slipped into JScript. Mike_Metro has provided the correct syntax above.

Fritz the Blank
0
 
Tom KnowltonWeb developerAuthor Commented:
fritz:  I figured you knew the correct syntax.

Try going from VB to C++ or C#.   Lots o' fun:

=    vs   ==

ending everything with ;


Drives me crazy.
0
 
Tom KnowltonWeb developerAuthor Commented:
I guess JavaScript would have the same woes.
0
 
fritz_the_blankCommented:
Knowlton--

Are you using C# with .Net?

Fritz the Blank
0
 
Tom KnowltonWeb developerAuthor Commented:
Yes
0
 
fritz_the_blankCommented:
Another approach may be to use a Hash table....

http://www.w3schools.com/aspnet/aspnet_hashtable.asp

Fritz the Blank
0
 
Tom KnowltonWeb developerAuthor Commented:
My account on brinkster.com does not support ASPX (yet)
0
 
fritz_the_blankCommented:
Ah. Until then...

FtB
0
 
Tom KnowltonWeb developerAuthor Commented:
But....thanks for the link!!!!!
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 11
  • 8
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now