替换星号拨号方案中的字符 [英] Replace characters in Asterisk Dialplan

查看:41
本文介绍了替换星号拨号方案中的字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想为 A 和 P 更改几个关闭字符 * # 以使监视器文件名的字符更友好.我能找到的唯一解决方案是在拨号计划中自己做,但它会产生很多冗长的输出,并且没有我想要的那样高效(快速).我会把它贴在这里以防万一有人想使用它.但我正在寻找一个星号函数,我可以编译一些我可以使用拨号计划调用的东西,比如 ${REPLACE(${EXTEN},*,a)} 并转换了 exten **123**456***到 AA123AA456AAA.

I want to change a couple off characters * # for A and P to have the monitor filename with characters more friendly. The only solution I could find was to do it my self within the dialplan but it generates a lot of verbosity output and is not as efficient(fast) as I would like to. I'll post it here just in case someone wants to use it. But I'm looking for an asterisk function that I can compile something that I can call withing the dialplan like ${REPLACE(${EXTEN},*,a)} and have the exten **123**456*** converted to AA123AA456AAA.

;
; MACRO REPLACE
;
[macro-replace]
;
;   ${ARG1} - String source
;   ${ARG2} - Chars to replace
;   ${ARG3} - Chars to replace with
;
exten => s,1,NoOp(Replacing ${ARG2} for ${ARG3} in ${ARG1})
exten => s,n,Set(str=${ARG1})
exten => s,n,Set(find=${ARG2})
exten => s,n,Set(replace=${ARG3})
exten => s,n,Set(i=0)
exten => s,n,Set(length=${LEN(${str})})
exten => s,n,While($[${i} < ${length}])
exten => s,n,GotoIf($["${str:${i}:1}" != "${find}"]?continue)
exten => s,n,Set(pre=)
exten => s,n,GotoIf($["${i}" = "0"]?post)
exten => s,n,Set(pre=${str:0:${i}})
exten => s,n(post),Set(post=)
exten => s,n,GotoIf($["${i}" = $[${length} - 1]]?write)
exten => s,n,Set(post=${str:$[${i} + 1]})
exten => s,n(write),Set(str=${pre}${replace}${post})
exten => s,n(continue),Set(i=$[${i} + 1])
exten => s,n,EndWhile
exten => s,n,Set(REPLACERESULT=${str})

推荐答案

REPLACE() 函数现在可以轻松做到这一点:

The REPLACE() function now does this easily:

exten => 100,1,Set(find=**123**456***)
same => n,NoOp(find=${find})
same => n,Set(replace=${REPLACE(find,*,A)})
same => n,NoOp(find=${find}, replace=${replace})
same => n,hangup()

输出:

*CLI> channel originate local/100@default extension null@default
    -- Executing [100@default:1] Set("Local/100@default-c758;2", "find=**123**456***") in new stack
    -- Executing [100@default:2] NoOp("Local/100@default-c758;2", "find=**123**456***") in new stack
    -- Executing [100@default:3] Set("Local/100@default-c758;2", "replace=AA123AA456AAA") in new stack
    -- Executing [100@default:4] NoOp("Local/100@default-c758;2", "find=**123**456***, replace=AA123AA456AAA") in new stack
    -- Executing [100@default:5] Hangup("Local/100@default-c758;2", "") in new stack
  == Spawn extension (default, 100, 5) exited non-zero on 'Local/100@default-c758;2' 

这篇关于替换星号拨号方案中的字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆