Что нового

Массивы Двумерный массив

FrecKDancE

Новичок
Сообщения
19
Репутация
1
Всем привет. Столкнулся с проблемой создания второго столбца в таблице. С первым получилось всё как надо и выдаёт весь список, а со вторым не выходит. Это рабочий вариант с одномерным массивом:
Код:
            $iItems = UBound($aItems)
            Local $array[1000]
            $a = -1
               For $i = 0 To $iItems - 1 Step 2
               $classid = $aItems[$i]
               $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
               $a += 1
               $array[$a] = $hash_name
               next
            ReDim $array[$a + 1]
            _ArrayDisplay($array,"Название окна", Default, Default, Default, "Название|Цена")
Пытался сделать так:
Код:
            $iItems = UBound($aItems)
            Local $array[1000][2]
            $a = -1
               For $i = 0 To $iItems - 1 Step 2
               $classid = $aItems[$i]
               $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
               $a += 1
               $array[$a][2] = $hash_name,$classid
               next
            ReDim $array[$a + 1][2]
            _ArrayDisplay($array,"Название окна", Default, Default, Default, "Название|Цена")

Выдаёт ошибку :
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$array[$a][2] = $hash_name,$classid
 
Автор
F

FrecKDancE

Новичок
Сообщения
19
Репутация
1
Откуда ему быть рабочим, компилятор первую же строчку обругает.
Ошибку в первой же строчке не выдаёт, вот полный код:
Код:
         case $Button43
            $http10 = $http1&$apikey
            $http20 = BinaryToString(InetRead($http10,4))
            $aItems = StringRegExp($http20, '(?:"classid|market_hash_name)":"?([^"]+)', 3)
            $iItems = UBound($aItems)
            Local $array[1000]
            $a = -1
               For $i = 0 To $iItems - 1 Step 2
               $classid = $aItems[$i]
               $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
               $a += 1
               $array[$a] = $hash_name
               next
            ReDim $array[$a + 1]
            _ArrayDisplay($array,"Название окна", Default, Default, Default, "Название|Цена")
[code]
Ниже сам результат
 

Вложения

  • Безымянный1111.png
    Безымянный1111.png
    46.5 КБ · Просмотры: 7

IMStrelcov

CTPEJIbLLOB
Сообщения
258
Репутация
66
Выдаёт ошибку :
Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
$array[$a][2] = $hash_name,$classid
Вы вышли за пределы массива.
При объявлении массива указано: Local $array[1000][2]
в этом случае при обращении к массиву нужно:
$array[$a][0] = $hash_name
$array[$a][1] = $classid
 
Автор
F

FrecKDancE

Новичок
Сообщения
19
Репутация
1
Сделал так:
Код:
         case $Button43
            $http10 = $http1&$apikey
            $http20 = BinaryToString(InetRead($http10,4))
            $aItems = StringRegExp($http20, '(?:"classid|market_hash_name)":"?([^"]+)', 3)
            $iItems = UBound($aItems)
            Local $array[1000][2]
            $a = -1
               For $i = 0 To $iItems - 1 Step 2
               $classid = $aItems[$i]
               $hash_name = (($i + 1 < $iItems) ? $aItems[$i + 1] : '')
               $a += 1
               $array[$a][0] = $hash_name
               $array[$a][1] = $classid
            next
            ReDim $array[$a + 1]
            _ArrayDisplay($array,"Название окна", Default, $ARRAYDISPLAY_NOROW, Default, "Название|Цена")
Теперь он выдаёт пустую таблицу, но при этом кол-во строк он указывает верное (73)
 

Вложения

  • Безымянный1111.png
    Безымянный1111.png
    6.8 КБ · Просмотры: 4

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Код:
#include <Array.au3>

Dim $aItems[] = ["class1","price1","class2","price2","class3","price3","class4","price4","class5","price5"]
$iItems = UBound($aItems)
; если количество элементов нечётное
If Mod($iItems, 2) Then
  ReDim $aItems[$iItems + 1]
  $iItems += 1
EndIf
; создание и заполнение двумерного массива
Dim $array[$iItems / 2][2]
$a = 0
For $i = 0 To $iItems - 1 Step 2
  $array[$a][0] = $aItems[$i]
  $array[$a][1] = $aItems[$i + 1]
  If Not Mod($i, 2) Then $a += 1
Next

_ArrayDisplay($array,"Название окна", Default, Default, Default, "Название|Цена")
 
Автор
F

FrecKDancE

Новичок
Сообщения
19
Репутация
1
Код:
#include <Array.au3>

Dim $aItems[] = ["class1","price1","class2","price2","class3","price3","class4","price4","class5","price5"]
$iItems = UBound($aItems)
; если количество элементов нечётное
If Mod($iItems, 2) Then
  ReDim $aItems[$iItems + 1]
  $iItems += 1
EndIf
; создание и заполнение двумерного массива
Dim $array[$iItems / 2][2]
$a = 0
For $i = 0 To $iItems - 1 Step 2
  $array[$a][0] = $aItems[$i]
  $array[$a][1] = $aItems[$i + 1]
  If Not Mod($i, 2) Then $a += 1
Next

_ArrayDisplay($array,"Название окна", Default, Default, Default, "Название|Цена")
Немного переделал, т.к. все данные у меня динамические и берутся с сайта. Спасибо!
 
Верх