循环访问或访问字符串数组

时间:2018-12-17 17:02:34

标签: arrays string vbscript

我正在尝试访问Session.Contents的值,其中有些似乎是字符串数组。

我尝试使用下面的代码直接获取这些数组中的值:

Session.Contents.Item(sessItem)(1)

两种方法都将引发错误。基于similar posts,看来这在VBScript中是不可能的吗?

第92行对应于

For each x in Session.Contents.Item(sessItem)

我从Microsoft Documentation获得了循环,但是示例代码并未使objArray变暗,效果很好。

Dim sessItem,x
For Each sessItem In Session.Contents 
If IsArray(Session.Contents.Item(sessItem)) Then 
    Response.Write("Type of sessItem contents = " & TypeName(Session.Contents(sessItem)) & "  VarType = " & VarType(Session.Contents(sessItem)) &"<br>")
    Response.write sessItem & " : an array of the following " & UBound(Session.Contents.Item(sessItem))+1 & " items <BR>" 
    For each x in Session.Contents.Item(sessItem) 
        Response.write "- " & x & "<BR>" 
    Next 
    ElseIf IsObject(Session.Contents.Item(sessItem)) Then 
        Response.write(sessItem & " : Session object cannot be displayed." & "<BR>") 
    Else 
        'Response.write(sessItem & " : " & CStr(Session.Contents.Item(sessItem)) & "<BR>") 
    End If 
Next 

sessItem内容的类型为String()(VarType = 8200)。

Cached_AccountDetails:以下11个项目的数组

  

Microsoft VBScript运行时错误'800a000d'
  类型不匹配
  Statement.asp,第92行

1 个答案:

答案 0 :(得分:1)

我认为您还需要检查Null值,还需要对Nothing和嵌套/混合类型的数组进行更好的处理,最后需要通过{{1}进行输出转义},以便正确显示带有HTML特殊字符的值。

值得编写一个递归的实用程序函数,该函数可以转储任何类型的值(除了Server.HtmlEncode()以外的任何其他类型的数组,因为VBScript无法处理它们):

Variant

用法很简单:

Sub Dump(value)
    Dim isCollection, i
    On Error Resume Next
    For Each i In value
        isCollection = (Err.Number = 0) And Not IsArray(value)
        Exit For
    Next
    On Error GoTo 0

    If isCollection Then
        Response.Write "<i>Collection</i><br>"
        For Each i In value
            Response.Write "<b>" & Server.HtmlEncode(i) & "</b> : "
            Dump value(i)
            Response.Write "<br>"
        Next
    ElseIf IsArray(value) Then
        Response.Write "<i>" & Replace(TypeName(value), "()", "(" & (UBound(value) + 1) & ")") & "</i><br>"
        If TypeName(value) = "Variant()" Then
            For i = LBound(value) To UBound(value)
                Response.Write i & ": " 
                Dump value(i)
                Response.Write "<br>"
            Next
        Else
            Response.Write "(cannot display non-variant arrays)"
        End If
    Else
        Response.Write "<i>" & TypeName(value) & "</i> "
        If IsObject(value) Then
            If Not value Is Nothing Then Response.Write "(cannot be displayed)"
        ElseIf Not IsNull(value) Then
            Response.Write Server.HtmlEncode(value)
        End If
    End If
End Sub

我测试过的各种东西的输出:

  

集合
FOO 字符串 BLA
BAR :   布尔值 True
BAZ 整数 42
QUX :    Variant(4)
0:整数 1
1:整数 2
2:    Double 3,14159265
3:日期 2018年12月17日   19:22:15

WALDO
FRED :    FileSystemObject (无法显示)
QUUX :   没事

缺少:嵌套数组的嵌套输出。可以使用Dump Session.Contents / <ul>完成。