GARANTIR DESCONTO

Fórum Ajuda Logica, usando IFs #258437

15/11/2004

0

´Amigos,

Preciso executar uma fórmula com IFs, só que essas fórmulas serão digitadas pelo usuário e armazenadas num campo string ( varchar(500) ). Meu problema é executar essa fórmula, já que ela é um string. Alguém sabe como solucionar esse problema?

Exemplo de uma fórmula muito simples :

var Formula : String; 
Valor : Real; 
... 
Formula := ´iif(REALIZADO<(OBJETIVO*0.8),0, REALIZADO*2)´; 
... 

Real := Formula ; // Esse seria um jeito se Formula não fosse um string, já que a formula retorna um valor;


Eu preciso executar essa formula dessa maneira.

A função iif usada já existe, não se preocupem com ela.

Será que alguém poderia me ajuda ?


Airto

Airto

Responder

Posts

15/11/2004

Edilcimar

try
real := strtofloat(formula)
except
showmessage(´não foi possível efetuar o cálculo´);
end


Responder

Gostei + 0

15/11/2004

Airto

não é isso que estou precisando! dentro dessa string, por ter n formulas, nos 500 caracteres!


Responder

Gostei + 0

15/11/2004

Bruno Belchior

cara o q vc tá querendo é transformar string em código não é, e isso eu nunca vi e acho que não tem como mudar o executável na sua execução...


Responder

Gostei + 0

15/11/2004

Massuda

Sugiro que você dê uma olhada no componente [b:c17a5ad844]TFatExpression[/b:c17a5ad844] (link no [url=http://www.torry.net/pages.php?id=307]Torry[/url], freeware com fonte).

Esse componente é capaz de parsear uma string contendo uma expressão do tipo ´1+2*3/4´ e retornar o valor correspondente. Adicionalmente, o componente suporta expressões com variáveis e funções definidas pelo usuário (no seu exemplo, OBJETIVO e REALIZADO seriam variáveis e iif uma função do usuário).

Tanto as variáveis como as funções do usuário são tratadas, repectivamente, através dos eventos OnVariable e OnEvaluate.

Uma coisa que não tenho certeza é se ele suporta operadores relacionais (maior, menor, igual, etc).


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar