/// <summary> /// Parses a Csv file using the supplied model. File and Class must match exactly /// </summary> /// <typeparam name="TDataRow">model type for csv file row</typeparam> /// <param name="reader">text reader</param> /// <param name="cfg">parser configuration</param> /// <param name="logger">injected logger</param> /// <returns>data rows</returns> private static IEnumerable <TDataRow> ParseFle <TDataRow>(TextReader reader, ParserConfiguration cfg, ILogger logger) where TDataRow : new() { var c = new global::CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture) { BufferSize = cfg.BufferSize, HasHeaderRecord = cfg.HasHeaders, }; using var csv = new CsvReader(reader, c); ////csv.Read(); ////csv.ReadHeader(); ////csv.ValidateHeader<TDataRow>(); ////csv.Read(); var records = csv.GetRecords <TDataRow>(); logger.Info($"rows parsed::{records.Count()}"); return(records); }
public List <T> GetRecords <T>(MemoryStream stream) where T : ICsvReadable, new() { var activate = ActivatorFactory.Create <T>(_activationMethod); var allRecords = new List <T>(); using (var reader = new StreamReader(stream)) { var config = new global::CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture) { CacheFields = true, }; var csvParser = new global::CsvHelper.CsvParser(reader, config); while (csvParser.Read()) { var record = activate(); record.Read(i => csvParser[i]); allRecords.Add(record); } } return(allRecords); }