Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using CsvHelper;
- using CsvHelper.Configuration;
- using CsvHelper.Configuration.Attributes;
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace ConsoleApp1
- {
- public class Program
- {
- private readonly string[] SOURCE_FILES = new string[]
- {
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\deces-2018.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\deces-2019.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\deces-2020-m01.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M02.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M03.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M04.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M05.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M06.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M07.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M08.csv"),
- Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\Deces_2020_M09.csv"),
- };
- private readonly string DESTINATION_FILE = Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads\deaths\output.csv");
- public static async Task Main(string[] args)
- {
- Console.WriteLine("Starting");
- try
- {
- var program = new Program();
- await program.Run();
- }
- catch (Exception ex)
- {
- Console.WriteLine("ERROR");
- Console.WriteLine(ex.ToString());
- }
- Console.WriteLine("Stopping");
- }
- public Task Run()
- {
- var csvConfig = new CsvConfiguration(CultureInfo.InvariantCulture)
- {
- Delimiter = ";",
- HasHeaderRecord = true
- };
- // Read input data
- var records = new List<InputEntry>();
- foreach (string sourceFile in SOURCE_FILES)
- {
- using var reader = new StreamReader(sourceFile);
- using var csvReader = new CsvReader(reader, csvConfig);
- IEnumerable<InputEntry> entries = csvReader.GetRecords<InputEntry>();
- records.AddRange(entries);
- }
- // Compute stats
- var stats = new Dictionary<string, Dictionary<int, int>>();
- foreach (InputEntry record in records)
- {
- Match match = Regex.Match(record.DeathDate, @"(20\d\d)(\d\d)(\d\d)");
- if (match.Success)
- {
- int year = int.Parse(match.Groups[1].Value);
- int month = int.Parse(match.Groups[2].Value);
- int day = int.Parse(match.Groups[3].Value);
- string date = $"{month:00}-{day:00}";
- if (!stats.ContainsKey(date))
- {
- stats[date] = new Dictionary<int, int>();
- }
- Dictionary<int, int> stat = stats[date];
- if (!stat.ContainsKey(year))
- {
- stat[year] = 1;
- }
- else
- {
- stat[year]++;
- }
- }
- }
- // Write output data
- var outEntries = new List<OutputEntry>();
- foreach (KeyValuePair<string, Dictionary<int, int>> stat in stats.OrderBy(x => x.Key))
- {
- var outEntry = new OutputEntry()
- {
- Day = stat.Key,
- Year2018 = stat.Value.GetValueOrDefault(2018, 0),
- Year2019 = stat.Value.GetValueOrDefault(2019, 0),
- Year2020 = stat.Value.GetValueOrDefault(2020, 0)
- };
- outEntries.Add(outEntry);
- }
- using var writer = new StreamWriter(DESTINATION_FILE, append: false, encoding: Encoding.UTF8);
- using var csvWriter = new CsvWriter(writer, csvConfig);
- csvWriter.WriteRecords(outEntries);
- return Task.CompletedTask;
- }
- }
- public class InputEntry
- {
- [Name("nomprenom")]
- public string Name { get; set; }
- [Name("sexe")]
- public string Gender { get; set; }
- [Name("datenaiss")]
- public string BirthDate { get; set; }
- [Name("lieunaiss")]
- public string BirthPlace { get; set; }
- [Name("commnaiss")]
- public string BirthCity { get; set; }
- [Name("paysnaiss")]
- public string BirthCountry { get; set; }
- [Name("datedeces")]
- public string DeathDate { get; set; }
- [Name("lieudeces")]
- public string DeathPlace { get; set; }
- [Name("actedeces")]
- public string DeathCertificate { get; set; }
- }
- public class OutputEntry
- {
- [Name("day")]
- public string Day { get; set; }
- [Name("2018")]
- public int Year2018 { get; set; }
- [Name("2019")]
- public int Year2019 { get; set; }
- [Name("2020")]
- public int Year2020 { get; set; }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement