Crmgo Блог

Asterisk, работа со строковыми и математическими операциями

Asterisk, работа со строковыми и математическими операциями

Функции для работы со строками Размер строки ${LEN(foo)} возвращает размер строки foo . Например, exten => 100,1,Set(Fruit=pear) exten => 100,2,NoOp(${LEN(Fruit)}) exten => 100,3,NoOp(${LEN(${Fruit})}) первая команда NoOp должна показать значение 5 (размер строки "fruit"). Вторая команда NoOp должна показать значение 4…

Asterisk, работа со строковыми и математическими операциями

Функции для работы со строками

Размер строки

${LEN(foo)}

возвращает размер строки foo. Например,

exten => 100,1,Set(Fruit=pear)
exten => 100,2,NoOp(${LEN(Fruit)})
exten => 100,3,NoOp(${LEN(${Fruit})})

первая команда NoOp должна показать значение 5 (размер строки "fruit"). Вторая команда NoOp должна показать значение 4 (размер строки "pear").

Этот метод позволяет производить прекрасную проверку на пустые строки и на переменные содержащие NULL.

Подстроки

${foo:offset:length}

возвращает подстроку строки foo, начиная со смещения offset и ограничивая возвращаемую строку размером в length символов.

  • Если значение offset отрицательное, то смещение будет отсчитываться не от начала строки, а от ее конца.
  • Если значение length пропущено или отрицательное, то размер возвращаемой строки не ограничивается и будет возвращена вся строка, начиная со смещения offset.

Примеры:

${123456789:1} - возвращает строку 23456789
${123456789:-4} - возвращает строку 6789
${123456789:0:3} - возвращает строку 123
${123456789:2:3} - возвращает строку 345
${123456789:-4:3} - возвращает строку 678

Пример использования:

exten => _NXX.,1,Set(areacode=${EXTEN:0:3}) - получаем первые 3 цифры из переменной ${EXTEN}
exten => _516XXXXXXX,1,Dial(${EXTEN:3}) - получаем значение переменной ${EXTEN} после 3 цифры
exten => 100,1,Set(whichVowel=4)
exten => 100,2,Set(foo=AEIOU:${whichVowel}:1) - переменная ${foo} будет иметь значение 'U'

Соединение строк

Для соединения двух строк, просто напишите директиву, как показано ниже:

${foo}${bar}
555${theNumber}
${longDistancePrefix}555${theNumber}

Математические операции с переменными

Для математических действий с переменными, например, инкремент, умножение, сложение. Просто напишите:

exten => s,1,Set(SOMEVAR=$[${SOMEVAR} + 1]) ; инкремент
exten => s,2,Set(SOMEVAR=$[2 * ${SOMEVAR}]) ; умножение и т.д.
Вы должны использовать пробелы в выражениях, как показано выше.

Начиная с релиза Asterisks 1.2, так же доступна функция MATH...

exten => s,1,Set(SOMEVAR=${MATH(${SOMEVAR}+1)}) ; инкремент
exten => s,2,Set(SOMEVAR=${MATH(2*${SOMEVAR})}) ; умножение и т.д.

Замечания по различным версиям

  • Переменная CALLINGPRES добавлена в CVS HEAD 2004-09-10, включена в релиз Asterisk 1.2
  • Переменная TOUCH_MONITOR добавлена в CVS HEAD 2005-01-05, включена в релиз Asterisk 1.2

Примечание: материал мог быть создан с помощью ИИ и затем отредактирован человеком. Ответственный: Dmytro Lomaka, Kaltenkirchen.