BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Главная  / Поддержка  / Форум  / Публичные форумы  / Программирование приложений  / Компиляция "на лету" нескольких строк.

Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Компиляция "на лету" нескольких строк.
 
Eval() позволяет исполнить пользовательский код, записанный в одну строку, лежащий в блоке кода.
FileEval позволяет запустить пользовательский код, хранящийся в файле.
HFileEval также как и FileEval+ запуск откомпилированных .hrb.

А нет ли возможности запускать пользовательский код, записанный в несколько строк(строка+символ-конец строки+строка....), которая могла бы к примеру храниться в DBF файле в виде memo, или просто в виде строки?
Пытался в блок кода "впихнуть" несколько строк:
Код
UString:= "If (x>0)"+I2Bin(2573)+"endif"
UString:= "{|x,y,z,q,s|"+UString+"}"
TRY
bBlock:=&UString
temp:=Eval(bBlock,x,y,z,q,s)
Catch  oErr
end

Работать отказывается. (Использование IIF не подходит.)
Изменено: Саак Шахламджян - 04.09.2008 17:28:17
 
Попробуйте так
Код
temp:=Eval(&(UString))

а потом так
Код
bBlock:=&(UString )
temp:=Eval(bBlock)
Изменено: nordk - 05.09.2008 10:30:34
 
И еще Вы в Eval пытаетесь передавать список аргументов - а они уже определены...а то Вы показываете опять только кусок кода....
 
Цитата
nordk пишет:
И еще Вы в Eval пытаетесь передавать список аргументов - а они уже определены...а то Вы показываете опять только кусок кода....


Код
FUNCTION CheckAndMakeString(UString)
Local bBlock, bCorrect:=.T.,x,y,z,q,s
Local temp:=1
LOCAL oErr
x:=1
y:=1
z:=1
q:=1
S:=1
UString:= "{|x,y,z,q,s|"+UString+"}"
TRY
bBlock:=&UString
temp:=Eval(bBlock,x,y,z,q,s)
Catch  oErr
bCorrect:=.F.
end
return bCorrect

Это функция проверки на правильность введенной формулы. При её вводе пользователем. У него (пользователя) ограничение - 5ть переменых, которые я и определяю, только, чтобы проверить.
(Недостаток - не учтено деление на ноль. К стати сейчас, думаю, можно убрать строки с Eval и инициализацией переменных. Ф-я должна только проверку на синтаксис делать)
С формулой, которую можно записать в одну строку всё отлично работает, а вот 2 строки. Если, например нужно не просто формулу вставить, а что-нибудь эдакое:
Код
if((x<=500).AND.(z>=100))
//вычисления
elseif ((y<=500).AND.(z>=500))
//вычисления
else 
//err
endif

Рещили обойтись IIF, т.к. циклов не будет и можно его использовать. Единственное не так удобно...
Изменено: Саак Шахламджян - 05.09.2008 11:08:54
 
А понял
Если говорить про IF то тут надо использовать его однострочный вариант разумеется
Страницы: 1
Читают тему (гостей: 1)