--[[
最近做一个通信行业的语音导航项目,查话费业务,获取数据采用的是lua脚本,一开始采用的是拼接字符串的方式,后来感觉把字符串做成模版的方式,然后替换字符串,这样方便多了。
]]
function replace(str,paras)
local result = "";while string.find(str, "${%s*[%w_]*%s*}") do
x,y = string.find(str, "${%s*[%w_]*%s*}");
result = result .. string.sub(str, 1, x-1);
a = string.sub(str,x,y);
result = result .. getParamValue(a, paras);
str = string.sub(str, y+1);
end
result = result .. str;
return result;
end
function getParamValue(a,b)
local name = string.gsub(a,"[$|{|}|%s]","");
if b[name] then
return b[name];
else
return "";
end
end
local str = "尊敬的客户,您的当前预存款为${fee_yck}元、未出帐话费为${fee_wcz}元,未出帐话费中在当月可继续使用的底线费用为${fee_ky}元,当月可用预存款总额为${fee_sum}元,其中普通预存款为${fee_ptyck}元,专用预存款为${fee_zyyck}元";
local map = {fee_yck=12,fee_wcz=23,fee_ky=34,fee_sum=45,fee_ptyck=56,fee_zyyck=67};
print(replace(str,map));