Здесь решение перечисляет, отслеживает и показывает значение вашей динамики CSV.
Чтобы прочитать и найти столбец, вам нужно немного информации: Разделитель, кодировка, если файл имеет заголовок.Без этого невозможно достичь этого.В следующем примере я использую значение по умолчанию для заголовка и кодировки.
Здесь идея заключается в обработке конвертирования CSV в List<Dictionary<string, object>>
.У using
нет возможности освободить StreamReader
как можно скорее.
List<IDictionary<string, object>> dataRecords ;
using (TextReader reader = new StreamReader(path))
using (var csvReader = new CsvReader(reader))
{
csvReader.Configuration.Delimiter = ";";
dataRecords = csvReader.GetRecords<dynamic>()
.Select(x => (IDictionary<string, object>)x)
.ToList();
}
foreach (var record in dataRecords)
{
// Print number of columns, and columns collection.
Console.WriteLine($"-> {record.Count} Columns {{{string.Join(", ", record.Keys)}}}");
foreach (var property in record.Keys)
{
Console.WriteLine(String.Format("\t{0} : {1}", property, record[property]));
}
}
Чтобы избежать возможных проблем с производительностью, вы можете использовать словарь, например:
.Select(x => new Dictionary<string, object>((IDictionary<string, object>)x))
Результат:
-> 43 Columns {Method, Job, AnalyzeLaunchVariance,...}
Method : DiffOriginalNoAny
Job : Default
AnalyzeLaunchVariance : False
-> 43 Columns {Method, Job, AnalyzeLaunchVariance,...}
Method : DiffOriginal
Job : Default
AnalyzeLaunchVariance : False