2011-01-23 15 views
3

私は奇妙な問題を抱えています。私はテキストファイルを読んだ後、デリミタとして\ nを使って分割します。分割された行には最後に '\ r'が含まれていることに気付きました。だから私はそれを削除しようとしている、私はそうストリングを使用して試みた。ここに私のコードは次のとおりです。ファイルから読み込んだ行から rを削除します。

string fileOutput = File.ReadAllText(location); 
    SettingsManager.proxies.Clear(); 
    foreach (string line in fileOutput.Split('\n')) 
    { 
     string cleanLine = line; 
     if (cleanLine.Contains("\r")) cleanLine.Replace("\r", ""); 
     SettingsManager.proxies.Add(cleanLine); 
    } 

EDIT:1分間のコードを凝視した後、私は、元の文字列に置き換えられた値を代入していないことがわかりました。

cleanLine.Replace("\r",""); //assigns a value to nothing 

cleanLineをcleanLine.Replace()に割り当てておく必要があります。

cleanLine = cleanLine.Replace("\r",""); 

答えて

3

は、私は、分割後に得られた文字列ごとに交換してください呼び出すよりも良いだろうfileOutput.Replace("\r","")を実行しているかなり確信しています。あなたの問題も解決するかもしれません。

+0

実際、私はどうしていないのですか?私はちょっと休憩する必要があります。おかげでVlad、それは問題を解決しました=] – deadlock

+0

ありがとう。最初は何もしていなかったバグを追いかけるのに2時間以上休むことはずっと良いです;)P.S.あなたが私の答えを問題を解決するものとしてマークしたら、私はうれしいでしょう。 – Vlad

1

Windowsでは、行のインジケータは実際には\r\nなので、 "\ r \ n"の最初の置き換えはファイル内の他の場所にはありません。 ")、、次にが置換文字に分割されます。さもなければ、単に "\ r"を置き換えれば、実際には行の最後ではない "\ r"を置き換えることになります(これはかなり疑わしいです)。

どのようにファイルを最初に読んでいますか? 。TextReaderクラスにはReadLine()メソッドがあります。このメソッドを使用すると、この特定の問題を完全に回避できます。

+0

私はその合併症の必要はないと思います。私は何かを非常にシンプルに欠けていました、私は元のものに置き換えられた文字列を割り当てなかったので、それがうまくいかなかったのです。あなたのコメントはありがとう=] – deadlock

2

文字列がC#でどのように動作するのか、テキストファイルが一般にWindows上でどのように動作するのか誤解していると思います。

Windowsでは、改行は改行(\ r)と改行(\ n)で区切られますか?したがって、これは「正常」です。

第2に、C#では文字列が不変です。

if (cleanLine.Contains("\r")) cleanLine.Replace("\r", ""); は、 'cleaned'値を割り当てません。別のラインであなたべき場所コードブロック、および括弧でそれらを囲む -

あなたは、C#でのスタイルの観点から、第三cleanLine = cleanLine.Replace("\r","");

を使用する必要があります。これは有効ではない構文ですが、読みやすさが低下します。

最後に、あなたが今やっているように、文字列の置換をする必要はなく、単にテキストファイルを開いてReadLineを呼び出すことができます。

+0

もちろん、私はcleanLine = cleanLine.Replace();を使用していたはずです。そして私はそれが私の主な問題であり、コードが動作しなくなったことも知っています。私はずっとずっと寝ていないので、それを見逃してしまった。建設的なコメントをありがとうWill =] +1 – deadlock

6

あなたが呼び出す場合:

string[] lines = File.ReadAllLines(location); 

それはあなたのために、各ラインから '\ rを' とは '\ n' の両方を削除します。

+0

Arghhh、ちょうどあまりにも言った:) +1 – leppie

+1

それは行く最善の方法のように見えます。 – deadlock

1

他の人も示唆しているとおり、File.ReadAllLines()を代わりに使用してください。それは\nと同様に\r\nに分割されます。あなたのサンプルは、次のように書き直すことができます:

SettingsManager.proxies.Clear(); 
foreach (string line in File.ReadAllLines(location)) 
    SettingsManager.proxies.Add(line); 
+0

なぜ、重複した回答を追加するのですか? – leppie

+0

これは重複した回答ではなく、ReadAllLines()を使用する方がよいと説明しており、簡潔なコードサンプルが含まれています。 –

+0

もう1つの答えでもそのことが説明されています。サンプルコードは冗長です。 'SettingsManager.proxies = new List (File.ReadAllLines(location))'が良いでしょう。プロパティが読み取り専用の場合は 'AddRange'を返します。 – leppie

関連する問題