105 votos

Leyendo el archivo CSV y almacenando los valores en una matriz

Estoy tratando de leer un *.csv -Archivo.

El *.csv -el archivo consiste en dos columnas separadas por punto y coma (" ; ").

Soy capaz de leer el *.csv -archivo usando StreamReader y capaz de separar cada línea usando el Split() función. Quiero almacenar cada columna en una matriz separada y luego mostrarla.

¿Es posible hacer eso?

149voto

Michael M. Puntos 868

Puedes hacerlo así:

using System.IO;

static void Main(string[] args)
{
    var reader = new StreamReader(File.OpenRead(@"C:\test.csv"));
    List<string> listA = new List<string>();
    List<string> listB = new List<string>();
    while (!reader.EndOfStream)
    {
        var line = reader.ReadLine();
        var values = line.Split(';');

        listA.Add(values[0]);
        listB.Add(values[1]);
    }
}

52voto

as-cii Puntos 7028

A la manera de LINQ:

var lines = File.ReadAllLines("test.txt").Select(a => a.Split(';'));
var csv = from line in lines
          select (from piece in line
                  select piece);

^^Equivocado - Editado por Nick

Parece que el contestador original estaba tratando de poblar csv con una matriz de dos dimensiones, una matriz que contiene matrices. Cada elemento de la primera matriz contiene una matriz que representa ese número de línea, y cada elemento de la matriz anidada contiene los datos de esa columna específica.

var csv = from line in lines
          select (line.Split(',')).ToArray();

26voto

Paul Puntos 8943

Normalmente uso esto parser de codeproject ya que hay un montón de fugas de personajes y similares que maneja para mí.

17voto

tomsv Puntos 2565

Aquí está mi variación de la respuesta más votada:

    var contents = File.ReadAllText(filename).Split('\n');
    var csv = from line in contents
              select line.Split(',').ToArray();

13voto

digEmAll Puntos 24336

No puedes crear un Array inmediatamente porque necesitas saber el número de filas desde el principio (y esto requeriría leer el archivo csv dos veces)

Puedes almacenar los valores en dos List<T> y luego usarlos o convertirlos en una matriz usando List<T>.ToArray()

Un ejemplo muy simple:

var column1 = new List<string>();
var column2 = new List<string>();
using (var rd = new StreamReader("filename.csv"))
{
    while (!rd.EndOfStream)
    {
        var splits = rd.ReadLine().Split(';');
        column1.Add(splits[0]);
        column2.Add(splits[1]);
    }
}
// print column1
Console.WriteLine("Column 1:");
foreach (var element in column1)
    Console.WriteLine(element);

// print column2
Console.WriteLine("Column 2:");
foreach (var element in column2)
    Console.WriteLine(element);

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X