2

私の問題は次のとおりです。

次のように読んでいる.iniファイルがあります。

    StreamReader sr = new StreamReader(txtb_path.Text, Encoding.Default);

    StringBuilder content = new StringBuilder();

    // schreibt Zeile für Zeile auf den StringBuilder bis das Ende der Datei erreicht ist
    while (!sr.EndOfStream)
        content.AppendLine(sr.ReadLine());

    // StringBuilder als String an die TextBox übergeben
    this.textBox1.Text = content.ToString();

次に、次の正規表現を適用します。

    string regex = @"^FensterGemerkt.+?\d+\.\d+\.\d+\,\ \d{2}:\d{2}:\d{2}\ :\ -{1}?\d+\,.*?$"; //@"^Fenster.*$";

    RegexOptions options = RegexOptions.Multiline;

    // search in
    string input = content.ToString();
    //txtb_count.Text = "anzahl zeilen: " + Convert.ToString(content.Capacity);

    // run regex
    MatchCollection matches = Regex.Matches(input, regex, options);              

    // MessageBox.Show(Convert.ToString(matches.Count));
    txtb_count.Text = Convert.ToString(matches.Count);
    string cleanup ="";          

    foreach (Match match in matches)
    {
        // clean the ini
        cleanup = Regex.Replace(input, match.Value, "");

        // Output all matches                    
        textBox2.Text = textBox2.Text + "\n" + match.Value;
    }

.ini ファイルは次のようになります。

1
FensterGemerkt=12.11.2012, 10:42:37 : -32000,32744--31840,32768
Fenster=-32000,32744,160,24

2
FensterGemerkt=12.11.2012, 10:49:46 : 0,44-1024,768
Fenster=0,44,1024,724

私が欲しいのは、正規表現が最初のエントリと一致する場合:

FensterGemerkt=12.11.2012, 10:42:37 : -32000,32744--31840,32768

...次に、交換または削除します。

私のアプリは動作しますが、.ini ファイルの最後のエントリに対してのみです。に問題があると思いますが、わかりforeachません。

4

1 に答える 1

1

これを行うにはより良い方法がありますが、問題に対する最も簡単な答えは、cleanup常に最後の値を置き換えるようにリセットしているためです。

試す

    string cleanup =input;          

    foreach (Match match in matches)
    {
        // clean the ini
        cleanup = Regex.Replace(cleanup, match.Value, "");

        // Output all matches                    
        textBox2.Text = textBox2.Text + "\n" + match.Value;
    }

より良い解決策は、Linq を使用することです。

  Regex regex=new Regex(@"^FensterGemerkt.+?\d+\.\d+\.\d+\,\ \d{2}:\d{2}:\d{2}\ :\ -{1}?\d+\,.*?$"; //@"^Fenster.*$",RegexOptions.MultiLine);
  string cleanup=regex.Replace(input,string.Empty);
  string[] matches=regex.Matches(input).OfType<Match>().Select(m=>m.Value).ToArray();
  txtb_count.Text = Convert.ToString(matches.Length);
  textBox2.Text = string.Join('\n',matches);
于 2012-11-12T13:40:45.063 に答える