Функция CUT()


Назначение:

Обработка строки, на основе символов разделителей.

Описание:

CUT(varname,delimiter,fieldspec)

  • varname: переменная, которую Вы хотите разделить.
  • delimiter: Разделитель, по умолчанию, символ '-'.
  • fieldspec: Количество, необходимых Вам, полей (начиная с единицы), значение также может быть определено как интервал (с помощью символа '-') или как группа интервалов и полей (с помощью символа '&').

Замечания

  • В ветке 1.2, начиная с asterisk версии 1.2.8, параметры должны отделяться друг от друга символом "|", а не ","
  • Разделителем должен быть одиночный символ. Если задано несколько символов, то будет использоваться только первый из них.
  • Чтобы задать в качестве разделителя - запятую, экранируйте ее с помощью символа обратно косой черты: CUT(foo,\,,1).
  • Если задано использовать несколько полей из исходной переменной, то, в результате, получиться строка собранная из этих фрагментов, которые будут разделены заданным для функции разделителем.
  • Опуская значения одного из ограничителя при использовании интервалов, то мы получим все поля переменной до или после не указанного ограничителя. Например:
    • Используя "CUT(somevar,,3-)", в результате, мы получим третье поле и все остальные поля после него.
    • Используя "CUT(somevar,,-2)", в результате, мы получим все поля с начала переменной до второго поля, включая его самого.
  • Это команда очень часто используется для выделения фрагментов строк переменных, с значением переменной длинны. Для работы со строками фиксированной длинны, используйте встроенные механизмы работы со строками.
  • Команда CUT часто используется для отделения секции с уникальным идентификатором от имени канала. Например, имя канала может быть таким: SIP/somehost-f387, а нам нужно получить из этой строки только часть: SIP/somehost .
  • Эта функция заменяет приложение Cut, которое объявлено устаревшим.

Параметр varname должен быть именем переменной, а НЕ текстовой строкой. Это довольно редкий случай синтаксиса функции. Итак:


exten => s,1,Set(foo=${CUT(bar,,2)}) ; Это правильный синтаксис.
exten => s,1,Set(foo=${CUT(${bar},,2)}) ; Это не правильный синтаксис
; (исключая случай, когда bar содержит имя другой переменной).

Возвращаемые значения

Возвращает строку с результатом.


Примеры


exten => s,1,Set(foo=1-2-3-4-5)
exten => s,2,Set(foo=${CUT(foo,,1-3&5)})
В результате, переменная foo будет иметь значение: 1-2-3-5

Извлечения значения из списка, где значения разделены запятыми:
exten => s,1,Set(myVar="one,two,three")
exten => s,2,Set(cutVar=${CUT(myVar|\,|1)})
Переменная cutVar примет значение 'one'

Ссылки по теме: