/// <summary> /// /// </summary> /// <param name="filePath"></param> public void ProccessTimeSeriesData(string filePath, Action <DailyData, long> updateAction) { if (TimeSeries == null) { TimeSeries = new List <CountryRegionTimeSeries>(); } using var reader = new StreamReader(filePath); using var csv = new CsvReader(reader, CultureInfo.InvariantCulture); csv.Read(); csv.ReadHeader(); var records = csv.GetRecords <dynamic>(); foreach (var record in records) { var dict = (IDictionary <string, object>)record; var countryRegion = FindCountry((string)dict["Country/Region"]); var provinceState = (string)dict["Province/State"]; var noDateFields = new string[] { "Province/State", "Country/Region", "Lat", "Long" }; var timeSeriesItem = FindCountryTimeSeries(countryRegion.Name, provinceState); if (timeSeriesItem == null) { timeSeriesItem = new CountryRegionTimeSeries { CountryRegion = countryRegion, ProvinceState = provinceState }; TimeSeries.Add(timeSeriesItem); } foreach (var item in dict) { if (!noDateFields.Contains(item.Key)) { var date = Convert.ToDateTime(item.Key, dateFormat); var value = Convert.ToInt64(item.Value, numberFormat); var dailyData = timeSeriesItem.TimeSeries.Where(t => t.Date == date).FirstOrDefault(); if (dailyData == null) { dailyData = new DailyData() { Date = Convert.ToDateTime(item.Key, dateFormat), }; timeSeriesItem.TimeSeries.Add(dailyData); } updateAction?.Invoke(dailyData, value); } } } }
/// <summary> /// /// </summary> /// <param name="data"></param> /// <param name="value"></param> public void UpdateDeaths(DailyData data, long value) => data.Deaths = value;
/// <summary> /// /// </summary> /// <param name="data"></param> /// <param name="value"></param> public void UpdateRecovered(DailyData data, long value) => data.Recovered = value;
/// <summary> /// /// </summary> /// <param name="data"></param> /// <param name="value"></param> public void UpdateConfirmed(DailyData data, long value) => data.Confirmed = value;