读取文件并在某个单词后替换测试

时间:2012-10-11 22:54:08

标签: c# replace find

我有一些文件,例如:

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之后只更换数值的最佳方法是什么?

3 个答案:

答案 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,但我认为这就是你的意思。还有很多不同的方法来替换字符串的一部分,我只是认为这样可以灵活地使用方便的单词组来做其他事情。