【发布时间】:2010-12-27 20:30:16
【问题描述】:
我想为 A 和 P 更改几个字符 * # 以使监视器文件名的字符更友好。我能找到的唯一解决方案是在拨号计划中自己做,但它会产生很多冗长的输出,并且不像我想要的那样高效(快速)。我会把它贴在这里,以防有人想使用它。但我正在寻找一个星号函数,我可以编译一些我可以用拨号计划调用的东西,比如 ${REPLACE(${EXTEN},*,a)} 并转换 exten **123**456***到 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})
【问题讨论】:
-
很抱歉您必须输入所有这些内容。在 Python 中,它只是 "123***ABC###".replace('*','A').replace('#',P)
-
哈哈。我觉得写的很糟糕。但更好的是我第一次尝试调用 System(使用 sed 用 regex|pipe 使用星号 -rx "database put REPLACERESULT" 替换输出)每次调用最多需要 1 秒来执行该行。
标签: asterisk replace telephony