示例#1
0
        /// <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);
        }
示例#2
0
        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);
        }