Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / преобразование строки в формулу / 12 сообщений из 12, страница 1 из 1
18.02.2014, 15:16
    #38564688
webber81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
Существует ли библиотечный класс или функция позволяющая преобразовывать строку в математическую формулу?
Что нибудь подобное переводу строки в число
Код: c#
1.
2.
string s = "x^2 + sin(x)";
XXX.Parse(s);


Можно конечно самому ее написать.
Перебирать все символы в строке по порядку и распознавать на их основе математич. функции.
Но уж больно это долго.
Нужно это для того чтобы можно было формулу вбивать в TextBox, а не менять код каждый раз.
...
Рейтинг: 0 / 0
18.02.2014, 15:34
    #38564722
Sergey S
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
...
Рейтинг: 0 / 0
18.02.2014, 15:47
    #38564760
webber81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
Большое спасибо за ссылки.

Но хотелось бы все таки функцию из стандартной библиотеки (вычищенную от всевозможных багов).
Чтобы не перелопачивать код, а сразу использовать.
Неужели Микрософтовцы не додумались ее написать?
...
Рейтинг: 0 / 0
18.02.2014, 15:59
    #38564777
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
webber81, да... не додумались... убогие... что сказать...
...
Рейтинг: 0 / 0
18.02.2014, 16:10
    #38564799
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
Пользуюсь Ciloci.Flee - позволяет вычислять математику + вызывать пользовательские функции программы.
...
Рейтинг: 0 / 0
18.02.2014, 22:51
    #38565276
webber81
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
http://www.codeproject.com/Articles/19768/Flee-Fast-Lightweight-Expression-Evaluator
Имеется ввиду эта прога?
И как в ней со стабильностью и безглючностью?
...
Рейтинг: 0 / 0
19.02.2014, 00:09
    #38565323
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
webber81И как в ней со стабильностью и безглючностью?

Мои задачи выполняет, нареканий не было
...
Рейтинг: 0 / 0
19.02.2014, 08:04
    #38565433
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
buserwebber81, да... не додумались... убогие... что сказать...
Код: c#
1.
double v = (double)new System.Xml.XmlDocument().CreateNavigator().Evaluate(System.Xml.XPath.XPathExpression.Compile(stringVar.Replace("/", "div ")));
...
Рейтинг: 0 / 0
19.02.2014, 08:08
    #38565435
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
...
Рейтинг: 0 / 0
19.02.2014, 08:09
    #38565436
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
        private void button3_Click(object sender, EventArgs e)
        {
                 string error;
                string code = "using System; " +
                "public class MyCalculator " +
                "{" +
                   " public object Calc()" +
                   " {" +
                       " return " + textBox6.Text + ";" +
                   " }" +
               " }";

            object res = MemLibParser.Exec(code, "Calc", null, out error);
            if (res != null)
                textBox7.Text = res.ToString();
            if (error != string.Empty)
                MessageBox.Show(error);

        }


    public class MemLibParser
    {
        private static string[] GetAppReferences()
        {
            List<string> references = new List<string>();
            foreach (System.Reflection.AssemblyName assemblyName in Assembly.GetExecutingAssembly().GetReferencedAssemblies())
            {
                references.Add(Assembly.Load(assemblyName.FullName).Location);
            }
            references.Add(Assembly.GetExecutingAssembly().Location);
            return references.ToArray();
        }

        private static Assembly Compile(string src, out string error)
        {
            error = string.Empty;
            Microsoft.CSharp.CSharpCodeProvider comp = new Microsoft.CSharp.CSharpCodeProvider();

            System.CodeDom.Compiler.CompilerParameters pars = new System.CodeDom.Compiler.CompilerParameters(GetAppReferences());

            pars.GenerateInMemory = true;

            System.CodeDom.Compiler.CompilerResults result = comp.CompileAssemblyFromSource(pars, src);

            if (result.Errors.HasErrors)
            {
                foreach (System.CodeDom.Compiler.CompilerError er in result.Errors)
                {
                    error += string.Format("{0}:{1} {2}", er.Line, er.Column, er.ErrorText) + Environment.NewLine;
                }

                return null;
            }
            return result.CompiledAssembly;
        }

        public static object Exec(string src, string method, object[] parameters, out string error)
        {
            error = string.Empty;
            try
            {
                Assembly asm = MemLibParser.Compile(src, out error);
                Type type = asm.GetExportedTypes()[0];
                object obj = type.GetConstructor(Type.EmptyTypes).Invoke(new object[] { });
                return type.GetMethod(method).Invoke(obj, parameters);
            }
            catch (Exception ex)
            {
                error = error + Environment.NewLine + ex.Message;
                return null;
            }
        }
    }
...
Рейтинг: 0 / 0
19.02.2014, 12:16
    #38565824
pation
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
fortibransa,

данный код постоянно будет грузить новые сборки в основной домен, что по сути является утечкой памяти
...
Рейтинг: 0 / 0
20.02.2014, 08:00
    #38566987
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
преобразование строки в формулу
pationfortibransa,

данный код постоянно будет грузить новые сборки в основной домен, что по сути является утечкой памятиДа за ради бога, кому надо тот пусть разбирается. Я попробовал, работает ну и хорошо, если кому нужно то пусть разбирается дальше, да и время выполнения приличное и тд и тп.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / преобразование строки в формулу / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]