viernes, 17 de julio de 2009

LENGUAJE DE PROGRAMACION DE .PRG DE FOXPRO 9.0

Hola a todos, bueno lo prometido es deuda..... Aqui les traigo una poca información de como utilizar el lenguaje de los .prg en FoxPro.


Para empezar, el lenguaje es muy parecido a Basic y Visual Basic, y si ya has programado en formularios de FoxPro, de seguro sabes programar un .prg

La diferencia del .prg a un formulario es que en el formulario cuentas con los eventos en un ambiente grafico. El PRG, es puramente en texto, sin embargo, el hecho de que sea texto no significa que sea pobre en estructura, ya que es una parte fundamental al crear un sistema en FoxPro.

La diferencia con otros lenguajes, es que no esta regido por separaciones o bloques, es decir, que si tu pones un IF, la siguiente linea tiene que ir con tabulacion. En FoxPro no es necesario hacerlo, aunque para que los programas se comprendan mejor, si estaran puesto asi.

Otra cosa es que muchas de las funciones no estan disponibles, porque recuerden que la es un programa y no un formulario. El formulario carga todas las funciones predeterminadas en FoxPro.

Sin mas que hablar, veamos algo de codigo.

Primero.... de preferencia....crearemos un proyecto de FoxPro, luego iremos a la viñeta "code" y luego buscamos "programs"

Ahora le damos a "New" en nuestra ventana del Project Manager.

Se nos abrira una pantalla de texto en blanco.

Empezemos:

  • Antes que nada cada programa deberia tener una instruccion CLEAR. Esto es para que limpie la pantalla principal de FOXPRO (ya que algunas veces mostraremos datos ahi)
  • Ahora, FoxPro nos da la posibilidad de ir definiendo variables conforme las necesitamos, sin embargo tambien las ponemos definir ya sea al principio o durante del programa. Para eso ocuparemos el comando:
STORE [VALOR] TO [VARIABLE1, VARIABLE2, ... , VARIABLE N]
  • EL comando ? o ?? sirve para imprimir en la pantalla principal una variable o informacion. Tambien puedes mostrar informacion con un MESSAGEBOX([texto a mostrar],[tipo de mensaje],[titulo]), asi como en Visual Basic. La diferencia del ? al ?? es que el ?? muestra toda la informacion en una misma linea, es decir que si pongo ??var1 y luego ??var2, me saldria algo como: var1var2.
  • Para solicitar valores del usuario se ocupa un INPUTBOX([texto en el inputbox],[titulo]) e incluso se puede definir todo esto dentro de la funcion VAL() para obtener el valor del inputbox si en un dado caso si es numero.
  • IF y ELSE cambian un poquito en el sentido de hacer estructuras multiples, la forma correcta de hacerlo es: IF
IF
....
ELSE
IF
...
ELSE
...
ENDIF
ENDIF

* Se ponen dos ENDIF porq has definido dos IF distintos, se podria decir.
  • Las instrucciones FOR y DO WHILE cambian un poquito en FoxPro, luego veran como aplicarlas correctamente.
Ahora haremos un par de ejercicios:

El siguiente codigo mostrara dos variables almacenas en un messagebox y en la pantalla de FoxPro. El programa 2 mostrara lo mismo, pero de dos variables que le pedira al usuario.


*Codigo programa 1
CLEAR
STORE "Bienvenidos a " TO a
STORE "Teknix Productions" TO b
MESSAGEBOX(a+b,0,"Teknix Productions")
??a
??b
*Fin del programa 1


*Codigo programa2
CLEAR
a=INPUTBOX("Introduzca su materia","Mi clase")
b=INPUTBOX("Introduzca un mensaje","Mi mensaje
MESSAGEBOX("Mi clase es: " + a + ", " + b,0,"Informacion")




Con lo que hemos visto y lo que ya sabemos de programacion, podemos ahora realizar un programa. Les ire explicando cada codigo del programa para que sea entendible.

* Realizar un programa que invierta números enteros. Es decir que si ingresamos 12345 nos tiene que devolver 54321. (GUIA 1)

Este programa es sencillo, lo que hay que hacer es leer una cadena de numeros de manera inversa e irlos almacenando (aqui veremos la funcion LEN() que es para sustraer el tamaño de una cadena y como tambien se pude ir almacenando de deracha a izquierda con el FOR)

empezemos con leer el numero a invertir:


CLEAR
STORE "" TO res *** Esto lo ocuparemos luego
numero=INPUTBOX("Introduzca el valor a invertor","Inversor de numeros")
...


Es preferible que el numero ingresado este en tipo de cadena por eso no le ponemos un VAL() a la variable.

Ahora, necesitamos saber que tan larga es nuestra cadena, es decir, cuantos caracteres o digitos tiene. Para eso ocupamos la funcin LEN() y al poner nuestra variable obtendremos un numero entero que lo guardaremos para depues

entonces....


...
largoCadena=LEN(ALLTRIM(numero))
...


La funcion "ALLTRIM" es para asegurarnos que escoja todos los caracteres, se pone este de preferencia tambien al pasar de entero a cadena o viceversa aunque no es necesario.

Ahora tenemos el numero y su tamaño (siguiendo el ejemplo tendriamos "12345" y "5"), ahora construiremos una estructura FOR para que podamos ir escogiendo cada elemento de la variable numero para irlo almacenando a una nueva variable. Ademas que en el FOR se especifica que vaya de uno en uno y de derecha a izquierda....



....
FOR i = 0 TO largoCadena - 1
res = res + ALLTRIM(SUBSTR(ALLTRIM(numero),largoCadena - i,1))
ENDFOR
...


Recordemos algo...

En una cadena, cada miembro tiene un indice y empieza de 0 en adelante. En la primera linea se puede observar que se define un indice "i" que tendra como valor 0. Este valor es donde empezara a hacer referencia para escojer el caracter que neceitamos poner de primero.

FOR i = 0 TO largoCadena - quiere decir: "PARA i = 0 HACIA el valor de (largoCAdena-1)

Por que menos 1??

Recuerden que el valor de largoCadena es de 5 (cosa que es cierta), pero al formar los indices se empieza de sde cero, es decir que se empieza: 0,1,2,3,4 (que seria cinco elementos). Si dejamos que largoCadena indique que el FOR debe llegar a 5 entonces tomara un elemento mas: 0,1,2,3,4,5 (6 elementos que nuestra cadena no tiene) y habra un error.

La segunda linea:
res = res + ALLTRIM(SUBSTR(ALLTRIM(numero),largoCadena - i,1))

primero indica que a res se le añadira la substraccion (SUBSTR) de un elemento de la cadena "numero", el cual "largoCadena - i" indicara que se esta leyendo de derecha a izquierda la cadena y que va de uno en uno (eso quiere decir el ",1").

Ahora esto se repetira i veces hasta llegar a nuestra condicion de que llegue a al valor luego de TO.

Teniendo esto ahora solo queda mostrarlo con un MESSAGEBOX


el codigo completo seria este:


CLEAR
STORE "" TO res
numero=INPUTBOX("Favor ingrese el número que desea invertir","Inversor de Numeros")
Long = LEN(ALLTRIM(original))
FOR i = 0 TO nLong - 1
res = res + ALLTRIM(SUBSTR(ALLTRIM(original),nLong - i,1))
ENDFOR
MESSAGEBOX("El numero invertido es: " + mostrar,0,"Informacion")


Prubenlo y analizenlo, mañana veremos otro ejercicio donde ocuparemos el comando DO WHILE junto con estructuras IF y DO CASE


Dudas o comentarios, no olvides de dejarme tu comentario al final de cada posto, y deja tu nombre y mail.

Saludos

4 comentarios:

yo dijo...

ya no te quiero porq podes programar y no me enseñas

Anónimo dijo...

muy bueno felicidades

tengo una pregunta sencilla

como le hago para contar los caracteres introducidos en una caja de texto en vfox

maxxDJ dijo...

para contar los caracteres tienes que ocupar la funcion len().

Primero guardas los caracteres en una variable..

luego pones en otra variable el tamaño de caractares de lo que acabas de almacenar, por ejemplo:

a = MESSAGEBOX("Introduzca cadena a contar")
tamaño = len(a)

y ya solo muestras "tamaño" o lo ocupas para los fines que desees

maxxDJ dijo...

perdon no es MESSAGEBOX sino INPUTBOX.

Perdon por no haberte contestado mas a tiempo pero cualquier otra duda tambien me puedes escribir a: crash280302@hotmail.com