示例#1
0
        private IEnumerable <FinancialRatio> ExtractRatios(
            string stockName,
            IEnumerable <string> allLines,
            IEnumerable <string> datesString,
            FinancialRatioSectionEnum section,
            int fromLine,
            int toLine)
        {
            for (int lineNumber = fromLine; lineNumber <= toLine; lineNumber++)
            {
                // ReSharper disable once PossibleMultipleEnumeration
                var ratio = allLines.ElementAt(lineNumber);

                using (var csvParser = new TextFieldParser(new StringReader(ratio))
                {
                    Delimiters = new[] { "," }
                })
                {
                    csvParser.Delimiters = new[] { "," };
                    var fields = csvParser.ReadFields();
                    if (fields != null)
                    {
                        var ratioName = fields[0];
                        var ratioData =
                            fields.Skip(1).Select(x => !string.IsNullOrEmpty(x) ? double.Parse(x) : (double?)null).ToList();
                        // ReSharper disable once StyleCop.SA1305
                        var pChange = Enumerable.Range(0, ratioData.Count).Select(
                            i =>
                        {
                            if (i == 0)
                            {
                                return(null);
                            }

                            if (ratioData.ElementAt(i - 1) == null)
                            {
                                return(null);
                            }

                            return((ratioData.ElementAt(i) - ratioData.ElementAt(i - 1))
                                   / ratioData.ElementAt(i - 1) * 100.0);
                        });
                        var tup =
                            Enumerable.Range(0, ratioData.Count)
                            .Select(
                                i =>
                                Tuple.Create(datesString.ElementAt(i), ratioData.ElementAt(i), pChange.ElementAt(i)))
                            .ToList();

                        yield return
                            (new FinancialRatio {
                            StockName = stockName, Section = section, Name = ratioName, Data = tup
                        });
                    }
                }
            }
        }
示例#2
0
        private IEnumerable <FinancialRatio> ExtractFinancials(
            string stockName,
            IEnumerable <string> allLines,
            IEnumerable <string> datesString,
            FinancialRatioSectionEnum section)
        {
            foreach (var line in allLines)
            {
                using (var csvParser = new TextFieldParser(new StringReader(line))
                {
                    Delimiters = new[] { "," }
                })
                {
                    csvParser.Delimiters = new[] { "," };
                    var fields = csvParser.ReadFields();
                    if (fields == null || fields.Length < 2)
                    {
                        continue;
                    }

                    var quantityName = fields[0];
                    var quantityData =
                        fields.Skip(1).Select(x => !string.IsNullOrEmpty(x) ? double.Parse(x) : (double?)null).ToList();
                    // ReSharper disable once StyleCop.SA1305
                    var pChange = Enumerable.Range(0, quantityData.Count).Select(
                        i =>
                    {
                        if (i == 0)
                        {
                            return(null);
                        }

                        if (quantityData.ElementAt(i - 1) == null)
                        {
                            return(null);
                        }

                        return((quantityData.ElementAt(i) - quantityData.ElementAt(i - 1))
                               / quantityData.ElementAt(i - 1) * 100.0);
                    });
                    var tup =
                        Enumerable.Range(0, quantityData.Count)
                        .Select(
                            i =>
                            Tuple.Create(datesString.ElementAt(i), quantityData.ElementAt(i), pChange.ElementAt(i)))
                        .ToList();

                    yield return
                        (new FinancialRatio {
                        StockName = stockName, Section = section, Name = quantityName, Data = tup
                    });
                }
            }
        }
示例#3
0
        private IEnumerable <FinancialRatio> ProcessFinancials(string data, FinancialRatioSectionEnum type)
        {
            var result = new List <FinancialRatio>();

            try
            {
                var allLines  = data.Split(new[] { "\n" }, StringSplitOptions.None).ToList();
                var stockName =
                    allLines.ElementAt(0)
                    .Split(new[] { "(" }, StringSplitOptions.RemoveEmptyEntries)
                    .ElementAt(0)
                    .TrimStart();
                allLines.RemoveAt(0);

                var datesString = allLines.ElementAt(0).Split(new[] { "," }, StringSplitOptions.None).Skip(1);
                result.AddRange(this.ExtractFinancials(stockName, allLines.Skip(1), datesString, type));
            }
            catch (Exception)
            {
                // ignored
            }

            return(result);
        }