Вход
Приветствую Вас Гость
 

easy.database.qsp v. 0.2

Библиотека организации базы данных для Quest Soft Player

Функции модуля

Вспомогательные функции

edb.key.next_hex

Вспомогательная функция для генерации следующего порядкового номера в виде шестнадцатеричного ключа.

Аргументы (обязательные):

  • $args[0] - последний сгенерированный ключ.
  • args[1] - необходимая длина ключа.

Возвращает шестнадцатеричный ключ следующий за указанным по порядку, либо, если длина сгенерированного ключа превышает необходимую, возвращает нулевой ключ. Длина ключа всегда соответствует необходимой длине.

Примеры:

@edb.key.next_hex('0', 8) & ! '00000001'
@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('0', 8) & ! '00000001'
@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] - заменяется только первое вхождение указанного значения.

Возвращает видоизменённый список.

Примеры:

@edb.list.remove('AAA|BBB|CCC|AAA|BBB|DDD|EEE', 'AAA')
! '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', 'AAA') & ! 1
@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('id|body|count|place|include') & ! 'id'
@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('id|body|count|place|include') & ! 'include'
@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') & ! 'id'
@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|BBB|CCC') & ! 'AAA|BBB|DDD|EEE'
@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] - разделитель. Если не указано: вертикальная черта |.

Пример:

@edb.list.length('AAA|BBB|CCC|AAA|BBB|DDD|EEE') & ! 7
Наверх