1

Тема: AHK: глобальный массив или большой список глобальных переменных

Есть такой вот код:


BigDB(obj,110,40)
BigDB(obj, db, size) {
  global
  big:=ReadDB(obj, db, 0, size)
  loop %size%
  {
  	;global
    db%db%dbd%A_Index%:=SubStr(big, (A_Index-1)*8,8)
  }
}

Вопрос вот в чем, как сделать так, что бы функция создавала глобальный массив, в который запишет все данные. Или это - db110dbd40, у меня вообще не массив а набор переменных с разным именем? У меня ведь цифры могут быть разные и после db, и после dbd. Просто так удобно читать данные... Можно тогда эти переменные сделать глобальными?
Единственное что нашел по глобальным массивам это вот:

global Arr := Array()
Arr[0] := 0

Что меня не совсем устраивает. По другому никак? И вообще, чем массив данных, допустим на тысячу, отличается от списка тысячи переменных?

2 (изменено: Alectric, 2017-08-17 17:54:05)

Re: AHK: глобальный массив или большой список глобальных переменных

Наверно нужно использовать объект или объекты.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3 (изменено: Alectric, 2017-08-17 19:50:14)

Re: AHK: глобальный массив или большой список глобальных переменных

Попробуй так:

global DB := []

BigDB(obj,110,40)

msgbox,% DB.110[1] "`n" DB.110[2] "`n" DB.110[3] "`n" DB.110[4]


BigDB(obj, DBnumber, size) {
  dbd := []
  big:=ReadDB(obj, db, 0, size)
  loop %size%
    dbd[A_Index]:=SubStr(big, (A_Index-1)*8+1,8)
  DB[DBnumber] := dbd
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

4

Re: AHK: глобальный массив или большой список глобальных переменных

Alectric Не, не получается. Сообщение с нулями.

5 (изменено: Alectric, 2017-08-17 17:54:45)

Re: AHK: глобальный массив или большой список глобальных переменных

В небольшом примере работает...

global DB := []

f(110)
f(3)

msgbox,% DB.110[1] "`n" DB.110[2] "`n" DB.110[3] "`n" DB.110[4]
msgbox,% DB.3[1] "`n" DB.3[2] "`n" DB.3[3] "`n" DB.3[4]

f(DBnumber)
{
  dbd := []
  loop,40
    dbd[a_index] := a_index*DBnumber
  DB[DBnumber] := dbd
}

...

Если бы не получалось нулей бы не было... была бы пустая строка.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

6 (изменено: Alectric, 2017-08-17 19:50:02)

Re: AHK: глобальный массив или большой список глобальных переменных

Нашел ошибку!

BigDB(obj, DBnumber, size) {
  dbd := []
  big:=ReadDB(obj, DBnumber, 0, size)   ;  <-----
  loop %size%
    dbd[A_Index]:=SubStr(big, (A_Index-1)*8+1,8)
  DB[DBnumber] := dbd
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

7 (изменено: Raven, 2017-08-17 17:55:20)

Re: AHK: глобальный массив или большой список глобальных переменных

Alectric Да, тоже нашел уже Почему то первый DB.110[1] нулю равен.

8

Re: AHK: глобальный массив или большой список глобальных переменных

А должно быть сколько?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9 (изменено: Alectric, 2017-08-17 18:11:20)

Re: AHK: глобальный массив или большой список глобальных переменных

Справка SubStr пишет:

String := "The Quick Brown Fox Jumps Over the Lazy Dog"
MsgBox % SubStr(String, 1, 19)  ; Returns "The Quick Brown Fox"

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

10

Re: AHK: глобальный массив или большой список глобальных переменных

Alectric Блин, это в контроллере ноль. А можно в массиве использовать DB.110[1], только заполнять массивы не с единицы а допустим 4, 8, 12, 16 и т.д.? Промежуточные элементы массива будут занимать место или нет?

11 (изменено: Alectric, 2017-08-17 18:07:57)

Re: AHK: глобальный массив или большой список глобальных переменных

Raven пишет:

Промежуточные элементы массива будут занимать место или нет?

Думаю в современных компьютерах это незначительное место.

SubStr(big, (A_Index-1)*8,8)

Тут выходит при первой итерации:

SubStr(big, 0,8)
big:="0123456789"

msgbox,% SubStr(big, 0,8) "`n" SubStr(big, 1,8)
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

12 (изменено: Alectric, 2017-08-17 19:49:44)

Re: AHK: глобальный массив или большой список глобальных переменных

Наверно так:

SubStr(big, (A_Index-1)*8+1,8)

Поправил в предыдущих постах.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

13

Re: AHK: глобальный массив или большой список глобальных переменных

Alectric Спасибо большое за помощь. Все в точности как вы и написали.