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); }