Если вам нужно пропустить (head-) строки и / или столбцы, вы можете использовать это для создания двумерного массива:
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
Это очень полезно, если вам необходимо сформировать данные перед дальнейшей обработкой (при условии, что первые 2 строки состоят из заголовка, а первый столбец - заголовок строки, который вам не нужен в массиве, потому что вы просто хочу рассмотреть данные).
NB. Вы можете легко получить заголовки и первый столбец, используя следующий код:
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
Этот пример кода предполагает следующую структуру вашего *.csv
файла:
Примечание: если вам нужно пропустить пустые строки - что иногда удобно, вы можете сделать это, вставив
where line.Any(a=>!string.IsNullOrWhiteSpace(a))
между from
и в select
заявлении в LINQ примеры кода выше.
";"
качестве разделителя ... это делает CSV нестандартным imo :(