vbscript - How do I traverse a collection in classic ASP?


Translate

I want to be able to do:

For Each thing In things
End For

CLASSIC ASP - NOT .NET!


All Answers
  • Translate

    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.


  • Translate

    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
    

  • Translate

    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
    

  • Translate

    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
    

  • Translate

    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.


  • Translate

    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