Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Eval, Ejecutar Codigo Gambas?
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Eval, Ejecutar Codigo Gambas? 
 
Hola,

Estoy trabajando con una pequeña aplicación y me gustaría añadirle algo parecido a 'scripting', pensé en utilizar la función eval
para evaluar expresiones de gambas introducidas por el usuario sin embargo, seguramente debido a mi poca experiencia con gambas me encuentro con algunos problemas, quizás porque usar eval no sea la solución correcta...

Para probar cree un textarea que contiene en su texto una única linea tal que así:

App.sayHello()

En un botón añado el siguiente código:

eval(FMain.textarea1.text)

Esto funciona correctamente, es decir, doy click al botón, se evalua el texto del textarea y mi tira el mensaje de hola mundo, peeeero en el momento en que añado una linea extra al textarea este deja de funcionar, adicionalmente no veo que se puedan utilizar código gambas normalmente dentro de un eval, por ejemplo usar un Dim me resulta en un error de Dim no esperado.

El caso es que me gustaría que el usuario pudiese interactuar con los métodos y funciones de la aplicación mediante algún lenguaje, ya sea gambas, perl, o lo que sea, y no se exactamente si usar eval es una solución para esto, si se puede hacer, o por donde podría empezar.

Gracias por adelantado, un saludo.
 



 
NidoDeCuervos - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Eval, Ejecutar Codigo Gambas? 
 
Hola!. Pues mira, yo la función Eval la uso principalmente para plugins, sólo que a veces.
Aún así te recomiendo que uses clases. Que tus usuarios programen clases y que tu programa las asimile.
O también otra cosa que se me ocurre, es que el problema se trate de sintaxis. Imagínate que tienes esto:

$stringReal = "Dim kill as string\kill = "hola""
eval($stringReal)

¿Qué podría pasar? Comillas dentro de comillas. Ergo, gambas lo interpretará como código, y el Dim está justo después que otras cosas cuando declarar una variable es lo primero que se debe hacer, para proceder a trabajar con ella u otras cosas. Por eso creo que lo más justo es hacer clases e importarlas.
Ojo, no estoy muy documentado sobre Eval, apenas lo uso, así que quizás si te responde otro tenga una respuesta más completa.
 



 
 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Eval, Ejecutar Codigo Gambas? 
 
Hola, gracias por responder.

El código que mando al eval cuando cuando lo hago explotar es tal como así:

App.sayHello()
App.sayHello()


Lo mismo que en el ejemplo que si funciona, pero dos lineas, entiendo que eval solo puede ejecutar una expresión a la vez.

La solución que me dices de programar clases si no he entendido mal a lo que te refieres, haría falta reiniciar la aplicación para que funcionase, y yo quiero que el código que quieran ejecutar lo tecleen desde la aplicación misma los usuarios.

Lo que quiero es integrar en la aplicación algún tipo de lenguaje con el que los usuarios puedan interactuar con el programa, así, por ejemplo pueden crear un script introduciendo código en gambas mas o menos así (me lo invento):

if App.getNumWorkspaces() = 0 then
   App.AddEmptyWorkspace()
endif


Luego eso desde la aplicación y sin reiniciar lo asignan a una tecla o a un elemento del menu y lo ejecutan cuando quieren.

Pensé que eval iría perfecto si permitía ejecutar de todo, por ejemplo estructuras if while.... pero parece que no... me imagino que quizás el sistema bueno sea utilizar sockets, o quizás algún tipo de comunicación con un script (por ejemplo perl) utilizando la entrada/salida standard, que si bien se me ocurre mas o menos como podría funcionar me parece una opción mas complicada y laboriosa que la que tenía pensada de entrada.

En fin, si a alguien se le ocurre alguna manera sencilla de interactuar desde algún lenguaje de script con una aplicación gambas o se le ocurre por donde podría empezar lo agradeceré, si no supongo que tirare hacia sockets o comunicación por stdin/stdout

Nota: aun que estoy en gambas 3 lo acabo de probar en gambas 2 y el problema es exactamente el mismo, código del ejemplo que acabo de picar:
PUBLIC SUB Button1_Click()
  Eval(TextArea1.Text)
END


Si Textarea1.Text contiene mas de una linea no funciona.

Saludos!
 



 
última edición por NidoDeCuervos el Miercoles, 26 May 2010, 22:17; editado 2 veces 
NidoDeCuervos - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Eval, Ejecutar Codigo Gambas? 
 
Voy a pensar si hay alguna forma menos complicada. Hasta luego
 



 
 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Eval, Ejecutar Codigo Gambas? 
 
Se me ocurre que podrías recorrer cada línea del textbox con un bucle for..next y evaluar cada línea dentro del bucle. Crea un array de cadenas  separadas por el carácter de final de línea "\n". Lo que desconozco es si de alguna forma se evalúan las expresiones dentro del mismo contexto.

DIM codigo AS NEW String[]
DIM sAux AS String

codigo = Split(TextArea1.Text, "\n")

FOR EACH sAux IN codigo
    Eval(sAux)
NEXT


Ya digo que no lo he probado, y no sé si funcionará. Ya nos contarás.

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Eval, Ejecutar Codigo Gambas? 
 
Hola, gracias por responder, luego lo probare, pero me temo que si bien esto funcionara cuando el código no contenga estructuras, no lo hará cuando el código contenga condiciones o bucles, ya que por ejemplo le estaríamos diciendo que ejecutase:

If a=1 then

y nada mas, aún así, luego lo probaré y cuento que tal.

Saludos
 



 
NidoDeCuervos - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Eval, Ejecutar Codigo Gambas? 
 
Confirmado, un declaración mediante DIM hace petar el eval, cualquier linea vacía en el texto también lo hará petar, y por lo general lo hará petar cualquier cosa que no sea una expresión, eval no parece ser lo adecuado en este caso.

Empezaré a pelearme con algún sistema para interactuar entre gambas y algún otro lenguaje de scripting, seguramente PHP o perl vía la entrada/salida del proceso, si consigo algo útil lo haré saber por si a alguien mas le es de utilidad.

Saludos
 



 
NidoDeCuervos - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.33 0 1 3
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Se Puede Ejecutar Codigo Que Esta Dentro D... tercoIDE General 23 Viernes, 29 May 2020, 23:07 Ver último mensaje
tercoIDE
No hay nuevos mensajes Ingresar Una Lista De Valores. Usando Eval Shell General 3 Jueves, 13 Noviembre 2014, 18:58 Ver último mensaje
tercoIDE
No hay nuevos mensajes Codigo Go En Gambas tincho Programación en otros lenguajes 0 Lunes, 03 Febrero 2020, 20:00 Ver último mensaje
tincho
No hay nuevos mensajes [Codigo Fuente]Gambas GDK Usando SDL Juan Luis Lopez Aplicaciones/Fragmentos de Código 8 Viernes, 01 Junio 2012, 08:59 Ver último mensaje
Shell
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
No puede descargar archivos
No puede publicar eventos en el calendario