none
¿Cómo puedo leer los datos de un CSV en una matriz y y que me marque su posición de cada dato en C# ? RRS feed

  • Pregunta

  • Buen día amigos quiero leer los datos de un archivo CSV  mediante una matriz y que estos me los represente en dos columnas de la siguiente forma: 

        Datos           Posición 

    {Nombre}            {1}

    {Apellido}            {2}

    {Fecha}               {3}

    El objetivo es representar de esta manera un archivo CSV, si alguien pudiera ayudarme se lo agradecería mucho!

    Mi código es el siguiente 

    class Program
    {
        static void Main(string[] args)
        {
            var reader = new StreamReader(File.OpenRead(@"D:\Ruta\Archivo.csv"));
    
    
            List<string> ColumnaA = new List<string>();
           
            Console.WriteLine("Datos");
            Console.WriteLine();
    
            while (!reader.EndOfStream)
            {
                var line = reader.ReadLine();
                var values = line.Split(';');
    
                ColumnaA.Add(values[0]);
                                   
            }
    
    
            foreach (var coloumn1 in ColumnaA)
            {
                Console.WriteLine(coloumn1);
            }
            Console.ReadKey();
        }
      }
    }
    
    
    

     

    viernes, 20 de noviembre de 2020 4:59

Respuestas

  • Hola Fer

    Tuve que averiguar qué es CSV (comma separated values) porque no sabía. Retoqué un poco tu código para que sea más fácil y práctico. Creé un archivo CSV (en este caso separados los datos por ; en lugar de , como vos lo hiciste) para probar, pero funciona igual para cualquier cantidad de datos por linea, lo que no previene es si te pasas del margen derecho, en ese caso lo muestra en 2 lineas o más.


    using System;
    using System.IO;
    
    namespace ConsoleAppReadCSV
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Leer todas las lineas del archivo y colocarlas en el array lines
                string[] lines = File.ReadAllLines(@"C:\Users\Pablo Marty\Desktop\archivo.csv");
    
                // Crear matriz de 2D para los datos de todas las lineas
                string[][] matrix = new string[lines.Length][];
    
                Console.WriteLine("Datos");
                Console.WriteLine();
    
                int a = 0;
                foreach (var line in lines)
                {
                    var values = line.Split(';');
                    // Asignar a la linea de índice a de la matriz los datos
                    matrix[a++] = values;
                }
                // Aquí ya está la matriz de 2D cargada con los datos
    
                // Declarar los x de los datos en consola
                // Cargar tantos puntos como datos hay por linea, para hacerlo más genérico
                int[] points = new int[matrix[0].Length]; // esto estaba mal, antes puse lines en lugar de matrix
                for (a = 0; a < points.Length; a++)       // matrix[0].Length obtiene la cantidad de datos por linea
                    points[a] = 4 + 14 * a; // Cargar los puntos desde el x=4 con distancia de 14
    
                // Obtener la y actual de la consola
                int y = Console.CursorTop;
                // Ahora mostrar la tabla en pantalla, alineados los datos por los 'points'
                foreach (var line in matrix) // line es string[] y matrix es string[][]
                {
                    a = 0;
                    foreach (var dato in line) // dato es string
                    {
                        // Posicionar x,y para que se muestre alineado
                        Console.SetCursorPosition(points[a], y);
                        Console.Write(dato);
                        a++;
                    }
                    y++;
                }
                Console.ReadKey();
            }
        }
    }


    Saludos

    Pablo

    EDITO: para corregir un error que no habría sido visible ni producido errores en tiempo de ejecución. El código supone que hay el mismo número de datos (separados por ;) en todas las lineas del .csv.

    viernes, 20 de noviembre de 2020 16:29

Todas las respuestas

  • Hola Fer

    Tuve que averiguar qué es CSV (comma separated values) porque no sabía. Retoqué un poco tu código para que sea más fácil y práctico. Creé un archivo CSV (en este caso separados los datos por ; en lugar de , como vos lo hiciste) para probar, pero funciona igual para cualquier cantidad de datos por linea, lo que no previene es si te pasas del margen derecho, en ese caso lo muestra en 2 lineas o más.


    using System;
    using System.IO;
    
    namespace ConsoleAppReadCSV
    {
        class Program
        {
            static void Main(string[] args)
            {
                // Leer todas las lineas del archivo y colocarlas en el array lines
                string[] lines = File.ReadAllLines(@"C:\Users\Pablo Marty\Desktop\archivo.csv");
    
                // Crear matriz de 2D para los datos de todas las lineas
                string[][] matrix = new string[lines.Length][];
    
                Console.WriteLine("Datos");
                Console.WriteLine();
    
                int a = 0;
                foreach (var line in lines)
                {
                    var values = line.Split(';');
                    // Asignar a la linea de índice a de la matriz los datos
                    matrix[a++] = values;
                }
                // Aquí ya está la matriz de 2D cargada con los datos
    
                // Declarar los x de los datos en consola
                // Cargar tantos puntos como datos hay por linea, para hacerlo más genérico
                int[] points = new int[matrix[0].Length]; // esto estaba mal, antes puse lines en lugar de matrix
                for (a = 0; a < points.Length; a++)       // matrix[0].Length obtiene la cantidad de datos por linea
                    points[a] = 4 + 14 * a; // Cargar los puntos desde el x=4 con distancia de 14
    
                // Obtener la y actual de la consola
                int y = Console.CursorTop;
                // Ahora mostrar la tabla en pantalla, alineados los datos por los 'points'
                foreach (var line in matrix) // line es string[] y matrix es string[][]
                {
                    a = 0;
                    foreach (var dato in line) // dato es string
                    {
                        // Posicionar x,y para que se muestre alineado
                        Console.SetCursorPosition(points[a], y);
                        Console.Write(dato);
                        a++;
                    }
                    y++;
                }
                Console.ReadKey();
            }
        }
    }


    Saludos

    Pablo

    EDITO: para corregir un error que no habría sido visible ni producido errores en tiempo de ejecución. El código supone que hay el mismo número de datos (separados por ;) en todas las lineas del .csv.

    viernes, 20 de noviembre de 2020 16:29
  • Hola FFer Dom,

    La respuesta propuesta te funcionó?

    Saludos

    -------------------------------------------------------------------------------

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar  MSDNFSF@microsoft.com. 

    lunes, 23 de noviembre de 2020 14:46
    Moderador
  • Muchas gracias amigo 
    lunes, 23 de noviembre de 2020 18:16