From 282405ebfbdafeefd4c773ca78847bc5fb03594d Mon Sep 17 00:00:00 2001 From: Jonathan Date: Mon, 14 Oct 2013 10:41:48 +0200 Subject: [PATCH] =?UTF-8?q?Ajout=20d'un=20convertisseur=20de=20variable=20?= =?UTF-8?q?"=C3=A0=20la=20vol=C3=A9e"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MathString.Test/Program.cs | 2 +- MathString/MathString.cs | 42 +++++++++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/MathString.Test/Program.cs b/MathString.Test/Program.cs index a08ecaf..a9967d6 100644 --- a/MathString.Test/Program.cs +++ b/MathString.Test/Program.cs @@ -14,7 +14,7 @@ static void Main(string[] args) string formule = line; try { - string result = m.Convert(formule); + string result = m.Convert(formule, @var => new MathString.VariableConvertor((float)new Random().NextDouble(), true)); Console.WriteLine("\"{0}\" = {1}", formule, result); } catch (Exception ex) diff --git a/MathString/MathString.cs b/MathString/MathString.cs index 1d55ecc..0dfc081 100644 --- a/MathString/MathString.cs +++ b/MathString/MathString.cs @@ -104,6 +104,35 @@ public int GetHashCode(Variable obj) return (obj.Name.GetHashCode() + obj.Value.GetHashCode()).GetHashCode(); } } + + public class VariableConvertor + { + #region Attributs + private readonly bool _success; + private readonly float _value; + #endregion + + #region Constructeur + public VariableConvertor(float value, bool success) + { + _value = value; + _success = success; + } + + #endregion + + #region Proprietes + public float Value + { + get { return _value; } + } + + public bool Success + { + get { return _success; } + } + #endregion + } #endregion #region Attributs @@ -266,7 +295,7 @@ public static void AddGlobalVariable(string name, Function function) Functions.Add(name, function); } - public string Convert(string text, params Variable[] variables) + public string Convert(string text, Func variableConvertor, params Variable[] variables) { text = text.Replace(" ", ""); int max = _mathFunc.Values.Max(t => t.Weigth); @@ -274,14 +303,14 @@ public string Convert(string text, params Variable[] variables) for (Match ma = pair.Key.Match(text); ma.Success; ma = ma.NextMatch()) text = text.Replace(ma.Value, pair.Value.Action(ma.Value)); - text = FindVariables(text, variables); + text = FindVariables(text, variables, variableConvertor); text = FindFunctions(text); return FindParenthesis(ref text, max, '(', ')') ? text : Calculate(text, max); } - private string FindVariables(string text, ICollection variables) + private string FindVariables(string text, ICollection variables, Func variableConvertor) { Regex varRegex = new Regex(VariableRegex); IList errors = new List(); @@ -305,6 +334,13 @@ private string FindVariables(string text, ICollection variables) } else { + var varError = variableConvertor(ma.Groups["nom"].Value); + if (varError.Success) + { + text = text.Replace(ma.Value, varError.Value.ToString().Replace(',', '.')); + cont = false; + continue; + } errors.Add(string.Format("{0}: c({1})", ma.Groups["nom"].Value, ma.Index)); cont = true; }