2012-04-18 12 views
0

現在、私は余分なオプションをつけてアジェンダを構築しています。私は、この.txtファイルからテキストを変更または削除するには、私は、単純な.txtファイル にデータを格納テスト目的のためにテキストファイルのテキストを r nに置き換えます。

(それは仮想アシスタントの議題に接続されることを後に。)

問題。 置き換える必要があるコンテンツの部分と検索文字列はまったく同じですが、コンテンツ内のテキストを置き換えません。

コード:

content "-- agenda --\r\n\r\nTask\r\nTo do: test\r\nDateTime: 16-4-2012 15:00:00\r\nReminders:\r\nspeak 16-4-2012 13:00:00\r\n16-4-2012 13:30:00\r\n\r\nTask\r\nTo do: testing\r\nDateTime: 16-4-2012 9:00:00\r\nReminders:\r\nspeak 16-4-2012 8:00:00\r\n\r\nTask\r\nTo do: aaargh\r\nDateTime: 18-4-2012 12:00:00\r\nReminders:\r\n18-4-2012 11:00:00\r\n" string 

    search "Task\r\nTo do: aaargh\r\nDateTime: 18-4-2012 12:00:00\r\nReminders\r\n18-4-2012 11:00:00\r\n" string 

    replace "Task\r\nTo do: aaargh\r\nDateTime: 18-4-2012 13:00:00\r\nReminders\r\n18-4-2012 11:00:00\r\n" string 

しかし、それはない:

変更方法

public override void Change(List<object> oldData, List<object> newData) 
    { 
     int index = -1; 
     for (int i = 0; i < agenda.Count; i++) 
     { 
      if(agenda[i].GetType() == "Task") 
      { 
       Task t = (Task)agenda[i]; 

       if(t.remarks == oldData[0].ToString() && t.datetime == (DateTime)oldData[1] && t.reminders == oldData[2]) 
       { 
        index = i; 
        break; 
       } 
      } 
     } 

     string search = "Task\r\nTo do: " + oldData[0].ToString() + "\r\nDateTime: " + (DateTime)oldData[1] + "\r\n"; 
     reminders = (Dictionary<DateTime, bool>) oldData[2]; 
     if(reminders.Count != 0) 
     { 
      search += "Reminders\r\n"; 

      foreach (KeyValuePair<DateTime, bool> rem in reminders) 
      { 
       if (rem.Value) 
        search += "speak " + rem.Key + "\r\n"; 
       else 
        search += rem.Key + "\r\n"; 
      } 
     } 

     // get new data 
     string newRemarks = (string)newData[0]; 
     DateTime newDateTime = (DateTime)newData[1]; 
     Dictionary<DateTime, bool> newReminders = (Dictionary<DateTime, bool>)newData[2]; 

     string replace = "Task\r\nTo do: " + newRemarks + "\r\nDateTime: " + newDateTime + "\r\n"; 
     if(newReminders.Count != 0) 
     { 
      replace += "Reminders\r\n"; 
      foreach (KeyValuePair<DateTime, bool> rem in newReminders) 
      { 
       if (rem.Value) 
        replace += "speak " + rem.Key + "\r\n"; 
       else 
        replace += rem.Key + "\r\n"; 
      } 
     } 

     Replace(search, replace); 

     if (index != -1) 
     { 
      remarks = newRemarks; 
      datetime = newDateTime; 
      reminders = newReminders; 
      agenda[index] = this; 
     } 
    } 

デバッグで実行しているとき、私は、正しい情報を取得

private void Replace(string search, string replace) 
    { 
     StreamReader reader = new StreamReader(path); 
     string content = reader.ReadToEnd(); 
     reader.Close(); 

     content = Regex.Replace(content, search, replace); 
     content.Trim(); 

     StreamWriter writer = new StreamWriter(path); 
     writer.Write(content); 
     writer.Close(); 
    } 

方法を置き換えますテキストを変更します。 Regex.Replaceが正しいコンテンツを見つけられるようにするにはどうすればよいですか?

PS。私はこれについていくつかの話題を調べましたが、そこに言及された解決策のどれも私のために働きません。

答えて

0

あなたはReminders:権を逃しました。ちょうどそれをもう一度チェックしてください:)

+0

本当の理由が見つかった場合、更新された回答 – levanovd

+0

ありがとうございます。私はそれを永久に見つめて、それを見ていないかもしれない... –

0

StringBuilderを使用してファイルに書き出すことができます。

ちょうどコンソールアプリケーションで簡単な例をノックアップしましたが、これは私にとってはうまくいくようですが、あなたが探しているものかもしれないと思います。

 StringBuilder sb = new StringBuilder(); 

     sb.Append("Tasks\r\n"); 
     sb.Append("\r\n"); 
     sb.Append("\tTask 1 details"); 

     Console.WriteLine(sb.ToString()); 

     StreamWriter writer = new StreamWriter("Tasks.txt"); 
     writer.Write(sb.ToString()); 
     writer.Close(); 
+0

置換文字列は正しいですし、おそらくコンテンツ内に検索文字列を見つけることができたらうまくいくでしょう。 –

関連する問題