Присвойте один массив другому классическому жереху - PullRequest
0 голосов
/ 08 июля 2011

Я довольно новичок в классическом asp, и работать с массивами не весело: (

Я получаю сообщение об ошибке

            dim isMyApiResponse

            if MyAvailRooms = "Error" then
                isMyApiResponse = false
            else
                isMyApiResponse = true
                dim MyAvailArray()

                If InStr( MyAvailRooms, "," ) > 1 Then 
                    'response.write("<h2>MyAvailRooms is " & MyAvailRooms)
                    'response.write("<h2>var type of My avil rooms is " & VarType(MyAvailRooms))
                    MyAvailRooms = CStr(MyAvailRooms)
                    dim tempArray
                    tempArray = split(MyAvailRooms, ",")

                    dim sizeTempArray
                    sizeTempArray = UBound(tempArray)

                    response.write ("<h2>type of sizeTempArray is " &VarType(MyAvailArray))
                    response.write("<br/>type of temp array is " & VarType(tempArray))

                    reDim MyAvailArray(sizeTempArray)
                    MyAvailArray  = tempArray

                else 
                    ReDim MyAvailArray(1)
                    MyAvailArray (0) = MyAvailRooms
                end if
            end if

Я получаю несоответствие типов в строке " MyAvailArray = tempArray " выше. Я предполагаю, что это проблема динамического фиксированного массива или что-то в этом роде. Оба типа возвращаются как 8204 в моем reponse.write, я думаю, это вариант.

Я на грани привязи, пожалуйста, помогите мне Классический ASP ниндзя!

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Пока я не могу объяснить, почему это выдает ошибку:

MyAvailArray = tempArray

Вы можете циклически проходить через каждый элемент массива и присваивать их по одному, и это должно работать;)

Dim i
for i = 0 to sizeTempArray
    MyAvailArray(i) = tempArray(i)
next
1 голос
/ 09 июля 2011

У меня всегда были проблемы с объявлением динамических массивов с использованием синтаксиса Dim myArray().Я всегда объявляю свои массивы как обычные варианты, что позволяет мне позже использовать оператор ReDim.

(В качестве примечания, если мне понадобится пустой массив, я буду использовать Arrayфункция без аргументов, т.е. myArray = Array(). Преимущество заключается в том, что вызов функции UBound вернет -1 вместо того, чтобы выдавать ошибку, поэтому я легко могу определить, является ли массив пустым.)

Dim MyAvailArray

If InStr( MyAvailRooms, "," ) > 1 Then
    '<snip>'
    MyAvailArray = tempArray
Else 
    MyAvailArray = Array(MyAvailRooms)
End If

Обратите внимание, что для краткости я использовал функцию Array.


Кстати, проверка InStr не нужна, поскольку Split всегда будет возвращать массив, даже если разделитель не установлен.не в строке.Поэтому вы можете переписать код следующим образом:

Dim MyAvailArray
MyAvailArray = Split(MyAvailRooms, ",")
...