2011-08-04 54 views
5

Im leyendo el archivo como una secuencia: Stream fin = File.OpenRead(FilePath); ¿Hay alguna manera de cómo podría encontrar y eliminar todos los retornos de carro de esa secuencia de archivos?C# eliminar retornos de carro adicionales de Stream

EDITAR: El objetivo es eliminar un solo retorno de carro \r y dejar el carro devuelve lo que está con la nueva línea "\r\n" intacta.

archivo Ejemplo:

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 

Y el resultado debe ser similar:

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: La solución final lo que se ve trabajando de esta manera:

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

tomo en el Stream usa StreamReader para leerlo en una cadena, luego elimina la e xtra carriage-return y escríbalo nuevamente a Stream. ¿Mi código se ve bien o debería hacer algo diferente?

+0

se ve bien, aunque probablemente debería establecer la posición de la corriente de retorno a cero en el método para la limpieza de la API. Buena solución para archivos pequeños. –

Respuesta

2

Después de buscar en el texto de muestra, lo siguiente será eliminar las instancias individuales 'r':

string text = File.ReadAllText(FilePath); 

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

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

¡Gracias, funciona! – hs2d

+1

Esto podría no ser un problema, pero si se le da la cadena '" \ r \ r \ r "', el resultado seguiría siendo '" \ r \ r "'. Tendría que hacer el reemplazo una y otra vez hasta que recupere la misma cuerda mientras realizaba el reemplazo. – aL3891

+0

@ aL3891 De acuerdo, pero del texto de muestra esto no ocurriría. –

0

Replace Line Breaks in a String C#

Lo anterior tiene la respuesta. Puede leer el archivo en una cadena y luego eliminar los saltos de línea.

+0

Creo que quiere eliminarlos directamente de la transmisión, pero sí sería mejor eliminarlos una vez leídos en una transmisión. – Jethro

+0

Sí, leer mi archivo en una cadena es mi última opción. Solo quería saber si hay una forma de hacerlo bien en la transmisión. – hs2d

2

¿Qué tal:

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

? Esto lee línea por línea, luego se vuelve a combinar sin ningún separador.

Cuestiones relacionadas