¿Cómo exportar una lista de objetos a un archivo delimitado por punto y coma?

publicado por: Anonymous

Resulta que tengo la necesidad de generar un archivo delimitado por puntos y comas desde una lista de objetos.

Esta seria mi clase:

 public class RipsUS
{
    public string TipoIdUsuario { get; set; }
    public string NumIdUsuario { get; set; }
    public string CodEntAdm { get; set; }
    public int TipoUsuario { get; set; }
    public string PrimApeUsuario { get; set; }
    public string SegApeUsuario { get; set; }
    public string PrimNomUsuario { get; set; }
    public string SegNomUsuario { get; set; }
    public int Edad { get; set; }
    public int UnidadMedidaEdad { get; set; }
    public string Sexo { get; set; }
    public string CodDepartamento { get; set; }
    public string CodMunicipio { get; set; }
    public string Zona { get; set; }

}

Creo una lista de los objetos de esta clase

List<RipsUS> listaRipsUs = new List<RipsUS>();

Ya tengo la lista con los datos cargados, pero ahora no sé cómo hacer para generar un archivo delimitado por punto y comas.

solución

Si no te molesta usar el formato estándar CSV, puedes usar librerías ya existentes para manejar la lectura y escritura de tu estructura. De esta forma te evitas problemas en situaciones donde tus valores tienen un punto y coma, etc.

Un ejemplo de una libraría sencilla que puedes probar es CsvHelper que puedes bajar por NuGet. Parece que varias personas lo usan. Eso es bueno, ya que indica que funciona bien, y probablemente ya se han corregido los defectos potenciales.

Usando tu clase RipsUS, aquí tienes un ejemplo de cómo puedes escribir a un archivo y luego leerlo correctamente, aun cuando uses caracteres como ; o ,.

Código:

public static void Main()
{
    var list = new List<RipsUS>();
    list.Add(new RipsUS { TipoIdUsuario = "zona", Edad = 56 });
    list.Add(new RipsUS { TipoIdUsuario = "ID", Edad = 100 });
    list.Add(new RipsUS { TipoIdUsuario = "ID,a;t"hola;", Edad = 100 });

    // Test de escritura al archivo.
    using (var fileWriter = new StreamWriter(File.OpenWrite(@"d:testtest.csv"), Encoding.UTF8))
    using (var csvWriter = new CsvWriter(fileWriter))
    {
        csvWriter.WriteRecords(list);
    }

    // Test de lectura del archivo.
    using (var fileReader = new StreamReader(File.OpenRead(@"d:testtest.csv"), Encoding.UTF8))
    using (var csvReader = new CsvReader(fileReader))
    {
        foreach (var record in csvReader.GetRecords<RipsUS>())
        {
            Console.WriteLine(record.TipoIdUsuario);
        }
    }
}

Resultado en la consola:

zona
ID
ID,a;t"hola;

Contenido del archivo:

TipoIdUsuario,NumIdUsuario,CodEntAdm,TipoUsuario,PrimApeUsuario,SegApeUsuario,PrimNomUsuario,SegNomUsuario,Edad,UnidadMedidaEdad,Sexo,CodDepartamento,CodMunicipio,Zona
zona,,,0,,,,,56,0,,,,
ID,,,0,,,,,100,0,,,,
"ID,a;t""hola;",,,0,,,,,100,0,,,,
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *