easy.database.qsp v. 0.2
Библиотека организации базы данных для Quest Soft Player
Функции модуля
Вспомогательные функции
edb.key.next_hex
Вспомогательная функция для генерации следующего порядкового номера в виде шестнадцатеричного ключа.
Аргументы (обязательные):
-
$args[0]
- последний сгенерированный ключ. -
args[1]
- необходимая длина ключа.
Возвращает шестнадцатеричный ключ следующий за указанным по порядку, либо, если длина сгенерированного ключа превышает необходимую, возвращает нулевой ключ. Длина ключа всегда соответствует необходимой длине.
Примеры:
@edb.key.next_hex('00055', 8) & ! '00000056'
@edb.key.next_hex('0ff', 8) & !'00000100'
@edb.key.next_hex('ffffffff', 8) & ! '00000000'
@edb.key.next_hex('fffffffd', 8) & ! 'fffffffe'
edb.key.next_num
Вспомогательная функция для генерации следующего порядкового номера в виде десятеричного ключа.
Аргументы (обязательные):
-
$args[0]
- последний сгенерированный ключ. -
args[1]
- необходимая длина ключа.
Возвращает десятеричный ключ следующий за указанным по порядку, либо, если длина сгенерированного ключа превышает необходимую, возвращает нулевой ключ. Длина ключа всегда соответствует необходимой длине.
Примеры:
@edb.key.next_num('00055', 8) & ! '00000056'
@edb.key.next_num('0ff', 8) & ! '00000001'
@edb.key.next_num('ffffffff', 8) & ! '00000001'
@edb.key.next_num('99999999', 8) & ! '00000000'
@edb.key.next_num('99999994', 8) & ! '99999995'
edb.list.remove
Заменяет в списке первое вхождение, или все вхождения, указанного значения на новое значение, если указанное значение присутствует в списке.
Аргументы:
-
$args[0]
- Список видаaaaa|bbbb|....|zzzzz
. Обязательный аргумент. -
$args[1]
- старое значение. -
$args[2]
- новое начение. Если не указано, элемент удаляется из списка. -
$args[3]
- разделитель. Если не указано: вертикальная черта|
. -
$args[4]
- управление:-
[nclr]
или[no clear]
- пустые значения между разделителями не удаляются. -
[of]
или[only first]
- заменяется только первое вхождение указанного значения.
-
Возвращает видоизменённый список.
Примеры:
! 'BBB|CCC|BBB|DDD|EEE'
@edb.list.remove('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'AAA', 'aaa')
! 'aaa|BBB|CCC|aaa|BBB|DDD|EEE'
@edb.list.remove('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'AAA', '', '|', '[no clear]')
! '|BBB|CCC||BBB|DDD|EEE'
@edb.list.remove('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'AAA', '', '|', '[only first]')
! 'BBB|CCC|AAA|BBB|DDD|EEE'
edb.list.is_el
Проверяет наличие указанного элемента в списке.
Аргументы:
-
$args[0]
- Список видаaaaa|bbbb|....|zzzzz
. Обязательный аргумент. -
$args[1]
- элемент, искомое значение. Обязательный аргумент. -
$args[2]
- разделитель. Если не указано: вертикальная черта|
.
Возвращает единицу, если элемент в списке присутствует. Если элемента в списке нет, возвращает 0.
Примеры:
@edb.list.is_el('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'BBB') & ! 1
@edb.list.is_el('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'FFF') & ! 0
@edb.list.is_el('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'EEE') & ! 1
edb.list.first
Извлекает из списка первый элемент. Преимущество перед
em.str.getWord
в том, что функция не использует цикл.
-
$args[0]
- Список видаaaaa|bbbb|....|zzzzz
. Обязательный аргумент. -
$args[1]
- разделитель. Если не указано: вертикальная черта|
.
Возвращает значение элемента до первого разделителя. Если разделителя в списке нет, возвращает исходное значение.
@edb.list.first('body|count|place|include') & ! 'body'
@edb.list.first('count|place|include') & ! 'count'
@edb.list.first('place|include') & ! 'place'
@edb.list.first('include') & ! 'include'
edb.list.last
Извлекает из списка последний элемент. Преимущество перед
em.str.getWord
в том, что функция не использует цикл.
-
$args[0]
- Список видаaaaa|bbbb|....|zzzzz
. Обязательный аргумент. -
$args[1]
- разделитель. Если не указано: вертикальная черта|
.
Возвращает значение элемента после последнего разделителя. Если разделителя в списке нет, возвращает исходное значение.
@edb.list.last('body|count|place|include') & ! 'include'
@edb.list.last('count|place|include') & ! 'include'
@edb.list.last('place|include') & ! 'include'
@edb.list.last('include') & ! 'include'
edb.list.append
Добавляет новый элемент в конец списка.
-
$args[0]
- Список видаaaaa|bbbb|....|zzzzz
. Обязательный аргумент. -
$args[1]
- элемент, добавляемое значение. Обязательный аргумент. -
$args[2]
- разделитель. Если не указано: вертикальная черта|
.
Возвращает новый список с добавленным элементом, либо, если исходный список пуст, возвращает указанный элемент.
@edb.list.append('id', 'body') & ! 'id|body'
@edb.list.append('id|body', 'count') & ! 'id|body|count'
@edb.list.append('id|body|count', 'place') & ! 'id|body|count|place'
@edb.list.append('id|body|count|place', 'include') & ! 'id|body|count|place|include'
edb.list.diff
Функция получения разницы между двумя списками.
-
$args[0]
- уменьшаемый список видаaaaa|bbbb|....|zzzzz
. -
$args[1]
- вычитаемый список видаaaaa|bbbb|....|zzzzz
. -
$args[2]
- разделитель. Если не указано: вертикальная черта|
. -
$args[3]
- управление:-
[union]
или[un]
- в этом режиме из обоих списков исключаются совпадающие значения, а все оставшиеся возвращаются в виде нового списка.
-
Возвращает новый список.
Внимание!!! Удаляется только первое совпадение в списке. Ввиду того, что функция не используется в модуле, она не доработана. Вы можете самостоятельно написать похожую функцию, используя иные функции работы со списками.
Примеры:
@edb.list.diff('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'AAA|DDD|EEE') & ! 'BBB|CCC|AAA|BBB'
@edb.list.diff('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'JJJ|FFF|GGG') & ! 'AAA|BBB|CCC|AAA|BBB|DDD|EEE'
@edb.list.diff('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'AAA|FFF|GGG|EEE', '|', '[union]') & ! 'BBB|CCC|AAA|BBB|DDD|FFF|GGG'
edb.list.for_each
Функция перебора элементов списка с вызовом функции, переданной в виде текстового значения.
-
$args[0]
- список видаaaaa|bbbb|....|zzzzz
. -
$args[1]
- функция, применяющаяся к каждому элементу списка (условный колбэк). -
$args[2]
- разделитель. Если не указано: вертикальная черта|
. -
$args[3]
...$args[18]
- аргументы, транслируемые в функцию-колбэк.
Данная функция циклически перебирает все элементы списка, вызывая переданную в виде текстового значения функцию (условный колбэк) через
$dyneval
. При этом в
$dyneval
в нулевом аргументе передаётся значение - элемент списка, а во все остальные аргументы транслируются значения из аргументов с 3-его по 18-ый. Это позволяет использовать переданную в виде текстового значения функцию, как колбэк, и таким образом гибко обрабатывать элементы списка.
edb.list.for_each
может возвращать текстовое (только текстовое!) значение, получаемое путём склейки (конкатенация) полученных из колбэка значений. Если колбэк не возвращает никаких значений,
edb.list.for_each
так же ничего не вернёт.
Все аргументы, принимаемые колбэком, должны передаваться в текстовом виде, поэтому если вам нужно передать в колбэк число, сначала преобразуйте его в строковое значение. В колбэке строку снова можно преобразовать в число.
В колбэк всегда предаётся 16 аргументов от
$args[0]
до
$args[15]
, учитывайте это при оформлении колбэка. Соответствие аргументов, переданных в
edb.list.for_each
, аргументам в колбэке:
-
$args[0]
- значение, элемент списка, -
$args[1] = $args[3]
-
$args[2] = $args[4]
-
$args[3] = $args[5]
-
$args[4] = $args[6]
- и т.д.
Примеры:
$list_ = 'AAA|BBB|CCC|AAA|BBB|DDD|EEE'
! склейка значений списка, с исключением 'AAA':
$callback_ = { $result = iif($args[0] = 'AAA', '', $args[0]) }
*pl @edb.list.for_each($list_, $callback_)
! 'BBBCCCBBBDDDEEE'
! подсчёт числа элементов списка
$callback_ = { $result = '0' }
*pl len(@edb.list.for_each($list_, $callback_))
! 7
! реверс элементов списка
local $reverse_ = ''
$callback_ = { $reverse_ = '|' + $args[0] + $reverse_ }
@edb.list.for_each($list_, $callback_)
*pl $mid($reverse_, 2)
! 'EEE|DDD|BBB|AAA|CCC|BBB|AAA'
edb.list.length
Возвращает число элементов в списке. Использует цикл.
Аргументы:
-
$args[0]
- список видаaaaa|bbbb|....|zzzzz
. -
$args[1]
- разделитель. Если не указано: вертикальная черта|
.
Пример: