有的时候我们需要进行简单的字符串变量替换. 当然最新的.net已经支持 {name} 这种替换方式. 但是,老的.net是不支持的. 本方法是把 “{{varName}}” 这种变量替换成 对应的数值.
例如
Week1 = 星期一
Week2 = 星期二
Week3 = 星期三
Week4 = 星期四
“今天是{{Week1}}, 明天是{{Week2}}”
替换结果
“今天是星期一, 明天是星期二”
下面是代码
/// <summary>
/// 会自动替换 变量 把形如 "{{varName}}" 替换成对应的数值
/// </summary>
public static void ReplaceFileVar(string srcFile, string targetFile)
{
/*
* 设置webconfig连接字符串
*/
string webconfigpath = Path.Combine("./", srcFile);
//修改第一个数据库连接
string webcofnigstring2 = File.ReadAllText(webconfigpath);
webcofnigstring2 = ReplaceStringVar(webcofnigstring2);
//循环替换所有的 {{DBSERVER}} 这种变量 效率比较低,改成上面的replace
//foreach (Match item in mat)
//{
// Console.WriteLine(item.Groups[1]);
// var name = item.Groups[1].Value;
// if (! string.IsNullOrEmpty( InstallContext.Get(name)))
// {
// webcofnigstring2.Replace(@"{{"+ name + "}}", InstallContext.Get(name));
// }
//}
File.WriteAllText(targetFile, webcofnigstring2);
}
/// <summary>
/// 会自动替换 变量 把形如 "{{varName}}" 替换成对应的数值
/// </summary>
private static string ReplaceStringVar(string str)
{
Regex reg = new Regex(@"\{\{(.*?)\}\}");
//var mat = reg.Matches(webcofnigstring2);
str = reg.Replace(str,
new MatchEvaluator(m =>
InstallContext.Get(m.Groups[1].Value) == string.Empty ? m.Value : InstallContext.Get(m.Groups[1].Value)
));
return str;
}
InstallContext.cs 顺便也贴一下
public static class InstallContext
{
private static Dictionary<string, string> kvs = new Dictionary<string,string> ();
public static string Get(string index)
{
if (kvs.ContainsKey(index))
{
return kvs[index];
} else {
return string.Empty;
}
}
public static void Set(string index, string value)
{
kvs[index] = value;
}
//private static InstallContext instance = new InstallContext();
//private InstallContext()
//{
//}
//public static InstallContext GetInstance()
//{
// return instance;
//}
}
下面是使用方法
private void button3_Click(object sender, EventArgs e)
{
InstallContext.Set("WebSiteDBConnectstring",textBox1.Text);
ReplaceFileVar("Web.config.tpl","Web.config");
}
Web.config.tpl 文件内容
<?xml version="1.0"?>
<configuration>
{{WebSiteDBConnectstring}}
</configuration>