Si necesita omitir (encabezado) líneas y / o columnas, puede usar esto para crear una matriz bidimensional:
var lines = File.ReadAllLines(path).Select(a => a.Split(';'));
var csv = (from line in lines
select (from col in line
select col).Skip(1).ToArray() // skip the first column
).Skip(2).ToArray(); // skip 2 headlines
Esto es bastante útil si necesita dar forma a los datos antes de procesarlos más adelante (suponiendo que las primeras 2 líneas consisten en el título, y la primera columna es un título de fila, que no necesita tener en la matriz porque simplemente querer considerar los datos).
Nota : puede obtener fácilmente los titulares y la primera columna utilizando el siguiente código:
var coltitle = (from line in lines
select line.Skip(1).ToArray() // skip 1st column
).Skip(1).Take(1).FirstOrDefault().ToArray(); // take the 2nd row
var rowtitle = (from line in lines select line[0] // take 1st column
).Skip(2).ToArray(); // skip 2 headlines
Este código de ejemplo supone la siguiente estructura de su *.csv
archivo:
Nota: Si necesita omitir filas vacías, lo que a veces puede ser útil, puede hacerlo insertando
where line.Any(a=>!string.IsNullOrWhiteSpace(a))
entre el from
y la select
declaración en los ejemplos de código LINQ anteriores.
";"
como separador ... esto ha hecho de CSV una imo no estándar :(