function 'CUT'
Функция Asterisk: разрезать строку по заданными разделителям.
Описание
Вырезать информацию из строки (переменной), ориентируясь на разделители.
Синтаксис
CUT(varname,char-delim,range-spec)
Аргументы
- varname - переменная для операции.
- char-delim - Разделитель, по умолчанию '-'.
- range-spec - Номер поля, который вам нужен со смещением начиная с 1-го, также возможно задавать диапазон полей через '-' и группировать при помощи амперса́нда - '&'.
Пример
Предположим, имеется таблица БД - devices, с данными SIPустройств.
+------+-------+------------+------------+------+-------------+---------------+ | id | tech | dial | devicetype | user | description | emergency_cid | +------+-------+------------+------------+------+-------------+---------------+ | 4889 | pjsip | PJSIP/4889 | fixed | 4889 | sip 4889 | | | 4887 | sip | SIP/4887 | fixed | 4887 | sip 4887 | | | 4886 | sip | SIP/4886 | fixed | 4886 | sip 4886 | | +------+-------+------------+------------+------+-------------+---------------+
exten => _4XXX,1,verbose(${REALTIME(devices,user,${EXTEN},:,:)})
Функция REALTIME()возвращает на строку содержащую user:4889 c двоеточием в качестве разделителя:
Verbose("id:4889:tech:pjsip:dial:PJSIP/4889:devicetype:fixed:user:4889:description:sip 4889:")Требуется получить технологию из поля под порядковым номером 6, в данном случае PJSIP/4889.
используем для этого функцию CUT():
exten => _4XXX,1,verbose(${CUT(REALTIME(devices,user,${EXTEN},:,:),:,6)})
и получим требуемое значение:
Verbose("PJSIP/4889")
Поля 4,5 и 6:
exten => _4XXX,1,verbose(${CUT(REALTIME(devices,user,${EXTEN},:,:),:,4-6)})
Verbose("pjsip:dial:PJSIP/4889")
Поля 6 и 8:
exten => _4XXX,1,verbose(${CUT(REALTIME(devices,user,${EXTEN},:,:),:,6&8)})
Verbose("PJSIP/4889:fixed")