2016-11-03 6 views
-1

テキストファイルの文字列を他のファイルにあるすべてのものに置き換えようとしています。私のHTMLの電子メール変数。 しかし、私はforeachを実行しようとするたびに、それは文字列に文字を変換することができますエラーを私に与える。これを別のやり方でどうやって行うのですか?foreachを使用してtxtで文字列を置換する

 StreamReader myreader = new StreamReader("VUCresult.txt"); 
     StreamReader myreaderhtml = new StreamReader("htmlemail.html"); 
     string lines = myreader.ReadToEnd(); 
     string htmlmailbody = myreaderhtml.ReadToEnd(); 


     if (lines == "Der er ikke nogen udmeldinger idag") 
     { 
      htmlmailbody.Replace("ingen", lines); 
     } 
     else 
     { 
      foreach (string s in lines) 
      { 
       htmlmailbody = htmlmailbody.Replace("Row2", s); 
      } 
     htmlmailbody = htmlmailbody.Replace("Row1", lines); 
     htmlmailbody = htmlmailbody.Replace("Row3", DateTime.Now.ToString()); 
     } 
+0

'foreach(行内の文字列)'と 'lines'は' string'型です - 文字列を繰り返し処理すると文字列が増えると思いますか? – UnholySheep

+0

私はあなたの意見を参照してください。 –

+1

'htmlmailbody = htmlmailbody.Replace(" Row2 "、s);'を初めて実行すると、 "Row2"のすべてのインスタンスが 's'で置き換えられます。その後、何度も何度も繰り返します"Row2"は既に置き換えられているためです。私はあなたのロジックを再考する必要があると思います...あなたが達成しようとしていることはあまり明確ではありません。 –

答えて

1

非常に長い文字列(改行を含むことがあります)にはforeachが使用されています。それぞれの個性をあなたに返します。ただFile.ReadAllLinesを使用します(コレクションとして)ファイル内のすべての行を取得するには

string htmlmailbody;   
    using StreamReader myreaderhtml = new StreamReader("htmlemail.html")) 
    { 
     htmlmailbody = myreaderhtml.ReadToEnd(); 
    } 
    string[] lines = File.ReadAllLines("VUCresult.txt"); 

    foreach (string s in lines) 
    { 
     ... 
    } 

あなたがラインのコレクションの代わりに、ファイル全体を持っているので、あなたのオリジナルifチェックはここに意味することはありませんelseの2番目のreplace文も意味をなさないでしょう。あなたは本当に見たいものを決める必要があります。

+0

答えがありがとうございました。 –

0

ここでforeachはすでに文字列であり、foreachを呼び出すと変数 's'がcharになるため、foreachは必要ありません。さらに、文s.ToString()は文字列を返すので何もしないので、s自体は変更されません。

さらに、 'using'ステートメントでリーダーを囲むことを検討してください。

関連する問題