public List <ReadUserModel> Parse(string filePath, FilesImportStatistic importStatistic)
        {
            using (var csv = new CsvReader(new StreamReader(filePath), _configuration))
            {
                csv.Context.RegisterClassMap(_map);

                var users = new List <ReadUserModel>();
                csv.Read();
                csv.ReadHeader();

                csv.ValidateHeader(typeof(UserFileModel));

                while (csv.Read())
                {
                    string currentCsvRow = csv.Context.Parser.RawRecord;
                    try
                    {
                        UserFileModel user = csv.GetRecord <UserFileModel>();
                        users.Add(new ReadUserModel(user, currentCsvRow));

                        importStatistic.TotalCount++;
                    }
                    catch (Exception ex)
                    {
                        string message = $"Can't parse user. Line: '{currentCsvRow}.' {ex.Message}";
                        importStatistic.Errors.Add(message);
                        //LogHolder.MainLog.Error(ex, message);
                    }
                }

                return(users);
            }
        }
Пример #2
0
        static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                         .AddJsonFile($"appsettings.json", optional: false, reloadOnChange: true)
                         .Build();

            var options = config.GetSection("ParcerOptions").Get <ParcerOptions>();

            string filePath       = "DevTestFakeData.csv";
            var    fileImportStat = new FilesImportStatistic(filePath);

            var parser = new CsvUsersParser(options.ColumnMaps);
            var users  = parser.Parse(filePath, fileImportStat);

            PrintJson(users);
            PrintJson(fileImportStat);
        }