public Complex Calculate(string equation, string variablestring) { equation = DeCleanUp(equation); if (variablestring.Length > 0) { foreach ( var split in variablestring.Split(';') .Select(varstring => varstring.Split('=')) .Where(split => split.Length != 1 || split[0].Trim().Length != 0)) { if (split.Length != 2) throw new ParseException(variablestring, 0, "La liste doit être séparée par des points-virgules, ex. 'x=10; y=12'"); var varname = split[0].Trim(); var vareq = split[1].Trim(); var v = new Term(); v.Parse(vareq); m_term.SetVar(varname, v.Value); } } m_term.Parse(equation); return m_term.Value; }
public Function(string src, int start, EquationElement root) { m_startIndex = start; m_func = Term.ExtractName(src, start).ToLower(); start += m_func.Length; // sauter tous les espaces, mais le prochain caractère doit être une parenthèse ouvrante if (start == src.Length) throw new ParseException(src, m_startIndex, "La fonction doit commencer par '('"); while (src[start] == ' ') start++; if (src[start] != '(') throw new ParseException(src, m_startIndex, "La fonction doit commencer par '('"); var termstart = start; var end = Term.FindMatchingEnd('(', src, termstart); while (end < termstart) { src += ')'; end = Term.FindMatchingEnd('(', src, termstart); } /*if (end < termstart) { throw new ParseException(src, m_startIndex, "Pas de parenthèse fermante correspondante trouvée"); }*/ m_endindex = end; var allterms = src.Substring(termstart + 1, end - termstart - 1); //string[] terms = allterms.Split(','); var terms = GetTerms(allterms); m_terms = new List<Term>(); foreach (var term in terms) { var newterm = new Term(); newterm.Parse(term, root); newterm.Parent = this; m_terms.Add(newterm); } }
public void SetVar(string varname, string value) { var term = new Term(); term.Parse(value); SetVar(varname, term.Value); }