我有一些文件,例如:
FileBegin Finance Open 87547.25 Close 548484.54 EndDay 4 End
另一个文件示例:
FileBegin Finance Open 344.34 Close -3434.34 EndDay 5 End
我需要读取文件中的文本,并在单词Open之后仅替换数字值,并在单词Open完整之前和之后保留文本的其余部分。我一直在使用这段代码:
string fileToRead = "c:\\file.txt";
public void EditValue(string oldValue, string newValue, Control Item)
{
if (Item is TextBox)
{
string text = File.ReadAllText(fileToRead);
text = text.Replace(oldValue, newValue);
File.WriteAllText(activeSaveFile, text);
}
}
在单词open
之后只更换数值的最佳方法是什么?
答案 0 :(得分:5)
使用正则表达式:
Regex rgx = new Regex(@"Open [^\s]+");
string result = rgx.Replace(text, newValue);
File.WriteAllText(activeSaveFile, result );
使用此方法,您可以将regex对象存储在方法之外,以避免每次重新编译它。我猜它与你的情况下的文件I / O相比不会产生显着的性能影响,但在其他情况下这是一个很好的做法。
答案 1 :(得分:0)
用string.split(new char[] { ' ' }, StringSplitOptions.Empty)
之类的空格分隔行,然后获取_splittedRow[3]
并替换并合并新行。
答案 2 :(得分:0)
如果我理解你,行:
FileBegin Finance Open 344.34 Close -3434.34 EndDay 5 End
是整个文件?你输入旧值的“344.34”和新值的“东西”?而你只想输入新值?
你可以说:
string fileToRead = "c:\\file.txt";
public void EditValue(string oldValue, string newValue, Control Item)
{
if (Item is TextBox)
{
string text = File.ReadAllText(fileToRead);
string[] words = text.Split(new char[] {' '}); // assuming space-delimited
words[3] = "new value"; // replace the target value
text = "";
foreach (string w in words)
{
text += w + " "; // build our new string
}
File.WriteAllText(activeSaveFile, text.Trim()); // and write it back out
}
}
那是很多ifs,但我认为这就是你的意思。还有很多不同的方法来替换字符串的一部分,我只是认为这样可以灵活地使用方便的单词组来做其他事情。