0

現在、私は INI ファイルの読み書きを簡単にするライブラリを作成しています。キーと値が存在しないときにリーダーが動作し、書き込みを行っていますが、値を簡単に更新することはできません。文字列を置き換えるさまざまな方法を試しました。ただし、どれも実用的ではなく、プログラムは古い値を必要とします

ここから試した例を次に示します。テキストファイルの不明な値を置き換える正規表現-c#およびasp.net

Regex rgx = new Regex(@"SQL-SERVER-VERSION="".*?""");
string result = rgx.Replace(input, replacement);

しかし、そのコードを変更して値を置き換えるたびに、代わりにキーが置き換えられるため、アプリが次回ファイルを読み取ろうとするとエラーが発生します。

現在使用しているコードは次のとおりです。

private string wholedata;
private void UpdateKey(string key, string path, string newval)
{
    try
    {
        using (StreamReader s = new StreamReader(File.Open(path, FileMode.Open)))
        {
            wholedata = s.ReadToEnd();
            Regex rgx = new Regex(key + ".*?");
            string result = rgx.Replace(wholedata, newval);
            MessageBox.Show(result);
        }
        using (StreamWriter s = new StreamWriter(File.Open(path, FileMode.OpenOrCreate)))
        {
            s.Write(wholedata);
        }
     }
     catch (Exception e)
     {
     }
}
4

2 に答える 2

4

システムがすでに知っていることをなぜ書き直すのか? このプロジェクトを見てみましょう: C# を使用した INI ファイル処理クラス。また、Xml が .Net フレームワークで重要な位置を占めていることにも注意してください。シリアル化/逆シリアル化する構成フレームワークまたは単純な設定オブジェクトのいずれかを使用することは珍しくありません。要件はわかりませんが、ini ファイルを使用する理由を少し説明することはできます。

つまり、新しい値 (結果) ではなく、古い値 (wholedata) を書き込んでいます。これが根本的な原因である可能性があります。

を呼び出すとRegex.Replace(そうしますstring.Replace)、実際には新しい文字列が生成され、パラメーターに渡された文字列は変更されません。

于 2012-07-31T12:24:22.570 に答える
0

正規表現を次のように変更します

Regex rgx = new Regex(@"(?<=SQL-SERVER-VERSION="").*?(?="")");

これは.*?、プレフィックスとサフィックスが存在するという条件で一致します ((?<=)および(?=)グループ化)

于 2012-07-31T12:26:27.987 に答える