我有tokens
[@date]
[@time]
[@fileName]
... etc
它遍布整个大文件。当一行只有一个令牌时,我可以轻松解析文件并用Regex.Replace
替换它们。然而,当一条线上有两个令牌时会出现问题
例如:
[@date] [@time]
我想要做的是将String.Split
与" " as the delimiter
一起使用,然后如果有令牌则迭代结果检查。
但我发现这种方法有两个问题,文件相当大,这肯定会影响性能。第二个问题是将要输出的文件是SQL
文件,我想保留空白区域仅用于外观。
这个问题有更优雅的解决方案吗?或者它只是另一种过早优化的情况?
答案 0 :(得分:2)
您可以做的一件事是,不是逐行替换模式,而是在整个文件中替换它们:
string fileContent = File.ReadAllText(path);
fileContent = Regex.Replace(fileContent, pattern1, replacement1);
...
fileContent = Regex.Replace(fileContent, patternN, replacementN);
答案 1 :(得分: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());
}
答案 2 :(得分:0)
尝试使用string.Replace(...)扩展名。这将允许您替换字符串的所有实例。
例如
string file = File.ReallAllText("myfile.txt");
file.Replace("[@date]", "replaced_value");
上述内容会将“[@date]”的所有实例替换为“replacement_value”。
编辑为先前的答案包括OP无法使用的自定义扩展程序。谢谢llya。