Классический ASP Ubound возвращает 9, получая индекс вне диапазона - PullRequest
2 голосов
/ 25 октября 2010

Извините, если это было описано, но я не смог найти что-то конкретно по этой проблеме в своих поисках.

Я пытаюсь отладить классическое приложение ASP.Мне нужно напечатать переменные сеанса, одна из которых является массивом.Мой код ниже, я продолжаю получать Subscript вне диапазона, обычно это означает, что массив пуст (Ubound возвращает -1), но в этом случае он возвращается как 9. Я пробовал For i = 1 To 4 и For i = 0 To 4 сте же результаты.

 For Each Item In Session.Contents 
     If IsArray(Session(item)) Then 

        localArray = Session(item) 
        Response.Write "<h1>Ubound = " & Ubound(localArray) & "</h1> <br />" //getting Ubound = 9 here

        For i = 1 To Ubound(localArray)
           Response.Write "<br>&nbsp;&nbsp;" & item 
           Response.Write "(" & i & ") = " & localArray(i) 
        Next 

    Elseif IsObject(Session(item)) Then 
        Response.Write "<b>" & item & " is an object </b>" 
    Else 
        Response.Write item & " = " & Session(item) 
    End If 
    Response.Write "<br>" 
Next 

РЕДАКТИРОВАТЬ

Изменен код на

For i = LBound(localArray) To UBound(localArray)

Также пытались

localArray = Session(item)
Response.Write localArray(2) //since UBound returns 9 figured 2nd index should be safe

Iпо-прежнему получаю сообщение об ошибке, кажется, что массив не может быть одного измерения.Однако я не знаком со структурой или созданием этой переменной сеанса, есть ли способ получить структуру массива в ASP?

Ответы [ 2 ]

3 голосов
/ 25 октября 2010

Я смог использовать ответ здесь: Сколько измерений в моем массиве или получить последнее , чтобы получить размер массива. Я изменил свой код на:

            localArray = Session(item) 

        colStart = LBound(localArray, 1)
        colEnd = UBound(localArray, 1)
        rowStart = LBound(localArray, 2)
        rowEnd = UBound(localArray, 2)

        For row = rowStart To RowEnd
            For col = colStart To colEnd
                Response.Write localArray(col,row) & "<br />"
            Next
        Next

Итак, сегодня я узнал, что Subscript out of range для массива, который, как вы знаете, не находится вне диапазона, означает, что это не одномерный массив.

0 голосов
/ 25 октября 2010

Предполагая, что localArray является одномерным массивом, измените код на

For i = LBound(localArray) To Ubound(localArray)
   Response.Write "<br>&nbsp;&nbsp;" & item 
   Response.Write "(" & i & ") = " & localArray(i) 
Next 
...