我正在申请将该游戏的分辨率更改为所要求的分辨率。
StreamReader reader = new StreamReader(@"C:\Documents and Settings\ARTech\Bureaublad\PersistentSymbols.ini");//Reads the file.
string content = reader.ReadToEnd();//Puts the content of the file, into a variable.
reader.Close();
string replace = "persistent extern INDEX m_pixScreenWidth=(INDEX)" + txtWidth.Text + ";";
content = content.Replace("persistent extern INDEX m_pixScreenWidth=(INDEX)1920;", replace);//Replaces the ScreenWidth of the game to the requested number.
replace = "persistent extern INDEX m_pixScreenHeight=(INDEX)" + txtHeight.Text + ";";
content = content.Replace("persistent extern INDEX m_pixScreenHeight=(INDEX)1200;", replace);//Replaces the ScreenHeight of the game to the requested number.
StreamWriter writer = new StreamWriter(@"C:\Documents and Settings\ARTech\Bureaublad\PersistentSymbols.ini");
writer.Write(content);//Saves the changes.
writer.Close();
问题是,分辨率并不总是1920 x 1200,所以我需要某种通配符来接受persistent extern INDEX m_pixScreenWidth=(INDEX)
和;
之间的所有内容。
答案 0 :(得分:4)
答案 1 :(得分:2)
您可能想要查看INI读者/作者,例如此项目:An INI file handling class using C#。然后你可以抓住所需的键并适当地设置值。
否则,你可以写一个像这样的正则表达式:
string input = @"persistent extern INDEX m_pixScreenWidth=(INDEX)1920;
...
persistent extern INDEX m_pixScreenHeight=(INDEX)1200;";
string width = "800";
string height = "600";
string pattern = @"(persistent extern INDEX m_pixScreen(?<Type>Width|Height)=\(INDEX\))\d+;";
string result = Regex.Replace(input, pattern,
m => m.Groups[1].Value
+ (m.Groups["Type"].Value == "Width" ? width : height)
+ ";");
Console.WriteLine(result);
模式分解:
(persistent extern INDEX m_pixScreen(?<Type>Width|Height)=\(INDEX\))
:您的预期文本(包括高度/宽度和索引文本)将通过左括号和右括号放置在捕获组中。我们稍后会参考。(?<Type>Width|Height)
:一个命名的捕获组,它在宽度和高度之间交替捕获两者。这样一种模式就可以处理两种类型的文本。\(INDEX\)
:括号必须转义为字面匹配,因为它们在正则表达式中具有特殊含义(如果未转义)(用于上述分组)。\d+
:\d
匹配数字[0-9]
。 +
使其匹配至少一个数字(1位或更多位数)。;
:这与尾随分号匹配 lambda与MatchEvaluator
方法的Replace
重载一起使用。基本上你正在构建字符串备份。 Groups[1]
指的是捕获的第一组文本(参见模式细分中的第一点)。接下来,我们检查命名组Type
并检查我们是处理宽度还是高度。我们恰当地替换新值。最后,我们在末尾添加分号以获得最终的替换结果。