Crmgo Blog

Asterisk, práce se řetězci a matematickými operacemi

Asterisk, práce se řetězci a matematickými operacemi

Funkce pro práci se řetězci. Funkce LEN(foo) vrací délku řetězce foo. Například: exten => 100,1,Set(Fruit=pear) exten => 100,2,NoOp(${LEN(Fruit)}) exten => 100,3,NoOp(${LEN(${Fruit})}) První příkaz NoOp by měl zobrazit hodnotu 5 (délka řetězce "pear"). Druhý příkaz NoOp by měl zobrazit hodnotu 4…

Asterisk, práce se řetězci a matematickými operacemi

Funkce pro práci s řetězci

Délka řetězce

${LEN(foo)}

vrací délku řetězce foo. Například,

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

první příkaz NoOp by měl zobrazit hodnotu 5 (délka řetězce "pear"). Druhý příkaz NoOp by měl zobrazit hodnotu 4 (délka řetězce "pear").

Tato metoda umožňuje skvělou kontrolu prázdných řetězců a proměnných obsahujících NULL.

Podřetězce

${foo:offset:length}

vrací podřetězec řetězce foo, počínaje posunem offset a omezující vrácený řetězec na délku length znaků.

  • Pokud je hodnota offset záporná, posun se počítá od konce řetězce, nikoliv od začátku.
  • Pokud je hodnota length vynechána nebo záporná, délka vráceného řetězce není omezena a bude vrácen celý řetězec počínaje posunem offset.

Příklady:

${123456789:1} - vrací řetězec 23456789
${123456789:-4} - vrací řetězec 6789
${123456789:0:3} - vrací řetězec 123
${123456789:2:3} - vrací řetězec 345
${123456789:-4:3} - vrací řetězec 678

Příklad použití:

exten => _NXX.,1,Set(areacode=${EXTEN:0:3}) - získá první 3 číslice z proměnné ${EXTEN}
exten => _516XXXXXXX,1,Dial(${EXTEN:3}) - získá hodnotu proměnné ${EXTEN} po 3. číslici
exten => 100,1,Set(whichVowel=4)
exten => 100,2,Set(foo=AEIOU:${whichVowel}:1) - proměnná ${foo} bude mít hodnotu 'U'

Spojování řetězců

Pro spojení dvou řetězců stačí napsat direktivu následujícím způsobem:

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

Matematické operace s proměnnými

Pro matematické operace s proměnnými, například inkrementaci, násobení, sčítání. Stačí napsat:

exten => s,1,Set(SOMEVAR=$[${SOMEVAR} + 1]) ; inkrementace
exten => s,2,Set(SOMEVAR=$[2 * ${SOMEVAR}]) ; násobení atd.
V výrazech musíte používat mezery, jak je ukázáno výše.

Od verze Asterisk 1.2 je také k dispozici funkce MATH...

exten => s,1,Set(SOMEVAR=${MATH(${SOMEVAR}+1)}) ; inkrementace
exten => s,2,Set(SOMEVAR=${MATH(2*${SOMEVAR})}) ; násobení atd.

Poznámky k různým verzím

  • Proměnná CALLINGPRES byla přidána do CVS HEAD 2004-09-10, zahrnuta ve vydání Asterisk 1.2
  • Proměnná TOUCH_MONITOR byla přidána do CVS HEAD 2005-01-05, zahrnuta ve vydání Asterisk 1.2

Poznámka: příspěvek mohl vzniknout s pomocí AI a lidskou redakcí. Odpovědný: Dmytro Lomaka, Kaltenkirchen.