0

我有一些文件,例如:

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什么?

4

3 回答 3

5

使用正则表达式:

Regex rgx = new Regex(@"Open [^\s]+");
string result = rgx.Replace(text, newValue);
File.WriteAllText(activeSaveFile, result );

使用这种方法,您可以将正则表达式对象存储在方法之外,这样您就可以避免每次都重新编译它。我猜与您的情况下的文件 I/O 相比,它不会对性能产生重大影响,但在其他情况下这是一个很好的做法。

于 2012-10-11T22:56:02.437 回答
0

用空格分割行,string.split(new char[] { ' ' }, StringSplitOptions.Empty)然后获取_splittedRow[3]并替换并将新行合并在一起。

于 2012-10-11T22:58:30.873 回答
0

如果我理解你,这条线:

FileBegin Finance  Open 344.34 Close -3434.34 EndDay 5 End

是整个文件吗?您一直在为旧值输入“344.34”,为新值输入“something”?而您只想输入新值?

你可以说:

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
    }
}

这是很多如果,但我认为这就是你的意思。还有很多不同的方法可以替换字符串的那一部分,我只是认为这会让你灵活地用一组方便的单词来做其他事情。

于 2012-10-11T23:09:50.720 回答