Question

I want to be able to do:

For Each thing In things
End For

CLASSIC ASP - NOT .NET!

Was it helpful?

Solution

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.

OTHER TIPS

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

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

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

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.

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 Mcrosoft "feature"...
vbscript-dictionary-object-creating-a-key-which-never-existed-but-present-in-another-object

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top