none
Verificar linea vacia en un txt o csv RRS feed

  • Pregunta

  • Hola,

    Tengo un problema que consiste en que paso los datos de un DataTable a un archivo de txt, las columnas separadas por ;
    el problema es que, el formato del archivo de txt va en que en la primera linea ( o linea 0 ) estan los nombres de las columnas,
    despues hay un salto de linea ( en la 1 ) y en la linea 2 comienzan los registros, en esa linea en blanco, se dejan unos ; y no quiero que suceda, eso mismo pasa si dejas lineas salteadas en cualquier lugar, agradeceria su ayuda.

    aqui el codigo que uso para llenar el txt

    private void dsToCsv(DataSet dsCsv, string pathCsv, char separator = ';', int ecdg = 1252)
            {
                StreamWriter SwTXT = new StreamWriter(pathCsv.Replace(".txt", ".txt"), false, Encoding.GetEncoding(ecdg));
                int iColCount = dsCsv.Tables[0].Columns.Count;
    
                // Escribiendo las Columnas del DataTable.
                for (int i = 0; i < iColCount - 1; i++)
                {
                    SwTXT.Write(dsCsv.Tables[0].Columns[i]);
                    SwTXT.Write(separator);
                }
    
                SwTXT.Write(SwTXT.NewLine);
    
                // Escribiendo todas las Filas del DataTable.
                foreach (DataRow dr in dsCsv.Tables[0].Rows)
                {
                    for (int i = 0; i < iColCount; i++)
                    {
                        if (!Convert.IsDBNull(dr[i]))
                        {
                            SwTXT.Write(dr[i].ToString());
                        }
    
                        if (i < iColCount - 1)
                        {
                            SwTXT.Write(separator);
                        }
                    }
                    SwTXT.Write(SwTXT.NewLine);
                }
    
                SwTXT.Close();
    
            }


    Ian Alexandro


    martes, 20 de septiembre de 2016 21:39

Respuestas

  • hola

    >>en la linea 2 comienzan los registros, en esa linea en blanco, se dejan unos ; y no quiero que suceda

    veo que usas

    SwTXT.Write(SwTXT.NewLine);

    pero porque mejor no probas con el

    SwTXT.WriteLine();

    asi directo

    WriteLine()

    Ademas cuando armas el archivo no se va usando el Write() eso es poco performante

    la idea es usar el StringBuilder armar el archivo con sus lineas en memoria y luego al final hacer una unica escritura final

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 21 de septiembre de 2016 3:09

Todas las respuestas

  • hola

    >>en la linea 2 comienzan los registros, en esa linea en blanco, se dejan unos ; y no quiero que suceda

    veo que usas

    SwTXT.Write(SwTXT.NewLine);

    pero porque mejor no probas con el

    SwTXT.WriteLine();

    asi directo

    WriteLine()

    Ademas cuando armas el archivo no se va usando el Write() eso es poco performante

    la idea es usar el StringBuilder armar el archivo con sus lineas en memoria y luego al final hacer una unica escritura final

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 21 de septiembre de 2016 3:09
  • es mas si vas a generar un cvs recomendaria evalues tool como ser

    CsvHelper

    son mucho mas optimas para esta tarea

    con esta vas definiendo cada campo y te olvidad del separador porqe lo agregara solo y de forma automatica, tu solo te preocupas por asignar cada dato

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina



    miércoles, 21 de septiembre de 2016 3:09