none
Como leo estos datos de un archivo csv RRS feed

  • Pregunta

  • Hola amigos tengo este mi código que me lee datos de un archivo CSV y todo bien lo grabo en mi bd, pero el problema es que cuando el archivo viene con caracteres especiales me da problema este es mi codigo

     string filenamee = "";

                    if (archivo != null)
                    {
                        foreach (var file in archivo)
                        {

                            var fileName = Path.GetFileName(file.FileName);

                           
                            var physicalPathT = Path.Combine(Server.MapPath("~/Archivos"), fileName);
                            filenamee = physicalPathT;
                           
                        }

                        // Read the CSV file data  
               StreamReader sr = new StreamReader(filenamee);
                       
                        DataTable dt = new DataTable();
                        DataRow row;
                        bool Aprobadas = true;

                        try
                        {
                            while (!sr.EndOfStream)
                            {
                                // buscar el encabezado

                                string line = sr.ReadLine();
                                string[] value = line.Split(',');
                                if (value[0] == "Fecha y Hora" && Aprobadas == true)
                                {
                                    foreach (string dc in value)
                                    {
                                        dt.Columns.Add(new DataColumn(dc));
                                        Aprobadas = false;
                                    }
                                } // quitar este
                                //value = sr.ReadLine().Split(',');

                                if (value[6].Trim() == "Aprobado")
                                {
                                 
                                    row = dt.NewRow();
                                    row.ItemArray = value;
                                    dt.Rows.Add(row);
                                }


                            }
                        }
                        catch (Exception ex)
                        {
                            throw new Exception(ex.Message);
                        }

    Grcias,

    jueves, 13 de octubre de 2016 17:39

Respuestas

  • cuando el archivo viene con caracteres especiales me da problema

    La solución para los caracteres especiales se aplica en esta línea:

    StreamReader sr = new StreamReader(filenamee);

    Ahí, al construir el StreamReader, se debe pasar un segundo parámetro opcional para indicar la codificación en la que viene el archivo. Si no indicas nada, presume que es UTF8, y claro, si el archivo en realidad no es UTF8 pues te salen mal todos esos caracteres. Por ejemplo, si el archivo te lo envían codificado con el juego ANSI de Windows, que en la versión española de Windows es el juego 1252, pues entonces tendrías que abrirlo así:

    StreamReader sr = new StreamReader(filenamee, System.Text.Encoding.GetEncoding(1252));

    Y similarmente, si es otra codificación, tienes que averiguar qué tipo de codificación están usando para grabar el archivo e indicársela al StreamReader.

    jueves, 13 de octubre de 2016 18:26
    Moderador

Todas las respuestas

  • cuando el archivo viene con caracteres especiales me da problema

    La solución para los caracteres especiales se aplica en esta línea:

    StreamReader sr = new StreamReader(filenamee);

    Ahí, al construir el StreamReader, se debe pasar un segundo parámetro opcional para indicar la codificación en la que viene el archivo. Si no indicas nada, presume que es UTF8, y claro, si el archivo en realidad no es UTF8 pues te salen mal todos esos caracteres. Por ejemplo, si el archivo te lo envían codificado con el juego ANSI de Windows, que en la versión española de Windows es el juego 1252, pues entonces tendrías que abrirlo así:

    StreamReader sr = new StreamReader(filenamee, System.Text.Encoding.GetEncoding(1252));

    Y similarmente, si es otra codificación, tienes que averiguar qué tipo de codificación están usando para grabar el archivo e indicársela al StreamReader.

    jueves, 13 de octubre de 2016 18:26
    Moderador
  • hola

    no process un csv de esa forma es anticuada, usa librerias como ser

    CsvHelper

    con esto mapeas los datos del archivo a unc lase que definas, no uses dataset

    Nota: esta libreria puede agregarla mediante nuget

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 14 de octubre de 2016 3:23