none
Reemplazar Retorno de Carro y Line Feed CrLf en un Stream RRS feed

  • Pregunta

  • hola


    Estoy leyendo un archivo texto que tiene varios CrLF(al menos 2 o mas) y deseos reemplazarlos por una lineas de guiones u otro caracter...

    lo que se necesita que cada 2 o mas CrLf se reemplacen por una linea de guiones ------- u otros caracteres

    lo que he intentado es este codigo...

     public static string ReplaceLineFeedToDelimiter(string input, string replace)
        {
            string pattern = @"\r\n";
            Regex rx = new Regex(pattern);
            if (rx.IsMatch(input))
            {
                return rx.Replace(input, replace);
            }
            else
                return "";
        }

    Donde input--> linea donde busco el /r/n y replace--> el caracter que quiero reemplazar. en una rutina donde recorro el stream...

            using (StreamWriter sWriter = new StreamWriter(MyNewFile, false, Encoding.UTF8, 1))
            {
                foreach (string line in File.ReadLines(myFile))
                {
                    sWriter.WriteLine(ReplaceLineFeedToDelimiter(line, "*"));
                }
    
            }

    Esto no lo he podido lograr no se si esta bien configurado el patron del regex... el resultado son los mismos crlf...

    • CrLf
    • CrLf
    • CrLf
    • CrLf

    y el resultado que se requiere es que esos 2 o mas CrLf se conviertan en una linea de 

    ------- o cualquier otro caracter para diferenciar o poder hacer un Split del stream en un transformación del documento

    lunes, 17 de diciembre de 2018 13:35

Respuestas

  • Esto no va a funcionar, porque estás llamando a File.ReadLines.

    Eso ya va a trocear los datos que lee por todos los sitios donde haya un salto de línea. Por tanto, dentro de las líneas que te devuelva nunca va a existir un salto de lìnea.

    Te ofrezco un par de alternativas:

    Una es usar File.ReadAllText en lugar de File.ReadLines. Eso te devuelve un único string con todo el contenido del fichero, y ahí sí que te funcionará tu rutina de reemplazo.

    Otra es usar File.ReadAllLines, y eso ya te lo trocea por los saltos de línea. Entonces unes todas las líneas usando string.Join y pasándole la cadena de reemplazo como carácer de unión al Join:

    File.WriteAllText(MyNewFile, string.Join("-----", File.ReadLAllines(myFile)));

    • Propuesto como respuesta Jorge TurradoMVP lunes, 17 de diciembre de 2018 15:01
    • Marcado como respuesta greg_dorian lunes, 17 de diciembre de 2018 19:20
    lunes, 17 de diciembre de 2018 15:00
    Moderador

Todas las respuestas

  • Esto no va a funcionar, porque estás llamando a File.ReadLines.

    Eso ya va a trocear los datos que lee por todos los sitios donde haya un salto de línea. Por tanto, dentro de las líneas que te devuelva nunca va a existir un salto de lìnea.

    Te ofrezco un par de alternativas:

    Una es usar File.ReadAllText en lugar de File.ReadLines. Eso te devuelve un único string con todo el contenido del fichero, y ahí sí que te funcionará tu rutina de reemplazo.

    Otra es usar File.ReadAllLines, y eso ya te lo trocea por los saltos de línea. Entonces unes todas las líneas usando string.Join y pasándole la cadena de reemplazo como carácer de unión al Join:

    File.WriteAllText(MyNewFile, string.Join("-----", File.ReadLAllines(myFile)));

    • Propuesto como respuesta Jorge TurradoMVP lunes, 17 de diciembre de 2018 15:01
    • Marcado como respuesta greg_dorian lunes, 17 de diciembre de 2018 19:20
    lunes, 17 de diciembre de 2018 15:00
    Moderador
  • Esto no va a funcionar, porque estás llamando a File.ReadLines.

    Eso ya va a trocear los datos que lee por todos los sitios donde haya un salto de línea. Por tanto, dentro de las líneas que te devuelva nunca va a existir un salto de lìnea.

    Te ofrezco un par de alternativas:

    Una es usar File.ReadAllText en lugar de File.ReadLines. Eso te devuelve un único string con todo el contenido del fichero, y ahí sí que te funcionará tu rutina de reemplazo.

    Otra es usar File.ReadAllLines, y eso ya te lo trocea por los saltos de línea. Entonces unes todas las líneas usando string.Join y pasándole la cadena de reemplazo como carácer de unión al Join:

    File.WriteAllText(MyNewFile, string.Join("-----", File.ReadLAllines(myFile)));

    Hola Gracias Alberto

    seguí la segunda la de File.ReadAllLines ya estaba imaginándome manejar buffers y cursores :D :D :D ;)

    lunes, 17 de diciembre de 2018 19:22