1

我有一个清单tokens

 [@date]
 [@time]
 [@fileName]
 ... etc

分散在一个大文件中。Regex.Replace当一行上只有一个标记时,我可以解析文件并轻松替换它们。但是,当一行
示例中有两个标记时,就会出现问题:

[@date] [@time]

我想做的是使用String.Splitwith " " as the delimiter,然后遍历结果检查是否有标记。

但是我看到这种方法有两个问题,文件相当大,这肯定会影响性能。第二个问题是将输出的文件是一个SQL文件,我想保留空白以供查看。

这个问题有更优雅的解决方案吗?或者这只是过早优化的另一种情况?

4

3 回答 3

2

您可以做的一件事是,不要逐行替换模式,而是在整个文件中替换它们:

string fileContent = File.ReadAllText(path);
fileContent = Regex.Replace(fileContent, pattern1, replacement1);
...
fileContent = Regex.Replace(fileContent, patternN, replacementN);
于 2013-05-21T23:14:44.107 回答
1

一种简单的方法是分别存储标记及其值,然后对它们进行迭代,用该标记的值替换您的查询。示例如下:

var tokensWithValues = new Dictionary<string, object>()
{
    {"[@date]", DateTime.Now},
    {"[@time]", DateTime.Now.Ticks},
    {"[@fileName]", "myFile.xml"},
};

var sqlQuery = File.ReadAllText("mysql.sql");

foreach (var tokenValue in tokensWithValues)
{
    sqlQuery = sqlQuery.Replace(tokenValue.Key, tokenValue.Value.ToString());
}
于 2013-05-21T23:30:00.937 回答
0

尝试使用 string.Replace(...) 扩展。这将允许您替换字符串的所有实例。

例如

string file = File.ReallAllText("myfile.txt");


file.Replace("[@date]", "replaced_value");

以上将用“replaced_value”替换“[@date]”的所有实例。

编辑为先前的答案包括 OP 不可用的自定义扩展。谢谢莉亚。

于 2013-05-21T23:15:51.853 回答