16

I want to be able to do:

For Each thing In things
End For

CLASSIC ASP - NOT .NET!

thor
  • 21,418
  • 31
  • 87
  • 173
Ronnie
  • 8,053
  • 6
  • 34
  • 34

6 Answers6

13

Something like this?

dim cars(2),x
cars(0)="Volvo"
cars(1)="Saab"
cars(2)="BMW"

For Each x in cars
  response.write(x & "<br />")
Next

See www.w3schools.com.

If you want to associate keys and values use a dictionary object instead:

Dim objDictionary
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.Add "Name", "Scott"
objDictionary.Add "Age", "20"
if objDictionary.Exists("Name") then
    ' Do something
else
    ' Do something else 
end if
Csa77
  • 649
  • 13
  • 19
svandragt
  • 1,672
  • 20
  • 38
4

Whatever your [things] are need to be written outside of VBScript.

In VB6, you can write a Custom Collection class, then you'll need to compile to an ActiveX DLL and register it on your webserver to access it.

Brett Veenstra
  • 47,674
  • 18
  • 70
  • 86
2

The closest you are going to get is using a Dictionary (as mentioned by Pacifika)

Dim objDictionary
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.CompareMode = vbTextCompare 'makes the keys case insensitive'
objDictionary.Add "Name", "Scott"
objDictionary.Add "Age", "20"

But I loop through my dictionaries like a collection

For Each Entry In objDictionary
  Response.write objDictionary(Entry) & "<br />"
Next

You can loop through the entire dictionary this way writing out the values which would look like this:

Scott
20

You can also do this

For Each Entry In objDictionary
  Response.write Entry & ": " & objDictionary(Entry) & "<br />"
Next

Which would produce

 Name: Scott
 Age: 20
Skyhigh
  • 56
  • 1
1

One approach I've used before is to use a property of the collection that returns an array, which can be iterated over.

Class MyCollection
    Public Property Get Items
        Items = ReturnItemsAsAnArray()
    End Property
    ...
End Class

Iterate like:

Set things = New MyCollection
For Each thing in things.Items
    ...
Next
Mike Henry
  • 2,401
  • 1
  • 25
  • 34
0

As Brett said, its better to use a vb component to create collections. Dictionary objects are not very commonly used in ASP unless for specific need based applications.

Aravind
  • 113
  • 2
  • 3
  • 9
0

Be VERY carefully on using VB Script Dictionary Object!
Just discover this "autovivication" thing, native on this object: http://en.wikipedia.org/wiki/Autovivification

So, when you need to compare values, NEVER use a boolen comparison like:
If objDic.Item("varName") <> "" Then...
This will automatically add the key "varName" to the dictionary (if it doesn't exist, with an empty value) , in order to carry on evaluating the boolean expression.

If needed, use instead If objDic.Exists("varName").

Just spend a few days knocking walls, with this Microsoft "feature"...
vbscript-dictionary-object-creating-a-key-which-never-existed-but-present-in-another-object

Rizwan
  • 103
  • 4
  • 24
Pedro Ferreira
  • 493
  • 7
  • 14