Сейчас на форуме: bartolomeo, hgdagon (+7 невидимых)

 eXeL@B —› Программирование —› VB выполнение команд из строковой переменной
Посл.ответ Сообщение

Ранг: 10.1 (новичок)
Активность: 0.040
Статус: Участник

Создано: 09 марта 2006 13:10
· Личное сообщение · #1

Всем привет, Крутые перцы!

Помогите. Нужно взять строку из поля для ввода и выполнить её...
например, y=a+b*c - есть переменные a,b,c и при вводе функции - нужно чтобы она выполнялась.... Как это сделать? Я слышал на VBScript есть такай ф-я, как Execute - но здесь что-то не работает.

Пишите или стучите в аську 334547677



Ранг: 39.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 09 марта 2006 15:40
· Личное сообщение · #2

Не знаю про штатные средства языка, я когда-то давно это врукопашную реализовывал посмотри в поисковиках по запросу "польская инверсная запись", там должны быть и подробное описание, и наверняка исходники, хотя и с нуля реализовать имхо несложно.



Ранг: 10.1 (новичок)
Активность: 0.040
Статус: Участник

Создано: 09 марта 2006 15:47
· Личное сообщение · #3

Я так в серьёз задумался - получается что-то типа интерпретатора 2 уровня (если сам ВБ считать 1 уровнем).

Есть ещё вариант на С++ говорят, что можно сделать очень просто - но я не знаю С++.

Mordred, плиз, стукни мне в аську 334547677



Ранг: 39.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 09 марта 2006 16:29
· Личное сообщение · #4

Sanya
Я аськой не пользуюсь... Если что - пиши в личку или на мыло: mordred[пудель]sibmail.com
Sanya пишет:
Я так в серьёз задумался - получается что-то типа интерпретатора 2 уровня (если сам ВБ считать 1 уровнем).

Вообще-то типа того, но для основных арифметических операций там реально примитивный интерпретатор получается Если надо, могу поискать свою прогу, тока я её делал чуть ли не в 10 классе еще, когда тока за комп сел, так что код там, мягко говоря, неоптимизированный




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 10 марта 2006 02:26 · Поправил: Rascal
· Личное сообщение · #5

На С ничуть не легче
Ну а на ВБ:
'в модуль
' переменные из модуля если их буквы написать в исполняемом тексте заменяются на значение их в программе
' буквы не из модуля так и пишутся буквами
Option Explicit
Public X
Public Y
Public Mul As Integer
Public Shirina As Long
Public Visota As Long
Public SeredinaV As Long
Public SeredinaS As Long
Public Declare Function EbExecuteLine Lib "vba6.dll" (ByVal pStringToExec As Long, ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

' For VB5 IDE
'Declare Function EbExecuteLine Lib "vba5.dll" (ByVal pStringToExec As Long, ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

' FOR Access 97/VBE.dll clients like Word 97 and Excel 97
'Declare Function EbExecuteLine Lib "vba332.dll" (ByVal pStringToExec As Long, ByVal Foo1 As Long, ByVal Foo2 As Long, ByVal fCheckOnly As Long) As Long

Public Function FExecuteCode(stCode As String, Optional fCheckOnly As Boolean) As Boolean
FExecuteCode = EbExecuteLine(StrPtr(stCode), 0&, 0&, Abs(fCheckOnly)) = 0
End Function

-----
Недостаточно только получить знания:надо найти им приложение




Ранг: 32.4 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 31 марта 2006 13:48 · Поправил: t3stament01
· Личное сообщение · #6

Это можно сделать и без АПИ -
разбиваешь строку y=a+b*c
на скобки, знаки действия и т.д и пишешь код который попутно это все расчитывает



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 31 марта 2006 14:43
· Личное сообщение · #7

t3stament01 пишет:
Это можно сделать и без АПИ

В идеале, конечно, лучше самому написать. Только вот не всем под силу. А если это функция - не основная в программе, то тратить на нее много времени не стоит. Хотя здесь речь идет о VB - API в нем программировать не просто. Файл объявлений WIN32API.TXT - галимый.



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 07 апреля 2006 17:49
· Личное сообщение · #8

Sanya пишет:
Нужно взять строку из поля для ввода и выполнить её...

Функция называется Evaluate. Пока добрался до Офиса с хелпом по Бейсику.
А по памяти не рискнул ответить


 eXeL@B —› Программирование —› VB выполнение команд из строковой переменной
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати