Exemplo n.º 1
0
        private List <TradeRecord> ParseInner(Stream stream, IFileReader reader, IDbRecordValidation validation, CultureInfo culture, ILogger logger)
        {
            Thread.CurrentThread.CurrentCulture = culture;
            List <string> lines = reader.ReadFile(stream);

            return(GetRecords(lines, validation, logger));
        }
Exemplo n.º 2
0
        private List <TradeRecord> GetRecords(List <string> lines, IDbRecordValidation validation, ILogger logger)
        {
            List <TradeRecord> trades = new List <TradeRecord>();
            int lineCount             = 1;

            foreach (string line in lines)
            {
                string[] fields = line.Split(new char[] { ',' });

                if (validation.IsValid(fields, lineCount))
                {
                    if (!int.TryParse(fields[1], out var tradeAmount))
                    {
                        string message = string.Format("Trade amount on line {0} not a valid integer: '{1}'", lineCount, fields[1]);
                        logger.Log(message);
                    }

                    if (!decimal.TryParse(fields[2], out var tradePrice))
                    {
                        string message = string.Format("Trade price on line {0} not a valid decimal: '{1}'", lineCount, fields[2]);
                        logger.Log(message);
                    }

                    var sourceCurrencyCode      = fields[0].Substring(0, 3);
                    var destinationCurrencyCode = fields[0].Substring(3, 3);

                    trades.Add(GenerateNewTradeRecord(sourceCurrencyCode, destinationCurrencyCode, tradeAmount, tradePrice));
                }

                lineCount++;
            }

            return(trades);
        }
Exemplo n.º 3
0
        public List <TradeRecord> Parse(Stream stream, IFileReader reader, IDbRecordValidation validation, ILogger logger)
        {
            if (stream == null)
            {
                throw new ArgumentNullException($"{nameof(stream)} can't be equal to null!");
            }

            if (reader == null)
            {
                throw new ArgumentNullException($"{nameof(reader)} can't be equal to null!");
            }

            return(ParseInner(stream, reader, validation, DEFAULT_CULTURE, logger));
        }