2011-08-04 13 views
5

Dosyayı akış olarak okuyabiliyorum: Stream fin = File.OpenRead(FilePath); Tüm dosya dönüşlerini bu dosya akışından nasıl bulabilir ve kaldırabilirim?C# Aktarım yerine ekstra satırbaşı getirileri kaldır

DÜZENLEME: Amaç, \r numaralı tek satırlık dönüşleri kaldırmak ve satırsonu, "\r\n" numaralı yeni satırda olanları geri döndürmek üzere bırakmaktır.

Örnek dosyası:

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:

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 

Ve sonuç gibi görünmelidir gibi görünür, neyin işe yaradığını nihai çözüm:

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; 
    } 

ben almak Stream, bir dizeye okumak için StreamReader kullanın, sonra e xtra satırına geri dönün ve bir Stream'a yazın. Kodum düzgün görünüyor mu yoksa farklı bir şey mi yapmalıyım?

+0

iyi görünüyor. Küçük dosyalar için iyi bir çözüm. –

cevap

2

örnek metninizi baktıktan sonra şu senin tek bir 'r' örneklerini kaldırır: muhtemelen API temizlik için yönteme içinde sıfıra dönüş akışının Konumunu belirlesin rağmen

string text = File.ReadAllText(FilePath); 

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

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

Teşekkürler, işe yarıyor! – hs2d

+1

Bu bir sorun olmayabilir, ancak "" r \ r \ r "dizesi verilirse sonuç yine de" \ r \ r "' olur. Değiştirmeyi yaptığınız gibi aynı dizeyi elde edene kadar değiştirmeyi tekrar tekrar yapmanız gerekir. – aL3891

+0

@ aL3891 Kabul edildi, ancak örnek metinden bu oluşmayacaktı. –

0

Replace Line Breaks in a String C#

yukarıdaki cevabı vardır. Dosyada bir dizgeyi okuyabilir ve ardından satır sonlarını kaldırabilirsiniz.

+0

Sanırım onları doğrudan akıştan kaldırmak istiyor, ancak Evet, bir akışa okuduktan sonra bunları kaldırmak daha iyi olurdu. – Jethro

+0

Evet, bir dizeye dosya okumak son seçeneğim. Sadece akışta doğru bir şekilde yapmanın bir yolu olup olmadığını bilmek istedim. – hs2d

2

ne dersiniz:

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

? Bu satır-satır okur, sonra herhangi bir ayırıcı olmadan yeniden birleştirir.