|
Модераторы: diadiavova, gambit |
|
lvvas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.4.2009 Репутация: нет Всего: нет |
Числовой переменной можно присвоить значение арифметического выражения и результат вывести в текстовую строку
например: Dim a As Decimal = (2 + 2) * 3 TextBox1.Text = a А как сделать так, чтобы строковые данные воспринимались как арифметическое выражение? То есть, например, типа так: TextBox1.Text = "(2 + 2) * 3" Dim a As Decimal =TextBox1.Text TextBox1.Text = a (но не работает и не должно, поскольку переменной типа Decimal пытаюсь присвоить строковое выражение) В общем, нужно чтобы вычислялось выражение, введённое в текстовую строку... Есть ли простые способы решения этой проблемы? |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Можно использовать готовые библиотеки, коих вполне достаточно даже среди оупенсорс-проектов Например: http://flee.codeplex.com/ или используй динамическую компиляцию. Например Так http://www.interface.ru/home.asp?artId=4703. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
-Mikle- |
|
||||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 3 Всего: 59 |
Когда-то я таким способом делал. Имей ввиду, штука весьма противная, так как компиляция - процесс не быстрый уже по своему определению. Время выполнения составляло 100 мс, то есть 10 вычислений в секунду. Сложность выражения пркактически не влияла на скорость. Вот код на C#, если будет не понятно, попроси, переведем на VB.NET
Использование простое:
-------------------- Если тебе плюют в спину, значит ты впереди... |
||||
|
|||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Чтобы было быстро надо собственный парсер писать, а такое решение вряд ли можно назвать простым.
Кроме того: если надо производить много вычислений, то можно их все оформить в одну сборку и скомпилировать 1 раз. Хотя, в любом случае, я не агитирую за этот способ. ЗЫ В моей второй ссылке пример на васике, сам не проверял, но, как мне кажется я эту статью видел несколько лет назад на другом сайте, если это она, то всё работает. ЗЫ Можно использовать генератор парсеров, но тоже к простым этот способ не относится, тк грамматику прийдётся описывать. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Вопрос был о простом способе. А большинство операций, даже если их нет в Net, то можно добавить, описав свои функции. Другое дело, если речь идёт о каком-нибудь очень специфическом синтаксисе, тогда конечно, стандартные компиляторы тут не помогут.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
А простота к-л способа сильно зависит от того с какой целью понадобилось считать выражение в строке, зачастую динамическая компиляция далеко не самое простое решение данной задачи. -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Объясню, как выполняется то, о чём я написал.
Для выполнения операции текст фактически вставляется в тело кода сборки. То есть: для того, чтобы вычислить строку 2+2*2 надо написать что-то в этом роде
Такой код компилится, далее создаётся экземпляр класса MyClass и у него вызывается метод GetValue. Если тебе надо добавить пару-тройку функций, то просто запихни их в этот класс и дело в шляпе. Что до выражения 3^2 ,то это синтаксис бейсика и если использовать его компилятор и формировать код на нём же, то всё будет нормуль. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Выкладываю пример. Здесь можно выполнять операции в соответствии с синтаксисомвасика(включая степени), так же можно использовать все функции класса Math напрямую (то есть не Sysytem.Math.Sin, а просто Sin или sin), кроме того: я добавил свою функцию Factorial, которую тоже можно использовать в выражениях.
Присоединённый файл ( Кол-во скачиваний: 35 ) Calculate.rar 67,35 Kb -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
lvvas |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 1.4.2009 Репутация: нет Всего: нет |
ОГРОМНЕЙШЕЕ всем спасибо. Сижу, разбираюсь...
|
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
И бейсик всё это проглотит? ужос какой...
-------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
diadiavova |
|
|||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Дело не в бейсике. Просто код посмотри, обрати внимание на инструкцию импорта(using по вашему ). А о том, что лучше регистрозависимые языки или нет можно, конечно поспорить, только это тема для другой категории. Не знал, что ты ребёнок...извини
Какая рекурсия, ты вообще о чём? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
-Mikle- |
|
|||
Невидимка Vingrad'а Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 3 Всего: 59 |
и не только это , еще и это:
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
source777 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1878 Регистрация: 12.3.2007 Репутация: нет Всего: 56 |
Я посмотрел, потому и говорю, что ужос полный. И тут дело именно в бейсике! Я не про себя, а про lvvas и ему подобных, они ведь могут твой код воспринять всерьёз и не понять злобной шутки:
Это сообщение отредактировал(а) source777 - 2.4.2009, 20:28 -------------------- Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте |
|||
|
||||
diadiavova |
|
||||
Доктор Зло(диагност, настоящий, с лицензией и полномочиями) Профиль Группа: Модератор Сообщений: 5820 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Эта "злобная шутка" была всего лишь иллюстрацией вот этого
и адресована была лично тебе. И честно говоря мне и в голову не пришло, что кто-то может меня заподозрить в том, что я пытаюсь кого бы то ни было учить вычислять факториал(речь, как бы не нём была). -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||
|
|||||
Правила форума VB .NET | |
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |