Esempio n. 1
0
        private bool FilterDataBySearchModelParameters(CovidDTO covidData, SearchModelParameters searchModelParameters)
        {
            var valid = true;

            if (searchModelParameters.FromDate.HasValue)
            {
                valid = valid && covidData.Date >= searchModelParameters.FromDate;
            }

            if (searchModelParameters.ToDate.HasValue)
            {
                valid = valid && covidData.Date <= searchModelParameters.ToDate;
            }

            if (searchModelParameters.ConfirmedMin.HasValue)
            {
                valid = valid && covidData.Confirmed >= searchModelParameters.ConfirmedMin;
            }

            if (searchModelParameters.ConfirmedMax.HasValue)
            {
                valid = valid && covidData.Confirmed <= searchModelParameters.ConfirmedMax;
            }

            return(valid);
        }
        public BlockingCollection <string> ReadFilesWriteToFile(string folder, string fileNameWC, string toFile)
        {
            var matchesCollection = new BlockingCollection <string>();

            var files = Directory.GetFiles(folder, fileNameWC,
                                           SearchOption.TopDirectoryOnly);

            Console.WriteLine("Reading Folder: " + folder);

            var readTask = Task.Run(() =>
            {
                using (var writer = new StreamWriter(toFile))
                {
                    //CSV Header
                    writer.WriteLine("date,countryCode,total_cases");
                    DateTime?currentHour = null;
                    Dictionary <DateTime, string[]> hours = new Dictionary <DateTime, string[]>();
                    try
                    {
                        foreach (var file in files)
                        {
                            string line2    = "";
                            string[] lines2 = null;
                            try
                            {
                                using (var reader = new StreamReader(file))
                                {
                                    string line;
                                    bool first = true;
                                    while ((line = reader.ReadLine()) != null)
                                    {
                                        if (first)
                                        {
                                            first = false; continue;
                                        }
                                        line2 = line;

                                        string[] lines = line.Split(',');
                                        lines2         = lines;
                                        if (lines[0].Equals(""))
                                        {
                                            continue;
                                        }

                                        //Checks
                                        CovidDTO dto = new CovidDTO()
                                        {
                                            date = DateTime.ParseExact(lines[2], "yyyy-MM-dd", CultureInfo.InvariantCulture), iso_code = lines[0], total_cases = long.Parse(lines[3])
                                        };
                                        if (dto.total_cases == 0)
                                        {
                                            continue;
                                        }
                                        var ctn = CountiesLookup(dto.iso_code);
                                        if (ctn == null)
                                        {
                                            continue;
                                        }

                                        var wholeHour = dto.date.Date;
                                        if (hours.ContainsKey(wholeHour))
                                        {
                                            hours.TryGetValue(wholeHour, out string[] dataFromHour);

                                            if (dataFromHour.ToList().Contains(ctn.country_code))
                                            {
                                                continue;
                                            }
                                            else
                                            {
                                                var newips = dataFromHour.Append(ctn.country_code + "," + dto.total_cases);
                                                hours.Remove(wholeHour);
                                                hours.Add(wholeHour, newips.ToArray());
                                            }
                                        }
                                        else
                                        {
                                            if (currentHour != null)
                                            {
                                                var c_hour = currentHour.Value;
                                                hours.TryGetValue(c_hour, out string[] values);
                                                foreach (var value in values)
                                                {
                                                    writer.WriteLine(c_hour.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm" /*:ss"*/) + "," + value);
                                                }
                                            }

                                            currentHour = wholeHour;
                                            hours.Add(wholeHour, new string[] { ctn.country_code + "," + dto.total_cases });
                                        }
                                    }
                                }
                            }
                            catch (DirectoryNotFoundException e)
                            {
                                Console.WriteLine(e.StackTrace);
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine(line2);
                                Console.WriteLine(e.StackTrace);
                            }
                        }
                    }

                    finally
                    {
                        matchesCollection.CompleteAdding();
                    }
                }
            });

            Task.WaitAll(readTask);

            return(matchesCollection);
        }