2011-08-04 18 views
5

ストリームとしてファイルを読み込むIm Stream fin = File.OpenRead(FilePath); ファイルストリームからすべてのキャリッジリターンを見つけて削除する方法はありますか?ストリームから余分なキャリッジリターンを削除する

編集:目標は単一のキャリッジリターン\rを取り除き、キャリッジリターンのまま改行文字"\r\n"をそのまま残しておきます。

サンプルファイル:

The key backed up in this file is:\r 
\r\n 
pub 2048R/65079BB4 2011-08-01\r 
\r\n 
     Key fingerprint = 2342334234\r 
\r\n 
uid     test\r 
\r\n 
sub 2048R/0B917D1C 2011-08-01\r 

そして結果は次のようになります。

The key backed up in this file is: 
\r\n 
pub 2048R/65079BB4 2011-08-01 
\r\n 
     Key fingerprint = 2342334234 
\r\n 
uid     test 
\r\n 
sub 2048R/0B917D1C 2011-08-01 

はEDIT2:最終的な解決策このようなルックスを働いているもの:

static private Stream RemoveExtraCarriageReturns(Stream streamIn) 
    { 
     StreamReader reader = new StreamReader(streamIn); 
     string key = reader.ReadToEnd(); 
     string final = key.Replace("\r\r", "\r"); 
     byte[] array = Encoding.ASCII.GetBytes(final); 
     MemoryStream stream = new MemoryStream(array); 
     return stream; 
    } 

私が取りますStreamStreamReaderを使用して文字列に読み込んだ後、e xtra carriage-returnを入力してStreamに書き戻します。 私のコードは大丈夫か、私は何か違うことをするべきですか?

+0

は正常に見えます。小さなファイルのための良い解決策。 –

答えて

2

あなたのサンプルテキストを見た後、次のようにあなたのシングル「R」のインスタンスを削除します:あなたはおそらくAPIの清楚ためのメソッド内でゼロに戻りストリームの位置を設定する必要がありますが、

string text = File.ReadAllText(FilePath); 

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

File.WriteAllText(FilePath + ".modified", text); 
+0

ありがとう、それは動作します! – hs2d

+1

これは問題ではないかもしれませんが、文字列 '" \ r \ r \ r "'が与えられれば、結果はまだ "" \ r \ r "'になります。あなたはあなたが交換をしたときに同じ文字列を返すまで何度もやり直す必要があります。 – aL3891

+0

@ aL3891合意しましたが、サンプルテキストからはこれは発生しませんでした。 –

0

Replace Line Breaks in a String C#

上記の答えがあります。ファイルを文字列に読み込んだ後、改行を削除することができます。

+0

彼はストリームから直接削除したいと思うが、ストリームに読み込んだら削除するほうがよいだろう。 – Jethro

+0

はい、ファイルを文字列に読み込むことは私の最後の選択です。ただストリームでそれを行う方法があるかどうかを知りたかっただけです。 – hs2d

2

方法について:

string final = string.Join("", File.ReadLines(path)); 

?これは行ごとに読み込まれ、セパレータなしで再結合されます。

関連する問題