-
Notifications
You must be signed in to change notification settings - Fork 0
/
99_em.arr.fill.qsps
44 lines (37 loc) · 2.94 KB
/
99_em.arr.fill.qsps
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
QSP-Game Упрощённое заполнение массива
$args[0]- название массива, элементы которого необходимо заполнить
$args[1] - кортеж значений для заполнения массива
args[2] - с какого элемента начинать заполнение. По умолчанию с 0
$args[3] - режим:
* Не указано - в массив передаются как текстовые так и числовые значения,
* [only number] или [num] - весь массив формируется, как числовой
* [only string] или [str] - весь массив формируется, как строковый
!@pp:if(em_arr_fill):include
# em.arr.fill
$args[1] = $args[1]+""
$args[3] = $lcase($args[3])
if $args[3]='[only string]': $args[3] = '[str]'
if $args[3]='[only number]': $args[3] = '[num]'
if instr($args[0],'$')=1: $args[0]=$mid($args[0],2) & !@ убираем из имени массива символ $
loop while len($args[1])>0:
!@ циклом перебираем строку значений (кортеж)
$args['instring'] = instr($args[1],"")
$args['cut'] = $mid($args[1], 1, $args['instring'] - 1)
$args[1]=$mid($args[1], $args['instring'] + 1)
if (isnum($args['cut']) and $args[3]='') or $args[3]='[num]':
dynamic "<<$args[0]>>[<<args[2]>>]=args[0]", val($args['cut'])
elseif (no isnum($args['cut']) and $args[3]='') or $args[3] = '[str]':
dynamic "$<<$args[0]>>[<<args[2]>>] = $args[0]", $args['cut']
end
args[2] += 1
end
--- em.arr.fill ---------------------------------
!@pp:endif
Функция не использует иных функций библиотеки
Внимание!!! Функция не создаёт новый массив, а заполняет массив значениями!
Для теста:
@em.arr.fill('mass',(123,234,345))
loop local i=0 while i<arrsize('mass') step i+=1:
*pl mass[i]
end
Примечание: чтобы понимать, каким образом мы вытаскиваем данные из кортежа, нужно понимать, в каком виде в QSP представлен кортеж. Кортеж — это строка значений. Фактически это обычная строка, в которой все значения разделяются символом "``". Этот символ имеет код 0x1f. Именно эту особенность хранения данных мы и используем, чтобы извлечь значения из кортежа. Мы определяем, в какой позиции находится разделяющий символ, затем вырезаем строку до этого символа и помещаем в новую ячейку массива. Дальше работаем уже с оставшейся строкой.