private void Run(string code, DateTime startDate, DateTime endDate)
 {
     Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
     //Console.WriteLine("Wait a moment, informations are being retrieved.");
     try {
         InfoBlock.Text    = "Fetching data, please wait...";
         AverageBlock.Text = StandardDeviationBlock.Text = MinBlock.Text = MaxBlock.Text = LargestDiffBlock.Text = LargestDiffDatesBlock.Text = "";
         var currencyInfoTools = new CurrencyInfoTools(
             CurrencyInfoRetriever.GetCurrencyInfoListFromFiles(code,
                                                                CurrencyInfoRetriever.GetCurrencyXMLFilesNamesListFromFile(startDate, endDate)));
         AverageBlock.Text           = $"{currencyInfoTools.Average()}";
         StandardDeviationBlock.Text = $"{currencyInfoTools.StandardDeviation()}";
         MinBlock.Text = $"{currencyInfoTools.Min().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)}";
         MaxBlock.Text = $"{currencyInfoTools.Max().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)}";
         foreach (var currPair in currencyInfoTools.LargestExchangeRatesDifferences())
         {
             LargestDiffBlock.Text       = $"{Math.Abs(currPair.First() - currPair.Last())}";
             LargestDiffDatesBlock.Text += $"{currPair.First().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)}" +
                                           $" - {currPair.Last().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)}\n";
         }
         InfoBlock.Text = "Success";
     } catch (Exception) {
         InfoBlock.Text = "Error occurred.";
     }
 }
Пример #2
0
        static void Run(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
            Console.WriteLine("Wait a moment, informations are being retrieved.");
            DateTime ConvertToDate(string s)
            {
                var parts = s.Split("-");

                if (parts.Length != 3)
                {
                    throw new ArgumentException("Incorrect date format");
                }
                try {
                    var intParts = parts.Select(el => int.Parse(el)).ToArray();
                    return(new DateTime(intParts[0], intParts[1], intParts[2]));
                } catch (Exception) {
                    throw new ArgumentException("Bad date format");
                }
            }

            if (args.Length != 3 || args[0].Length != 3)
            {
                throw new ArgumentException("Incorrect command.");
            }
            var code      = args[0].ToUpper();
            var startDate = ConvertToDate(args[1]);
            var endDate   = ConvertToDate(args[2]);

            //var startDate = new DateTime(2018, 9, 1);
            //var endDate = new DateTime(2018, 9, 20);
            //var code = "EUR";
            if (startDate > DateTime.Now)
            {
                throw new ArgumentException("Start date must be in the past.");
            }
            if (endDate < startDate)
            {
                throw new ArgumentException("End date must be later than start date.");
            }
            if (startDate.Year < 2002)
            {
                throw new ArgumentException("There is no records before 2002.");
            }
            var currencyInfoTools = new CurrencyInfoTools(
                CurrencyInfoRetriever.GetCurrencyInfoListFromFiles(code,
                                                                   CurrencyInfoRetriever.GetCurrencyXMLFilesNamesListFromFile(startDate, endDate)));

            Console.WriteLine($"Average rate: {currencyInfoTools.Average()}");
            Console.WriteLine($"Standard deviation: {currencyInfoTools.StandardDeviation()}");
            Console.WriteLine($"Minimum rate: ${currencyInfoTools.Min().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)}");
            Console.WriteLine($"Minimum rate: ${currencyInfoTools.Max().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)}");
            foreach (var currPair in currencyInfoTools.LargestExchangeRatesDifferences())
            {
                Console.WriteLine($"Largest difference: {Math.Abs(currPair.First() - currPair.Last())}" +
                                  $" ({currPair.First().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)}" +
                                  $" - {currPair.Last().ToString(CurrencyInfo.DisplayOptions.ExchangeRate, CurrencyInfo.DisplayOptions.Date)})"
                                  );
            }
        }