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

私があなたを理解していれば、次の行:

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

それは多くのifsですが、これがあなたの言いたいことだと思います。また、文字列の一部を置き換えるにはさまざまな方法があります。これにより、便利な単語の配列で他のことを行う柔軟性が得られると思いました。

于 2012-10-11T23:09:50.720 に答える
0

のように空のスペースで行を分割し、新しい行をstring.split(new char[] { ' ' }, StringSplitOptions.Empty)取得し_splittedRow[3]て置換し、マージします。

于 2012-10-11T22:58:30.873 に答える