Ejecutar un script de VFP

379 views
Skip to first unread message

Irwin Rodriguez

unread,
Jan 29, 2015, 11:07:32 AM1/29/15
to publice...@googlegroups.com, mundovisualfoxpro@googlegroups com
Saludos a todos,

Estoy haciendo una especie de editor donde el usuario tipea código de VFP, ya tengo el botón de compilar pero me falta ejecutar el script que el usuario ha codificado.

Imaginen que por ejemplo se codifica lo siguiente:

* Prueba de compilación
MessageBox("Hola Mundo desde un Editor de VFP!")
&& Este es un comentario

El botón de Ejecutar debe simplemente ejecutar ese script tal como lo hacemos con CTRL+E.

Será que debo tomar el script y ejecutarlo linea a linea con un RUN o existe algo más simple.

Gracias a todos!

--
Ing. Irwin Rodríguez
 
Consultor Informático
 
"Las ideas son fuerzas intangibles, pero tienen más poder que el cerebro físico de donde nacen. Tienen el poder de seguir viviendo, aún después de que el cerebro que las ha creado haya regresado al polvo"

NOTA: La información mostrada en este mensaje es de caracter Confidencial y está dirigida unicamente a los contactos señalados en el encabezado; si el lector de este correo no es el destinatario del mismo, se le notifica que cualquier copia o distribución queda totalmente prohibida. Si usted ha recibido este mensaje por error, por favor notifique inmediatamente al remitente por este mismo medio y bórrelo de su sistema.

Fargoz

unread,
Jan 29, 2015, 11:18:52 AM1/29/15
to mundovis...@googlegroups.com
Utiliza macrosustitucion,..

Ejemplo:

Cmd = [MessageBox("Hola Mundo desde un Editor de VFP!")]

&Cmd




--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mundovisualfox...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--

Cordialmente,

MedeSoft Developer Ltda
Fabio Ramirez G.
Ingenieria de Software
Medellin - Colombia

Horario Atención
Lunes - Viernes
8am - 12pm   2pm-4pm

www.medesoft.co



Irwin Rodriguez

unread,
Jan 29, 2015, 1:02:42 PM1/29/15
to mundovisualfoxpro@googlegroups com
Excelente!

Se sirve más la macrosustitución ya que debo evaluar ciertas cosas del codigo antes de ejecutarlo.

Gracias Roberto y Fargoz!

Fernando D. Bozzo

unread,
Jan 29, 2015, 2:00:10 PM1/29/15
to mundovis...@googlegroups.com
Hola Irwin:

¿Y EXECSCRIPT() no te sirve? Es mucho más potente que la macrosustitución.


Saludos.-

Irwin Rodriguez

unread,
Jan 29, 2015, 2:12:24 PM1/29/15
to mundovisualfoxpro@googlegroups com
Hola Fernando,

Te comento un poco que quiero hacer para que entiendas el problema:

1. Tengo un editbox donde el usuario va a tipear el código en VFP (Editor)
2. Debajo del editbox coloqué otro EditBox (Consola) pequeño que me va a simular la salida por consola, es decir, las salidas con el comodín "?".

Entonces lo que hago una vez compilado es obtener todo el String del Editor y busco y reemplazo el comodín ? por un método que hice que se llama escribir.

La rutina para buscar y reemplazar es esta:

lcTextoNuevo = ''
lcTodoElTexto = ''
lcContenido = ''
lccomilla1 = 0
lccomilla2 = 0
lnposini = 0
lctexto = Alltrim(Thisform.Editor.Value)
lctextoFinal = lctexto
For x=1 To Len(lctexto)
    If Substr(lctexto,x,1) == "?"
        lnposini = x
    Else
        If lnposini > 0
            If Substr(lctexto,x,1) == '"'
                If Empty(lccomilla1)
                    lccomilla1 = x
                Else
                    lccomilla2 = x
                    lcContenido = SUBSTR(lcTexto, (lnPosini+1), (lcComilla2-1))
                    lcTodoElTexto = SUBSTR(lcTexto, lnPosini, lcComilla2)
                    lcTextoNuevo = 'Thisform.escribir('+lcContenido+')'
                    lctextoFinal = STRTRAN(lctexto, lcTodoElTexto, lcTextoNuevo)
                    lcTextoNuevo = ''
                    lcTodoElTexto = ''
                    lcContenido = ''
                    lccomilla1 = 0
                    lccomilla2 = 0
                    lnposini = 0
                Endif
            Else
            Endif
        Else
        Endif
    Endif
Endfor

Me sirve con una sola linea Ejemplo:

? "Mensaje de Prueba"

Pero cuando agrego más de una linea,

? "Linea de prueba 1"
? "Linea de prueba 2"
? "Linea de prueba 3"
? "Linea de prueba 4"

Aquí es donde se desbarata todo el String. Justamente estoy en eso ahora.

Estaba pensando más bien en colocar una funcion "Consola" donde le pase el String y ella que se encargue de imprimir en el EditBox pero quiero mantener la originalidad del comando.

Quizás cuando de con la falla al final termine ejecutando el comando con ExeScript en vez de &Comando.

Saludos!


Irwin Rodriguez

unread,
Jan 29, 2015, 3:36:59 PM1/29/15
to mundovisualfoxpro@googlegroups com
Resuelto el problema,

Pude resolver con otra rutina y usando la función ExecScript.

Aquí el código:

Local lcsafact, lcfilename, lclinea, lccomando, lcextracto
lcsafact = Set ('SAFETY')
Set Safety Off
lcfilename = 'VFPExec.txt'
lclinea = ''
lccomando = ''
lcextracto = ''
Create Cursor ('ejecutar') (codigo m(10))
Insert Into ejecutar Values (Thisform.Editor.Value)
Copy Memo codigo To gctemporales + 'VFPExec.txt'
If File(gctemporales + lcfilename)
    Local lnhandle
    lnhandle = Fopen(gctemporales + lcfilename)
    If (lnhandle > 0)
        Do While !Feof(lnhandle)
            lclinea = ALLTRIM(Fgets(lnhandle))
            If (Substr(lclinea,1,1) == '?')
                lcextracto = Substr(lclinea,2,(Len(Alltrim(lclinea))-1))
                lcextracto = 'VFPConsola.escribir(' + lcextracto + ')'
                If Empty(lccomando)
                    lccomando = lcextracto
                Else &&Empty(lccomando)
                    lccomando = lccomando + Chr(13) + lcextracto
                Endif &&Empty(lccomando)
            Else &&(Substr(lclinea,1,1) == '?')
                If Empty(lccomando)
                    lccomando = lclinea
                Else &&Empty(lccomando)
                    lccomando = lccomando + Chr(13) + lclinea
                Endif &&Empty(lccomando)
            Endif &&(Substr(lclinea,1,1) == '?')
        Enddo
    Else &&(lnHandle > 0)
    Endif &&(lnHandle > 0)
    Fclose(lnhandle)
Else &&File(gctemporales + lcfilename)
Endif &&File(gctemporales + lcfilename)
Erase (gctemporales + lcfilename)
Set Safety &lcsafact
If Used('ejecutar')
    Select ejecutar
    Use
Else &&Used('ejecutar')
Endif &&Used('ejecutar')
If !Empty(lccomando)
    Thisform.consola.Value = ''
    If Thisform.compilado
        Thisform.consola.DisabledForeColor = Rgb(0,0,128)
        Execscript(lccomando)
        Thisform.consola.DisabledForeColor = Rgb(0,0,0)
    Else &&Thisform.compilado
    Endif &&Thisform.compilado
ELSE &&!Empty(lccomando)
ENDIF &&!Empty(lccomando)

Larga vida al Zorro!!!

Saludos y gracias a todos!

Erwin Vera (Gmail)

unread,
Jan 30, 2015, 5:33:27 AM1/30/15
to mundovis...@googlegroups.com

Excelente Irwin

Reply all
Reply to author
Forward
0 new messages