Массивы: различия между версиями

Материал из UoPilot
Перейти к навигации Перейти к поиску
(Новая страница: « == Описание == Самый простой способ понять массивы - это рассматривать их как набор одноим...»)
 
 
Строка 36: Строка 36:
 
  %arr [ #i ]
 
  %arr [ #i ]
 
В этой записи мы создаем переменную #i равной 1, затем используем ее при обращении к массиву. После каждого обращения к массиву мы увеличиваем значение переменной на 1 (set #i #i + 1). Таким образом, не смотря на то, что мы постоянно обращаемся к %arr [ #i ], каждый раз обращение происходит к следующему элементу, т.к. #i у нас увеличивается на 1.
 
В этой записи мы создаем переменную #i равной 1, затем используем ее при обращении к массиву. После каждого обращения к массиву мы увеличиваем значение переменной на 1 (set #i #i + 1). Таким образом, не смотря на то, что мы постоянно обращаемся к %arr [ #i ], каждый раз обращение происходит к следующему элементу, т.к. #i у нас увеличивается на 1.
<br>Чтобы не писать такие однотипные строки, можно использовать оператор for. Весь смысл этого оператора- выполнять код циклами, увеличивая(или уменьшая) указанную переменную-счётчик.
+
<br>Чтобы не писать такие однотипные строки, можно использовать оператор for. Весь смысл этого оператора- выполнять код циклами, увеличивая(или уменьшая) указанную переменную-счётчик.
 
  for #i 1 5 1
 
  for #i 1 5 1
&lt;br>#i - изменяемая переменная ("счётчик")
+
<br>#i - изменяемая переменная ("счётчик")
&lt;br>1 (первая в записи) - начальное значение
+
<br>1 (первая в записи) - начальное значение
&lt;br>5 - конечное значение (при его превышении цикл прервется)
+
<br>5 - конечное значение (при его превышении цикл прервется)
&lt;br>1 (вторая в записи) - число которое будет каждый раз прибавляться.
+
<br>1 (вторая в записи) - число которое будет каждый раз прибавляться.
&lt;br>&lt;br>Проще говоря запись означает, создать переменную #i равной 1 и прибавлять 1, пока #i не станет больше 5.
+
<br><br>Проще говоря запись означает, создать переменную #i равной 1 и прибавлять 1, пока #i не станет больше 5.
 
В нашем примере это выглядело бы так:
 
В нашем примере это выглядело бы так:
 
  for #i 1 5 1
 
  for #i 1 5 1
Строка 53: Строка 53:
 
  %arr [ 4 ]
 
  %arr [ 4 ]
 
  %arr [ 5 ]
 
  %arr [ 5 ]
&lt;br>Собственно если понять смысл данного поста, то 90% возможностей массивов вы сможете использовать.
+
<br>Собственно если понять смысл данного поста, то 90% возможностей массивов вы сможете использовать.
&lt;br>&lt;br>Если не всё понятно, то ещё небольшое описание. По сути, массив - это таблица, в которой каждая ячейка имеет номер по горизонтали и вертикали, и в ней находятся какие-то данные.
+
<br><br>Если не всё понятно, то ещё небольшое описание. По сути, массив - это таблица, в которой каждая ячейка имеет номер по горизонтали и вертикали, и в ней находятся какие-то данные.
 
Допустим имеется массив 3*2 (3 строки и 2 столбца), с именем %arr:
 
Допустим имеется массив 3*2 (3 строки и 2 столбца), с именем %arr:
 
  // Это массив:
 
  // Это массив:
Строка 68: Строка 68:
 
  End_script
 
  End_script
 
Если открыть файл 'SaveArray.txt', то увидим:
 
Если открыть файл 'SaveArray.txt', то увидим:
&lt;br>100 200  
+
<br>100 200  
&lt;br>300 400
+
<br>300 400
&lt;br>500 600
+
<br>500 600
&lt;br>Чтобы обратиться к какому-то элементу массива нужно указать индексы (номер строки и столбца):
+
<br>Чтобы обратиться к какому-то элементу массива нужно указать индексы (номер строки и столбца):
 
  set %arr [1 1] 100
 
  set %arr [1 1] 100
 
  set %arr [1 2] 200
 
  set %arr [1 2] 200
Строка 100: Строка 100:
 
  End_script
 
  End_script
 
Массив может быть одномерным, в нём только один столбец, т. е. указывается только номер строки.
 
Массив может быть одномерным, в нём только один столбец, т. е. указывается только номер строки.
&lt;br>И может быть двумерным, тогда нужно указывать номер строки и столбца.
+
<br>И может быть двумерным, тогда нужно указывать номер строки и столбца.
 
== Синтаксис ==
 
== Синтаксис ==
 
Привязка к окну: Нет.
 
Привязка к окну: Нет.
&lt;br>Работа со свернутым окном: Да.
+
<br>Работа со свернутым окном: Да.
  
  set &lt;массив> [номер_строки] &lt;значение>
+
  set <массив> [номер_строки] <значение>
 
Одномерный массив, где:
 
Одномерный массив, где:
&lt;br>'''&lt;массив>''' - имя массива, может состоять из букв и цифр. Начинаться должно с '%'
+
<br>'''<массив>''' - имя массива, может состоять из букв и цифр. Начинаться должно с '%'
&lt;br>'''[номер_строки]''' - номер строки массива.
+
<br>'''[номер_строки]''' - номер строки массива.
&lt;br>'''&lt;значение>''' - значение элемента массива.
+
<br>'''<значение>''' - значение элемента массива.
  
  set &lt;массив> [номер_строки номер_столбца] &lt;значение>
+
  set <массив> [номер_строки номер_столбца] <значение>
 
Двумерный массив, где:
 
Двумерный массив, где:
&lt;br>'''&lt;массив>''' - имя массива, может состоять из букв и цифр. Начинаться должно с '%'
+
<br>'''<массив>''' - имя массива, может состоять из букв и цифр. Начинаться должно с '%'
&lt;br>'''[номер_строки номер_столбца]''' - номер строки и столбца массива.
+
<br>'''[номер_строки номер_столбца]''' - номер строки и столбца массива.
&lt;br>'''&lt;значение>''' - значение элемента массива.
+
<br>'''<значение>''' - значение элемента массива.
  
 
== Примеры ==
 
== Примеры ==
Строка 163: Строка 163:
  
 
[[Init arr]]
 
[[Init arr]]
&lt;br>[[Indexof]]
+
<br>[[Indexof]]
&lt;br>[[Load array]]
+
<br>[[Load array]]
&lt;br>[[Save array]]
+
<br>[[Save array]]
&lt;br>[[Sort array]]
+
<br>[[Sort array]]
&lt;br>[[Delete array]]
+
<br>[[Delete array]]
  
 
== История развития ==
 
== История развития ==
  
 
'''1.07 beta 5'''
 
'''1.07 beta 5'''
&lt;br>Добавил массивы. отныне символ процента '%' считается идентификатором массива. индексы массива указываются после имени в квадратных скобках '[' и ']'. размер массива равен максимальному использованному индексу. присваивание значений осуществляется каждому элементу индивидуально. элементы массива могут содержать как строки, так и числа.  
+
<br>Добавил массивы. отныне символ процента '%' считается идентификатором массива. индексы массива указываются после имени в квадратных скобках '[' и ']'. размер массива равен максимальному использованному индексу. присваивание значений осуществляется каждому элементу индивидуально. элементы массива могут содержать как строки, так и числа.  
 
допустимо ссылаться на массивы параллельных скриптов, указав после имени массива, через точку, номер скрипта.
 
допустимо ссылаться на массивы параллельных скриптов, указав после имени массива, через точку, номер скрипта.
 
при указании только первого индекса в двумерном массиве, результатом будет строка из всех элементов второй размерности массива, соответствующих указанному индексу, и разделенных пробелом
 
при указании только первого индекса в двумерном массиве, результатом будет строка из всех элементов второй размерности массива, соответствующих указанному индексу, и разделенных пробелом
Строка 182: Строка 182:
  
 
'''1.07 beta 7'''
 
'''1.07 beta 7'''
&lt;br>Исправил ошибку присваивания элементам массива значений переменных.
+
<br>Исправил ошибку присваивания элементам массива значений переменных.
  
 
'''2.02'''
 
'''2.02'''
&lt;br>Исправил ошибку с присваиванием значений всегда только последнему элементу массивов, независимо от указанного.
+
<br>Исправил ошибку с присваиванием значений всегда только последнему элементу массивов, независимо от указанного.
&lt;br>Исправил ошибку с присваиванием значений массивам скрипта с номером 0, из других скриптов.
+
<br>Исправил ошибку с присваиванием значений массивам скрипта с номером 0, из других скриптов.
  
 
'''2.05'''
 
'''2.05'''
&lt;br>Добавил переменную delimiter, используется для разделения элементов массива:
+
<br>Добавил переменную delimiter, используется для разделения элементов массива:
 
  set %a [1 1] 1
 
  set %a [1 1] 1
 
  set %a [1 2] 2
 
  set %a [1 2] 2
Строка 201: Строка 201:
  
 
'''2.17'''
 
'''2.17'''
&lt;br>Добавил функцию 'size', возвращает длину указанного параметра пример:
+
<br>Добавил функцию 'size', возвращает длину указанного параметра пример:
 
  set %q [4 3] test string here
 
  set %q [4 3] test string here
 
  set %q [7 5] 0
 
  set %q [7 5] 0
Строка 214: Строка 214:
  
 
'''2.19'''
 
'''2.19'''
&lt;br>Исправил эксепшен при попытке записи пустого массива.
+
<br>Исправил эксепшен при попытке записи пустого массива.
&lt;br>Массивы загружаются оттуда же, откуда и скрипты, если не указано иное.
+
<br>Массивы загружаются оттуда же, откуда и скрипты, если не указано иное.
&lt;br>Исправил ошибку с зарузкой массива (в результате чего оно дописывалось в конец существующего массива и он увеличивался с каждой загрузкой).
+
<br>Исправил ошибку с зарузкой массива (в результате чего оно дописывалось в конец существующего массива и он увеличивался с каждой загрузкой).
&lt;br>Исправил ошибку присвоения элементам массива значаний похожих на вычисляемые, например '-', выскакивал эксепшен.
+
<br>Исправил ошибку присвоения элементам массива значаний похожих на вычисляемые, например '-', выскакивал эксепшен.
&lt;br>Поправил неправильную запись массивов. игнорировалось указанное количество столбцов.  
+
<br>Поправил неправильную запись массивов. игнорировалось указанное количество столбцов.  
  
 
'''2.20'''
 
'''2.20'''
&lt;br>Добавил задание размера массива. если массив не существовал, то он создается. если необязательные параметры отсутствуют, то принимаются равными нулю. 'set size (%arr &lt;x> &lt;y>)'.
+
<br>Добавил задание размера массива. если массив не существовал, то он создается. если необязательные параметры отсутствуют, то принимаются равными нулю. 'set size (%arr <x> <y>)'.
  
 
'''2.21'''
 
'''2.21'''
&lt;br>Научил условные операторы понимать элементы массива в качестве параметров. указание индексов массива элементами массива не поддерживается.
+
<br>Научил условные операторы понимать элементы массива в качестве параметров. указание индексов массива элементами массива не поддерживается.
&lt;br>Научил условные операторы принимать элеменнты массива в качестве параметров для определения цвета точки. Пример:
+
<br>Научил условные операторы принимать элеменнты массива в качестве параметров для определения цвета точки. Пример:
 
  set %a[1] 110 120 8030463
 
  set %a[1] 110 120 8030463
 
  set %a[2] 110 120
 
  set %a[2] 110 120
Строка 234: Строка 234:
  
 
'''2.24.1'''
 
'''2.24.1'''
&lt;br>Добавил конструкции:  
+
<br>Добавил конструкции:  
 
  set %b [2] %a [2] // присваивание второму элементу массива B, всех элементов второй строки массива А (оно и раньше работало)
 
  set %b [2] %a [2] // присваивание второму элементу массива B, всех элементов второй строки массива А (оно и раньше работало)
 
  set %b %a [2] // создание одномерного массива В из второй строки массива А
 
  set %b %a [2] // создание одномерного массива В из второй строки массива А
Строка 240: Строка 240:
  
 
'''2.28'''
 
'''2.28'''
&lt;br>Добавил возможность передавать в подпрограммы массивы. следите за соответствием типов переменных
+
<br>Добавил возможность передавать в подпрограммы массивы. следите за соответствием типов переменных
 
передаем массив по ссылке. т.е. изменение его в процедуре может привести к изменению в родительском скрипте.
 
передаем массив по ссылке. т.е. изменение его в процедуре может привести к изменению в родительском скрипте.
 
но если в процедуре изменится его размерность, то теоретически после этого изменения произойдет передача по значению (копирование).
 
но если в процедуре изменится его размерность, то теоретически после этого изменения произойдет передача по значению (копирование).
Строка 256: Строка 256:
  
 
'''2.30'''
 
'''2.30'''
&lt;br>Если в качестве приемника в команде 'findwindow' указан массив, то записываем в него хендлы и имена ВСЕХ окон, в заголовке которых содержится указанная строка, или процессов, полностью совпадающих с указанным. Регистрозависимо.
+
<br>Если в качестве приемника в команде 'findwindow' указан массив, то записываем в него хендлы и имена ВСЕХ окон, в заголовке которых содержится указанная строка, или процессов, полностью совпадающих с указанным. Регистрозависимо.
 
  set %arr FindWindow (World of Warcraft)
 
  set %arr FindWindow (World of Warcraft)
Добавил команду присваивания нескольких элементов массива одной строкой 'init_arr &lt;массив> [(номер_строки [число_столбцов [начальный_столбец]])] &lt;набор_значений>'. разделителями слов считаются те же символы, что и в остальных командах. исходный массив не удаляется. отсутствующие параметры по-умолчанию принимаются равными '1'.
+
Добавил команду присваивания нескольких элементов массива одной строкой 'init_arr <массив> [(номер_строки [число_столбцов [начальный_столбец]])] <набор_значений>'. разделителями слов считаются те же символы, что и в остальных командах. исходный массив не удаляется. отсутствующие параметры по-умолчанию принимаются равными '1'.
 
  init_arr %a 11 32 43 46 // одномерный массив, 4 эл-та (элементы [1] [2] [3] [4])
 
  init_arr %a 11 32 43 46 // одномерный массив, 4 эл-та (элементы [1] [2] [3] [4])
 
  init_arr %a (2) 13 24 35 // во 2-ю строку пишем в 3 столбца, начиная с 1-го (элементы [2, 1] [2, 2] [2, 3])
 
  init_arr %a (2) 13 24 35 // во 2-ю строку пишем в 3 столбца, начиная с 1-го (элементы [2, 1] [2, 2] [2, 3])
Строка 267: Строка 267:
 
     noabs - если указано, то ищем подстроку, иначе абсолютное совпадение, кроме регистра
 
     noabs - если указано, то ищем подстроку, иначе абсолютное совпадение, кроме регистра
 
     case  - если указано, то при сравнении учитывается регистр символов
 
     case  - если указано, то при сравнении учитывается регистр символов
     count - максимальное число найденых элементов. если > 0, то ищем в направлении "с начала", если &lt; 0, то ищем в направлении "с конца". если не указан, то ищем "все". этот параметр имеет приоритет в порядке распознавания, над начальной и конечной позицией поиска.
+
     count - максимальное число найденых элементов. если > 0, то ищем в направлении "с начала", если < 0, то ищем в направлении "с конца". если не указан, то ищем "все". этот параметр имеет приоритет в порядке распознавания, над начальной и конечной позицией поиска.
 
ищет по столбцам. возвращает адреса найденных элементов в формате 'строка|столбец/'. пример: '3|7/3|8/4|7/4|8/'. его хорошо понимает команда 'set' для присваивания элементов массива пачкой. если ничего не найдено, то вернет пустую строку.
 
ищет по столбцам. возвращает адреса найденных элементов в формате 'строка|столбец/'. пример: '3|7/3|8/4|7/4|8/'. его хорошо понимает команда 'set' для присваивания элементов массива пачкой. если ничего не найдено, то вернет пустую строку.
 
если в качестве приемника указана целая переменная ('set #e indexOf...'), то возвращаем номер только одной строки. причем 'count' указывает какое по порядку вхождение нужно искать. если элемент с указанным номером не найден, то результат -1.
 
если в качестве приемника указана целая переменная ('set #e indexOf...'), то возвращаем номер только одной строки. причем 'count' указывает какое по порядку вхождение нужно искать. если элемент с указанным номером не найден, то результат -1.
Строка 278: Строка 278:
  
 
'''2.31'''
 
'''2.31'''
&lt;br>Починил возврат массивов из процедур, при изменении в процедуре последней колонки или строки массива.
+
<br>Починил возврат массивов из процедур, при изменении в процедуре последней колонки или строки массива.
  
 
'''2.32'''
 
'''2.32'''
&lt;br>Добавил в 'findimage' возврат конечных координат найденной картинки в третьем и четвертом элементе возвращаемого массива.
+
<br>Добавил в 'findimage' возврат конечных координат найденной картинки в третьем и четвертом элементе возвращаемого массива.
&lt;br>Добавил проверку на круглость скобок в команде 'init_arr'. Сообщение выводим, но выполнение не прерываем.
+
<br>Добавил проверку на круглость скобок в команде 'init_arr'. Сообщение выводим, но выполнение не прерываем.
&lt;br>Исправил обязательное наличие пробела перед скобками в команде 'init_arr'.
+
<br>Исправил обязательное наличие пробела перед скобками в команде 'init_arr'.
&lt;br>Добавил функции разложения цвета:
+
<br>Добавил функции разложения цвета:
 
  colorToRed  (color) - возвращает значение красного канала указанного цвета
 
  colorToRed  (color) - возвращает значение красного канала указанного цвета
 
  colorToGreen (color) - возвращает значение зеленого канала
 
  colorToGreen (color) - возвращает значение зеленого канала
Строка 294: Строка 294:
 
  minx (%arr) - возвращает минимальные значения всех столбцов массива в формате '1|2|3' (для присваивания массива пачкой), т.е. в первую строку нового массива.
 
  minx (%arr) - возвращает минимальные значения всех столбцов массива в формате '1|2|3' (для присваивания массива пачкой), т.е. в первую строку нового массива.
 
То же самое про 'maxx', только наоборот.
 
То же самое про 'maxx', только наоборот.
&lt;br>Добавил вывод в скобках значения элемента массива после его имени, для команды 'set logging commands'.
+
<br>Добавил вывод в скобках значения элемента массива после его имени, для команды 'set logging commands'.
  
 
'''2.31'''
 
'''2.31'''
&lt;br>Научил 'findimage' понимать координаты, указанные элементами массива.
+
<br>Научил 'findimage' понимать координаты, указанные элементами массива.
  
 
'''2.33'''
 
'''2.33'''
&lt;br>Исправил поиск элемента во всем массиве в функциях 'minx' и 'maxx'.
+
<br>Исправил поиск элемента во всем массиве в функциях 'minx' и 'maxx'.
  
 
'''2.36'''
 
'''2.36'''
&lt;br>Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'.
+
<br>Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'.
&lt;br>Добавил функцию, возвращающую адрес массива в памяти, и его размерность "set $s arrayaddress (%a) // $s = 12341578 1 1". Структура массива:  
+
<br>Добавил функцию, возвращающую адрес массива в памяти, и его размерность "set $s arrayaddress (%a) // $s = 12341578 1 1". Структура массива:  
 
  aDescr: shortstring ;
 
  aDescr: shortstring ;
 
  aValue: array of array of string;
 
  aValue: array of array of string;
  
 
'''2.37'''
 
'''2.37'''
&lt;br>Добавил возможность сортировки массивов 'sort_array %array [+col | -row] [dec]'. Положительное число задает сортировку по столбцам, отрицательное - по строкам.
+
<br>Добавил возможность сортировки массивов 'sort_array %array [+col | -row] [dec]'. Положительное число задает сортировку по столбцам, отрицательное - по строкам.
  
 
'''2.39'''
 
'''2.39'''
&lt;br>Добавил присваивание строке массива строки вида '3|7/3|8/4|7/4|8/'.
+
<br>Добавил присваивание строке массива строки вида '3|7/3|8/4|7/4|8/'.
  
 
[[Категория:Массивы]]
 
[[Категория:Массивы]]

Текущая версия на 11:34, 28 августа 2019

Описание

Самый простой способ понять массивы - это рассматривать их как набор одноименных переменных с номером. Что-то вроде:

#значение1
#значение2
#значение3
#значение4
#значение5

Тот же самый набор некоторых значений. Разница лишь в записи. А это в виде массива:

%arr [ 1 ]
%arr [ 2 ]
%arr [ 3 ]
%arr [ 4 ]
%arr [ 5 ]

Весь смысл в том, что эти цифры в массивах можно задать переменной. Вот тебе и все массивы. Т.е.:

set #a 1
set #b 2
set #c 3
set #d 4
set #e 5
%arr [ #a ]
%arr [ #b ]
%arr [ #c ]
%arr [ #d ]
%arr [ #e ]

В итоге опять имеем тот же набор некоторых значений, все с теми же индексами от 1 до 5. Для нас это все те же 5 значений, как и в 1 записи, только номера этих переменных мы задали уже переменными.

set #i 1
%arr [ #i ]
set #i #i + 1 // получилось i = 2
%arr [ #i ]
set #i #i + 1 // получилось i = 3
%arr [ #i ]
set #i #i + 1 // получилось i = 4
%arr [ #i ]
set #i #i + 1 // получилось i = 5
%arr [ #i ]

В этой записи мы создаем переменную #i равной 1, затем используем ее при обращении к массиву. После каждого обращения к массиву мы увеличиваем значение переменной на 1 (set #i #i + 1). Таким образом, не смотря на то, что мы постоянно обращаемся к %arr [ #i ], каждый раз обращение происходит к следующему элементу, т.к. #i у нас увеличивается на 1.
Чтобы не писать такие однотипные строки, можно использовать оператор for. Весь смысл этого оператора- выполнять код циклами, увеличивая(или уменьшая) указанную переменную-счётчик.

for #i 1 5 1


#i - изменяемая переменная ("счётчик")
1 (первая в записи) - начальное значение
5 - конечное значение (при его превышении цикл прервется)
1 (вторая в записи) - число которое будет каждый раз прибавляться.

Проще говоря запись означает, создать переменную #i равной 1 и прибавлять 1, пока #i не станет больше 5. В нашем примере это выглядело бы так:

for #i 1 5 1
   %arr [ #i ]
end_for

Мы обратились пять раз к массиву, это были элементы:

%arr [ 1 ]
%arr [ 2 ]
%arr [ 3 ]
%arr [ 4 ]
%arr [ 5 ]


Собственно если понять смысл данного поста, то 90% возможностей массивов вы сможете использовать.

Если не всё понятно, то ещё небольшое описание. По сути, массив - это таблица, в которой каждая ячейка имеет номер по горизонтали и вертикали, и в ней находятся какие-то данные. Допустим имеется массив 3*2 (3 строки и 2 столбца), с именем %arr:

// Это массив:
set %arr [1 1] 100      // индексы [1 1] означают: первая строка, первый столбец
set %arr [1 2] 200      // [1 2] - первая строка, второй столбец
set %arr [2 1] 300      // вторая строка, первый столбец
set %arr [2 2] 400
set %arr [3 1] 500
set %arr [3 2] 600      // третья строка, второй столбец

// можно сохранить его, чтобы посмотреть как хранятся данные
save_array %arr C:\SaveArray.txt
End_script

Если открыть файл 'SaveArray.txt', то увидим:
100 200
300 400
500 600
Чтобы обратиться к какому-то элементу массива нужно указать индексы (номер строки и столбца):

set %arr [1 1] 100
set %arr [1 2] 200
set %arr [2 1] 300
set %arr [2 2] 400
set %arr [3 1] 500
set %arr [3 2] 600

msg Первая строка, первый столбец:    %arr [1 1]
msg Вторая строка, первый столбец:    %arr [2 1] 
msg Третья строка, второй столбец:    %arr [3 2]
 
msg Индексы можно задавать переменными.
set #a 2
msg Переменная "#a" равна #a
msg Первая строка, второй столбец:   %arr [1 #a] 
End_script

В основном массивы используют в циклах For.

set %arr [1 1] 100
set %arr [2 1] 200
set %arr [3 1] 300
set #size size(%arr)   // присвоить переменной '#size' размер массива (количество строк), в данном случае будет присвоено 3. 

for #i 1 #size 1       // цикл, в котором переменная '#i' будет увеличиваться на единицу от 1 до 3
    log Переменная "#i" равна #i             
    log Содержимое элемента массива:   %arr [#i 1]    
end_for
End_script

Массив может быть одномерным, в нём только один столбец, т. е. указывается только номер строки.
И может быть двумерным, тогда нужно указывать номер строки и столбца.

Синтаксис

Привязка к окну: Нет.
Работа со свернутым окном: Да.

set <массив> [номер_строки] <значение>

Одномерный массив, где:
<массив> - имя массива, может состоять из букв и цифр. Начинаться должно с '%'
[номер_строки] - номер строки массива.
<значение> - значение элемента массива.

set <массив> [номер_строки номер_столбца] <значение>

Двумерный массив, где:
<массив> - имя массива, может состоять из букв и цифр. Начинаться должно с '%'
[номер_строки номер_столбца] - номер строки и столбца массива.
<значение> - значение элемента массива.

Примеры

// Пример 1
set %arr [1] 200 
set %arr [2] 300
move %arr [1] %arr [2]          // переместит курсор в координаты 200 300
End_script
// Пример 2
set %a [1] Вася  
set %a [2] Петя
set %a [3] Маша
set %a [4] Андрей
set %a [5] Катя
set #size size(%a)                   // размер массива (сколько в нём строк, в данном случае их 5)
for #i 1 #size 1                     // цикл, в котором переменная '#i' будет увеличиваться на единицу от 1 до 5
    log Переменная "#i" равна #i     // вывод в лог переменной '#i'
    log %a [#i]                      // вывод в лог значений массива, переменная '#i' указывает к какому элементу обращаться      
end_for
End_script 
// Пример 3
set %array [1 1] 111
set %array [1 2] 222
set %array [2 1] 333
set %array [2 2] 444
set %array [3 1] 555
set %array [3 2] 666
save_array %array C:\qwer4321.txt      // сохранит массив на диске 'C:\' в файле 'qwer4321.txt'
                                       // можно посмотреть как хранятся данные в массиве
for #i 1 size(%array) 1                 
    move %array [#i 1] %array [#i 2]   // переместит курсор по координатам из массива
    log %array [#i 1] %array [#i 2]    // вывод в лог  координат
    wait 1000                          // ждать 1 секунду (1 секунда = 1000 мсек.)
end_for
End_script
// Пример 4
// Вывод в сообщение случайного элемента массива
init_arr %array a b c d e f g h i j k
set #a 1 + random(size(%array))            // получить псевдослучайное число от 1 до 11 (количество строк массива)
msg %array [#a]                            // вывод в сообщение


Смотрите также

Init arr
Indexof
Load array
Save array
Sort array
Delete array

История развития

1.07 beta 5
Добавил массивы. отныне символ процента '%' считается идентификатором массива. индексы массива указываются после имени в квадратных скобках '[' и ']'. размер массива равен максимальному использованному индексу. присваивание значений осуществляется каждому элементу индивидуально. элементы массива могут содержать как строки, так и числа. допустимо ссылаться на массивы параллельных скриптов, указав после имени массива, через точку, номер скрипта. при указании только первого индекса в двумерном массиве, результатом будет строка из всех элементов второй размерности массива, соответствующих указанному индексу, и разделенных пробелом

set %ar [4] тест // одномерный массив на 4 элемента
set %arr [50 1] 544 
set %arr [50 2] 800 // двумерный массив на 50 раз по 2 элемента
set %ar.2 [5] // одномерный массив в параллельном скрипте
left %arr [50] // клик левой кнопкой по координатам 544 800

1.07 beta 7
Исправил ошибку присваивания элементам массива значений переменных.

2.02
Исправил ошибку с присваиванием значений всегда только последнему элементу массивов, независимо от указанного.
Исправил ошибку с присваиванием значений массивам скрипта с номером 0, из других скриптов.

2.05
Добавил переменную delimiter, используется для разделения элементов массива:

set %a [1 1] 1
set %a [1 2] 2
set delimiter '+'
msg %a [1]
set #n %a [1]
msg #n
set delimiter
set #n %a [1]
msg #n

2.17
Добавил функцию 'size', возвращает длину указанного параметра пример:

set %q [4 3] test string here
set %q [7 5] 0
set $q 123 + 8645
set #q 12
msg size (%q [ 4 3 ] ) // 16 - длина элемента массива
msg size (%q [ 4 ] ) // 5 - вторая размерность массива
msg size (%q ) // 7 - первая размерность массива
msg size ($q) // 10 - длина строки
msg size (#q) // 2 - количество разрядов
msg size ( another test string ) // 19 - длина строки

2.19
Исправил эксепшен при попытке записи пустого массива.
Массивы загружаются оттуда же, откуда и скрипты, если не указано иное.
Исправил ошибку с зарузкой массива (в результате чего оно дописывалось в конец существующего массива и он увеличивался с каждой загрузкой).
Исправил ошибку присвоения элементам массива значаний похожих на вычисляемые, например '-', выскакивал эксепшен.
Поправил неправильную запись массивов. игнорировалось указанное количество столбцов.

2.20
Добавил задание размера массива. если массив не существовал, то он создается. если необязательные параметры отсутствуют, то принимаются равными нулю. 'set size (%arr <x> <y>)'.

2.21
Научил условные операторы понимать элементы массива в качестве параметров. указание индексов массива элементами массива не поддерживается.
Научил условные операторы принимать элеменнты массива в качестве параметров для определения цвета точки. Пример:

set %a[1] 110 120 8030463
set %a[2] 110 120
set %a[5 1] 110,
set %a[5 2] 120,
set %a[5 3] 8030463
if (%a[1]) and (%a[2] 8030463) and %a[5]

2.24.1
Добавил конструкции:

set %b [2] %a [2] // присваивание второму элементу массива B, всех элементов второй строки массива А (оно и раньше работало)
set %b %a [2] // создание одномерного массива В из второй строки массива А
set %b %a // создание массива В из массива А (копирование)

2.28
Добавил возможность передавать в подпрограммы массивы. следите за соответствием типов переменных передаем массив по ссылке. т.е. изменение его в процедуре может привести к изменению в родительском скрипте. но если в процедуре изменится его размерность, то теоретически после этого изменения произойдет передача по значению (копирование).

set %var [1 1] abc
set %var [1 2] 123
set #e 1
set delimiter '_'
call test2 %var [1 2]  %var [#e]  %var  %var.5 
end_script
proc test2 #v1  $v2  %v3  %v4
    set delimiter '^'
    set logging Dump:  #v1  $v2  %v3 [1]  %v4 [1]
  // Dump:  123  abc_123  abc^123  abc^123
end_proc

2.30
Если в качестве приемника в команде 'findwindow' указан массив, то записываем в него хендлы и имена ВСЕХ окон, в заголовке которых содержится указанная строка, или процессов, полностью совпадающих с указанным. Регистрозависимо.

set %arr FindWindow (World of Warcraft)

Добавил команду присваивания нескольких элементов массива одной строкой 'init_arr <массив> [(номер_строки [число_столбцов [начальный_столбец]])] <набор_значений>'. разделителями слов считаются те же символы, что и в остальных командах. исходный массив не удаляется. отсутствующие параметры по-умолчанию принимаются равными '1'.

init_arr %a 11 32 43 46 // одномерный массив, 4 эл-та (элементы [1] [2] [3] [4])
init_arr %a (2) 13 24 35 // во 2-ю строку пишем в 3 столбца, начиная с 1-го (элементы [2, 1] [2, 2] [2, 3])
init_arr %a (3, 2) 5 6 7 8 // в 3-ю строку пишем в 2 столбца, начиная с 1-го (получится 2 строки, элементы [3, 1] [3, 2] [4, 1] [4, 2])
init_arr %a (3, 2, 7) 5 6 7 8 // в 3-ю строку пишем в 2 столбца, начиная с 7-го (получится 2 строки, элементы [3, 7] [3, 8] [4, 7] [4, 8]

Добавил поиск строки в массиве. по-умолчанию ищет точное совпадение, регистронезависимо. 'set %result indexOf ( %arr [noabs] [case] [[startRow [EndRow]] count] (text) )'.

параметры:
    noabs - если указано, то ищем подстроку, иначе абсолютное совпадение, кроме регистра
    case  - если указано, то при сравнении учитывается регистр символов
    count - максимальное число найденых элементов. если > 0, то ищем в направлении "с начала", если < 0, то ищем в направлении "с конца". если не указан, то ищем "все". этот параметр имеет приоритет в порядке распознавания, над начальной и конечной позицией поиска.

ищет по столбцам. возвращает адреса найденных элементов в формате 'строка|столбец/'. пример: '3|7/3|8/4|7/4|8/'. его хорошо понимает команда 'set' для присваивания элементов массива пачкой. если ничего не найдено, то вернет пустую строку. если в качестве приемника указана целая переменная ('set #e indexOf...'), то возвращаем номер только одной строки. причем 'count' указывает какое по порядку вхождение нужно искать. если элемент с указанным номером не найден, то результат -1.

примеры: 
   set #a indexOf ( %arr case -1 (Test) ) // ищет номер последнего элемента массива %arr, имеюшего значение в точности равное Test (с учетом регистра)
   set #b indexOf ( %arr (12) ) // ищет номер первого элемента массива %arr, имеюшего значение в точности равное 12
   set #c indexOf ( %arr noabs 3 (admin) ) // ищет номер третьего элемента массива %arr, содержащего подстроку 'admin'
   set %r indexOf ( %arr case 5 15  2 (Passed) ) // просматривает элементы массива %arr с пятой строки по пятнадцатую, и возвращает в массив %r адреса ячеек, содержащих первые два точных совпадения с искомой строкой
   set %r indexOf ( %a (14) ) // возвращает в массив %r адреса всех ячеек, сорвпадающих с указанной строкой

2.31
Починил возврат массивов из процедур, при изменении в процедуре последней колонки или строки массива.

2.32
Добавил в 'findimage' возврат конечных координат найденной картинки в третьем и четвертом элементе возвращаемого массива.
Добавил проверку на круглость скобок в команде 'init_arr'. Сообщение выводим, но выполнение не прерываем.
Исправил обязательное наличие пробела перед скобками в команде 'init_arr'.
Добавил функции разложения цвета:

colorToRed   (color) - возвращает значение красного канала указанного цвета
colorToGreen (color) - возвращает значение зеленого канала
colorToBlue  (color) - возвращает значение синего канала
colorToRGB   (color %arr) - разлаживает цвет на составляющие в первую строку указанного массива
colorToRGB   (color %arr[x]) - то-же, но в конкретную строку // %arr [ 1 1 ] R, %arr [ 1 2 ] G, %arr [ 1 3 ] B

Научил функцию 'minx' и 'maxx' искать минимум и соответственно максимум в массиве.

minx (%arr [1]) - возвращает минимальное значение конкретной строки массива
minx (%arr) - возвращает минимальные значения всех столбцов массива в формате '1|2|3' (для присваивания массива пачкой), т.е. в первую строку нового массива.

То же самое про 'maxx', только наоборот.
Добавил вывод в скобках значения элемента массива после его имени, для команды 'set logging commands'.

2.31
Научил 'findimage' понимать координаты, указанные элементами массива.

2.33
Исправил поиск элемента во всем массиве в функциях 'minx' и 'maxx'.

2.36
Добавил возврат найденного цвета в третьем элементе массива в команде 'findcolor'.
Добавил функцию, возвращающую адрес массива в памяти, и его размерность "set $s arrayaddress (%a) // $s = 12341578 1 1". Структура массива:

aDescr: shortstring ;
aValue: array of array of string;

2.37
Добавил возможность сортировки массивов 'sort_array %array [+col | -row] [dec]'. Положительное число задает сортировку по столбцам, отрицательное - по строкам.

2.39
Добавил присваивание строке массива строки вида '3|7/3|8/4|7/4|8/'.