示例#1
0
        public override void BeforeTableExecute(FormatterTable.FormatterTableHelper helper)
        {
            var i = 0;

            //https://stackoverflow.com/questions/2245442/c-sharp-split-a-string-by-another-string
            FormatString = FormatString
                           .Split(new string[] { VariableString }, StringSplitOptions.None)
                           .Aggregate((x, y) => string.Format("{0}{{{1}}}{2}", x, i++, y))
                           //because string.format escape word is {{ }}
                           .Replace("\\{", "{{").Replace("\\}", "}}");

            //TODO don't copy
            Children.ForEach(x => x.BeforeTableExecute(helper));
        }
        public override double Add(string stringNumberInput)
        {
            if (string.IsNullOrEmpty(stringNumberInput))
            {
                return(0);
            }

            stringNumberInput = PrepInputString(stringNumberInput);

            NumberString = stringNumberInput;
            int splitter;

            if (stringNumberInput.StartsWith(CustomDelimiterIdentifier))
            {
                splitter = stringNumberInput.IndexOf("\n", StringComparison.Ordinal);
                if (splitter == 3)
                {
                    NumberString = stringNumberInput.Substring(4);
                    FormatString = stringNumberInput.Substring(2, 1);
                    StringNumberDelimiters.Add(FormatString);
                }
                else
                {
                    splitter = stringNumberInput.IndexOf("]\n", StringComparison.Ordinal);
                    if (splitter == -1)
                    {
                        NumberString = stringNumberInput;
                    }
                    else
                    {
                        NumberString = stringNumberInput.Substring(splitter + 2);
                        FormatString = stringNumberInput.Substring(3, splitter - 3);
                        var additionalDeliminators = FormatString.Split(FormatDelimiter.ToArray(), StringSplitOptions.RemoveEmptyEntries);

                        if (additionalDeliminators.Length > 1)
                        {
                            throw new Exception("Too many custom delimiters!");
                        }

                        StringNumberDelimiters.AddRange(additionalDeliminators);
                    }
                }
            }
            else
            {
                NumberString = stringNumberInput;
            }


            ValueList = NumberString.Split(StringNumberDelimiters.ToArray(), StringSplitOptions.None).ToList();

            NumberList = (from x in ValueList select GetDouble(x)).ToList();

            var negativeNumberList = (from x in NumberList where x < 0 select x).ToList();

            if (negativeNumberList.Any())
            {
                throw new NegativeNumberException(negativeNumberList);
            }

            NumberList = NumberList.Where(x => IsLessThanOrEqualTo(1000, x)).ToList();

            Result = NumberList.Sum();

            Debug.WriteLine(NumberString);
            Debug.WriteLine(GetResultFormula("+"));
            Debug.WriteLine(Result);

            return(Result);
        }