Escolar Documentos
Profissional Documentos
Cultura Documentos
x
Manual de Clipper (On line)
Escrito por Antonio Surez Jimnez
Introduccin.
A principio de los aos ochenta, DBASE II hizo su aparicin de la mano de George Tate
(1943-1984) y su empresa Ashton-Tate. Esta nueva herramienta se presentaba en el
emergente mundo de los microordenadores con la intencin de facilitar la gestin de las
bases de datos.
Evidentemente, los sistemas de gestin de bases de datos existan desde mucho antes, sobre
todo, desarrollados para grandes sistemas, pero la cuestin estaba en cubrir una carencia
que ms tarde o ms temprano deba ser atendida por los ingenieros de software y que era
esperada ansiosamente por el creciente nmero de usuarios de los ordenadores personales.
Tambin, a principio de los ochenta se comienza a utilizar entre los usuarios de micros una
nueva terminologa informtica de bases de datos, sta era ms familiar en otros ambientes
informticos y defina con precisin los conceptos ms bsicos:
DBASE II proporciona un gestor de base de datos de tipo relacional con capacidad para
gestionar las bases de datos, interpretar interactivamente instrucciones y ejecutar bloques de
sentencias (programas).
George Tate fallecido tempranamente nunca pudo comprobar la revolucin que ocasionara
este producto, an en constante evolucin.
El xito obtenido entre los usuarios de micros, principalmente atrados por su versatilidad y
potencia, y los grandes beneficios producidos en su comercializacin, hizo que muchas
empresas de software se adherieran a la idea de desarrollar nuevos productos anlogos, una
gama de dialectos que hoy se les agrupa con el sobrenombre de entorno xBase (Clipper,
Quicksilver, Foxbase, etc).
En los ochenta, en pleno boom informtico DBASE sustituye a muchos lenguajes por la
potencia de sus rdenes y facilidad de uso. Por entonces, hubo que estar muy despierto a la
hora de seleccionar una herramienta de trabajo con futuro.
CLIPPER es un dialecto creado como otros tantos con la intencin de mejorar las
prestaciones de DBASE. Su primera versin se cre en 1985 en los laboratorios de
Natuncket. CLIPPER est escrito en lenguaje C y Ensamblador y se present como un
lenguaje atrevido que ha dado muchos quebraderos de cabeza en Ashthon-Tate. En el
primer contacto que se tiene con l es dificil encontrar muchas diferencias con respecto a
DBASE, ya que CLIPPER es un lenguaje formado por un conjunto de comandos y
funciones similares a las usadas con DBASE, incluso la mayora con igual formato
sintctico.
La presente gua est dividida en doce captulos. Cada captulo describe comandos y/o
funciones de Clipper referentes a temas concretos. El primero de ellos describe aspectos
tcnicos iniciales que es preciso conocer de este producto.
I. Caractersticas tcnicas.
1. Capacidades.
3. Requerimiento software.
Sistema Operativo :
DOS 2.0 o superior (monousuario)
DOS 3.1 o superior (multiusuario)
LAN : Bajo DOS. No requiere LAN Pack. Bloqueo manual.
4. Instalacin .
La instalacin de CLIPPER es muy fcil, basta con copiar el contenido de todos los
disquetes a un directorio o ejecutar el fichero CLIPCOPY.BAT que se encuentra en el disco
de Sistema.
5. Config.sys.
FILES = 20
BUFFERS = 8
Si se posee DOS 3.3 o superior es posible trabajar hasta con 255 ficheros abiertos
simultneamente. Para ello se debe indicar, en lugar de FILES = 20:
FILES = 255
6. Autoexec.bat.
En el fichero AUTOEXEC.BAT resulta de gran utilidad incluir una lnea de PATH. Esto
permitir ejecutar el compilador desde otros directorios de trabajo.
PATH C:\CLIPPER
7. Ficheros.
A los distintos ficheros que maneja CLIPPER podremos diferenciarlos por su extensin. Si
hemos utilizado anteriormente DBASE, la mayora nos resultarn familiares.
Otras distinciones a considerar son las referentes a las macros (en Clipper no pueden usarse
para sustituir a una palabra del sistema) y los ficheros ndices (en Clipper estn
optimizados).
Para desarrollar con CLIPPER tendremos que disponer de las siguientes herramientas
bsicas:
2. Escritura de programas.
Los requisitos bsicos a cumplir para la correcta escritura de los fuentes son:
e) Cuando sea necesario escribir lneas de instrucciones muy largas, podemos hacerlo en
lneas independiente escribiendo un punto y coma al final de la lnea.
La compilacin es una traduccin del fichero fuente (.PRG) para obtener un fichero objeto
(.OBJ). Consiste en transcribir cada instruccin desde el lenguaje simblico en que est
escrito el cdigo (CLIPPER) a cdigo comprensible por el enlazador del sistema operativo
(DOS).
Sintaxis:
Nuestro programa puede contener asimismo diversas llamadas DO a otros mdulos .PRG o
a procedimientos del mismo programa. Si no le especificamos lo contrario, CLIPPER
compila de forma automtica los ficheros llamados por DO.
4. Enlace.
a) Enlazadores
Sintaxis:
Sintaxis:
* TLINK (Borland)
Sintaxis:
Sintaxis:
b) Overlay
Todas las clasulas que deban indicarse al enlazador pueden situarse en un fichero de
enlace .LNK. El enlazador usa uno de estos ficheros conforme a la siguiente sintaxis:
PLINK86 @<via><Flnk>
Ejemplo_1: PRUEBA.LNK
FILE prueba
LIB clipper,extend
; (';'Indica el final del fichero .LNK)
* Librerias
CLIPPER.LIB
EXTEND.LIB
OVERLAY.LIB
* Overlays
El mayor problema con el que nos podemos encontrar, cuando estamos realizando una
aplicacin en Clipper, es que sta no nos quepa fsicamente en la memoria de trabajo de
nuestro ordenador.
El nico modo que tenemos de solucionar este problema es proceder a lo que denominamos
segmentacin, programacin por capas, solapas u overlays.
Cuando programamos usando esta tcnica, lo que hacemos es dividir la memoria RAM en
dos o ms reas de trabajo. En la primera de ellas (rea principal) se carga el mdulo
ejecutable, y en las reas de solape se cargan y descargan, conforme se van usando, los
diferentes mdulos overlay que hayamos definido.
CLIPPER prgprin -m
CLIPPER modulo1
CLIPPER modulo2
CLIPPER modulo3
PLINK86 @prueba
CLIPPER prgprin -m
CLIPPER modulo1
CLIPPER modulo2
CLIPPER modulo3
PLINK86 @prueba
(Para que Clipper produzca un fichero .EXE y tantos ficheros .OVL como mdulos para
overlays tengamos definidos, slo hay que cambiar la instruccin:
por
BATCH. Por defecto, cuando PLINK86 no encuentra un fichero .OBJ o .LIB de los
especificados, la operacin de enlace contina adelante.
LIBRARY. Especificar las libreras que sern enlazadas con los .OBJ.
NOBELL. Elimina el sonido que aparece con los mensajes del PLINK86.
SEARCH. Hace una segunda pasada por las libreras si tras terminar el enlace alguno de los
smbolos ha quedado sin definir.
SECTION. Determina que los mdulos objeto que se relacionan tras la palabra FILE
estarn en el rea de overlay abierta, pero no en un fichero independiente en disco.
Para crear un fichero de estructura vacia se usar el mandato CREATE. Para definir los
distintos campos de la futura base de datos emplearemos APPEND BLANK (para aadir un
registro en blanco) y REPLACE (para almacenar el contenido).
CREATE <Fstr>
Ejemplo_1:
CREATE clientes
USE clientes
APPEND BLANK
REPLACE FIELD_NAME WITH "CODIGO" reemplazar campos
REPLACE FIELD_TYPE WITH "C" reeplazar caracteres
REPLACE FIELD_LEN WITH 5
APPEND BLANK
REPLACE FIELD_NAME WITH "NOMBRE"
REPLACE FIELD_TYPE WITH "C"
REPLACE FIELD_LEN WITH 30
CLOSE
RETURN
Una vez creada la estructura pasaremos a generar la base de datos propiamente dicha con
CREATE FROM.
Ejemplo_2:
CREATE CLIENTES FROM CLIENTES
Tanto en la utilidad DOT porporcionada por Clipper como en el entorno Dbase podemos
crear bases de datos sin necesidad de escribir programas.
Los distintos tipos de campos que podemos definir en una base de datos son:
Para usar una base de datos emplearemos la sentencia USE especificando el fichero de base
de datos. Si existe un fichero memo asociado se abrir, y si se indic uno o ms ficheros
.NTX se activarn los ndices correspondientes. Tambin proporciona el alias adecuado.
El nmero mximo de ficheros ndices asociados es 15. EXCLUSIVE se emplea para redes
y posibilita la apertura de ficheros con uso exclusivo a un usuario.
Ejemplo_1:
USE CLIENTES
4. Modificar estructura.
MODIFY STRUCTURE
Ejemplo_1:
USE CLIENTES
MODIFY STRUCTURE
Hay que tener precaucin si existen registros en la base de datos ya que algunas
modificaciones pueden vaciarnos el contenido de uno o ms campos.
5. Aadir registros.
APPEND BLANK aade un registro vacio a nuestro fichero en uso. El puntero de la base
de datos se sita en el registro aadido. La sentencia REPLACE nos servir para
reemplazar el contenido de los campos.
6. Listar registros.
LIST y DISPLAY sirven para visualizar, imprimir o enviar a un fichero de texto, un registro
o conjuto de registros.
LIST [OFF] [<mbito>] [<Lcam>] [FOR <expL>] [WHILE <expL>] [TO PRINT/TO
FILE <ftxt>]
DISPLAY [OFF] [<mbito>] [<Lcam>] [FOR <expL>] [WHILE <expL>] [TO PRINT/TO
FILE <ftxt>]
Ejemplo_1:
USE CLIENTES
LIST
Ejemplo_2:
USE CLIENTES
LIST CODIGO
Ejemplo_3:
USE CLIENTES
DISPLAY FOR CODIGO > "50000" TO PRINT
7. Puntero de registro.
Clipper mantiene un puntero que indica el registro activo en cada momento. Tanto en
Clipper con en Dbase podemos conocer la posicin del puntero con la funcin RECNO().
En el ejemplo anterior al aadir el registro vacio el puntero se desplaza a la posicin que
ocupa este registro dentro de la base de datos. Podemos deducir que las sustituciones se
efectuarn ah.
Existen mandatos que afectan nicamente al registro activo. El puntero se puede desplazar
usando la sentencias GO y SKIP en sus distintas modalidades:
8. Editar un registro.
La edicin de registros es posible realizarla con varias sentencias. No es posible usar EDIT
de Dbase III. En Clipper la edicin de un registro puede realizarse con un grupo de GET's,
aunque existen otras sentencias ms avanzada como DBEDIT, MEMOEDIT, etc.
RANGE sirve para validar datos numricos entre los dos lmites especificados.
Ejemplo_1:
USE CLIENTES
GO 3
@ 1,1 SAY " Modifique codigo: " GET CODIGO
@ 2,1 SAY " Modifique nombre: " GET NOMBRE
READ
Ejemplo_2:
USE ALUMNOS
GO TOP
@ 1,1 SAY NOMBRE
@ 2,1 SAY " Modifique edad: " GET EDAD RANGE 1,7
@ 3,1 SAY " Modifique sexo: " GET SEXO PICTURE "!"; VALID(SEXO$"VH")
READ
9. Marcar un registro.
Clipper igual que Dbase permite marcar registros para posteriormente, si procede, borrarlos
definitivamente. Esto se har con la sentencia DELETE que marca con un asterisco el
registro activo. Puede marcarse ms de un registro usando la clasulas FOR o WHILE.
Ejemplo_1:
USE CLIENTES
GO 1
DELETE
Ejemplo_2:
USE CLIENTES
DELETE ALL
Ejemplo_3:
USE CLIENTES
DELETE RECORD 10
Ejemplo_4:
USE CLIENTES
DELETE FOR NOMBRE = "Mara"
PACK
Ejemplo_1:
USE CLIENTES
DELETE RECORD 10
PACK
Ejemplo_1:
USE CLIENTES
RECALL RECORD 10
ZAP borra todos los registros marcados o no de una base de datos manteniendo su
estructura.
Ejemplo_1:
USE CLIENTES
LOCATE FOR CODIGO > "10000" .AND. NOMBRE = "JOSE"
En una base de datos es posible contar registros, y realizar operaciones de suma y media
aritmtica. COUNT nos servir para contar, SUM para sumar el contenido de campos
numricos y AVERAGE para calcular la media aritmtica.
15. Exportar.
COPY TO Copia toda la base de datos en curso o slo una parte a un nuevo archivo.
<mbito> - Determina la porcin del archivo a copiar, por defecto es ALL (todo).
FIELDS <lista campos> - Son los campos a copiar a la nueva base de datos.
SDF - Especifica que el archivo de salida ser con formato ASCII, con campos de longitud
fija.
DELIMITED - Formato para el archivo de salida ASCII, con campos de longitud variable y
separados por comas. Si se desea pueden separase con espacios (BLANK), o con cualquier
otro delimitador.
Ejemplo_1:
USE HELP
COPY TO HELP.TXT SDF
16. Importar.
APPEND FROM aade datos a la base en uso a partir de otro archivo que puede ser que no
sea (.DBF). Podemos seleccionar loa datos a aadir mediante cualificadores.
FOR/WHILE <condicin> - Indican las condiciones que han de cumplir los registros para
ser agregados.
Ejemplo_1:
USE CLIENTES
APPEND FROM VENTAS FOR PEDIDO > 5000
IV. Indices.
1. Crear ficheros ndices.
INDEX indexa un fichero de datos por el campo que le indiquemos. Crea en disco un
fichero con la extensin .NTX. Pueden usarse tambin claves mltiples formada por la
suma de varios campos, de partes de campos, expresiones y campos, etc, pero recuerde que
el mximo nmero de caracteres de una clave ser de 250. Para sumar campos hemos de
tener siempre la precaucin de convertirlos previamente a cadena. Los ficheros ndices no
son compatibles con los de Dbase III. Cuando un ndice est abierto con su correspondiente
base de datos se actualiza de forma automtica. Una base de datos puede tener asociados
como mximo 15 ficheros ndices. Los registros que se encuentran marcados para ser
borrados tambin forman parte del ndice.
Ejemplo_1:
USE CLIENTE
INDEX ON NOMBRE TO NOMCLI
Ejemplo_2:
USE CLIENTE
INDEX ON NOMBRE+DTOS(FECHA) TO FECCLI
Ejemplo_1:
NOMBRE = SPACE(20)
FECHA = CTOD(SPACE(8))
USE CLIENTES INDEX NOMCLI,FECCLI,DOMCLI
SET ORDER TO 2
LIST NOMBRE,FECHA TO PRINT
SEEK <expr>
Ejemplo_1:
4. Area de trabajo.
SELECT selecciona las diferentes reas de trabajo en que vamos a situar nuestros ficheros
de datos. El ltimo SELECT que enunciemos es aquel que contendr el fichero activo.
SELECT <rea>/<alias>
<alias> es el nombre de un rea de trabajo existente si hay un fichero abierto en ese rea. Se
puede hacer referencia a las 10 primeras reas de trabajo con las letras A a J.
En Clipper se pueden utilizar 255 reas de trabajo. En cada rea de trabajo se pueden abrir
un fichero de base de datos y 15 ficheros ndices como mximo asociados a l.
Ejemplo_1:
SELECT 1
USE CLIENTES
SELECT 2
USE DIARIOVTAS
Ejemplo_2:
SELECT 1
USE CLIENTES INDEX NOMCLI ALIAS CLI
SELECT 2
USE DIARIOVTAS INDEX TOTALVTAS ALIAS DIA
...
...
SELECT CLI
SEEK "LUIS PEREZ"
IF FOUND()
CODCLI = CODIGO
SELECT DIA
SEEK CODCLI
IF FOUND()
@ 10,10 SAY PTASVENTAS
ENDIF
ENDIF
5. Cierre de ficheros.
CLOSE cierra el fichero de base de datos abierto en el rea activa as como sus ndices
asociados.
CLOSE DATABASES cierra todos los ficheros de todas las reas de trabajo, as como sus
correspondientes ndices.
CLOSE INDEX cierra todos los ndices del rea de trabajo activa.
CLOSE ALL cierra todos los ficheros abiertos.
V. Variables de memoria.
1. Tipos de variables.
Variable es un nombre asignado a una posicin de memoria que se puede utilizar para
almacenar un dato concreto. Los tipos de variables por el tipo de dato que contienen son:
-numricas
-alfanumricas
-lgicas
-fechas
Independientemente del tipo a que pertenezca una variable, debe asignrsele un nombre,
que puede ser de uno a diez caracteres pueden ser una combinacin de letras, dgitos o
signo de subrayado. El primer carcter de una variable de memoria debe ser una letra. Los
siguientes nombres son nombres de variables de memoria permitidos.
COMPRAS
Precio
I_V_A
MES_1_A_6
No debe utilizarse el mismo nombre para una variable y para un campo en la misma
aplicacin.
Las instrucciones STORE y el signo igual (=) pueden emplearse indistintamente para la
asignacin de datos a variables de memoria.
Ejemplo_1:
PTAS = 0
FECHA_ALTA = CTOD(SPACE(8))
STORE "enero" TO MES
4. Visualizacin de variables.
Para visualizar el contenido de una variable puede usarse la interrogacin (?) con los
siguientes formatos:
? <expr>
?? <expr>
Ejemplo_1:
? MES
?? "HOLA"
5. Expresiones.
Adems de servir como depsito temporal, las variables de memoria pueden utilizarse en
procesosde operaciones. Una variable de memoria puede ser incluida en una expresin para
definir un procedimiento, para describir una condicin en una instruccin o para servir
como elemento de salida (resultado de una operacin).
Pueden utilizarse diferentes tipos de expresin. Una expresin puede incluir un campo de
datos, una variable de memoria, una constante o una combinacin de todo ello. Sin
embargo, todos los elementos de una expresin deben ser del mismo tipo.
Prioridad mxima : ** ^
Prioridad secundaria: * /
Baja prioridad : + -
PUBLIC declara variables de memoria como globales o pblicas. Estas pueden modificar
su valor en cualquier parte del programa.
PUBLIC <Lvar>
PRIVATE <Lvar>
LIKE <masc> salva en el fichero todas las variables cuya estructura sea semejante a la
especificada en <masc>. Recuerde que puede hacer uso de los smbolos comodines: * y ?.
EXCEPT <masc> salva todas las variables que no tengan una estructura semejante a
<masc>.
Al restaurar las variables de memoria, stas son privadas, a no ser que se especifiquen
como pblicas antes de restaurarlas y se utilice la clasula ADDITIVE.
Ejemplo_1:
conf_cla = "1234"
conf_dis = "A"
conf_dir = "C:\GESTION\"
conf_mar = 20
conf_col = "S"
SAVE TO CONFIG ALL LIKE conf_*
Ejemplo_2:
ALL LIKE <masc> indica que sean eliminadas todas las variables cuya estructura sea
semejante a la expresada en <masc>. Se pueden usar los comodines: * y ?.
ALL EXCEPT <masc> indica que sean borradas todas las variables que no concuerden con
la estructura expresada en <masc>.
Ejemplo_1:
conf_cla = "1234"
conf_dis = "A"
conf_dir = "C:\GESTION\"
conf_mar = 20
conf_col = "S"
RELEASE ALL
9. Macros.
Las macros sirven en CLIPPER para forzar la sustitucin de una variable por su valor en
aquellos puntos de programa donde por si misma la variable no se traducira. Cuando tras
una macro se sigue algn tipo de expresin hemos de indicar al sistema que la macro
termina con un punto (.).
&<vmem>
Ejemplo_1:
nombre = "lpiz"
? "Artculo: &nombre"
Ejemplo_2:
base = "CLIENTES"
USE &base
Ejemplo_3:
a) Operadores lgicos.
.AND. (Y adems)
.OR. (O adems)
.NOT. (Negacin)
! (Negacin)
Ejemplo_1:
Ejemplo_2:
IF !FILE("CLIENTES.DBF")
@ 1,1 SAY " Error no encuentra base de datos "
ENDIF
.T. (Verdadero)
.F. (Valso)
.Y. (Si)
.N. (No)
Ejemplo_1:
JUBILADO = .Y.
IF JUBILADO
..
ENDIF
Ejemplo_1:
DO CASE
CASE MES = 1
....
....
CASE MES >= 2
....
....
ENDIF
RANGE sirve para validar datos numricos, indicando un lmite inferior y un superior.
Entre estos lmites deber estar comprendido en dato numrico para que sea vlido.
Ejemplo_1:
nombre = SPACE(20)
@ 2,1 SAY "Teclear nombre: " GET nombre PICTURE "@!"
READ
Ejemplo_2:
edad = 0
@ 3,3 SAY "Teclear edad: " GET edad PICTURE "999" RANGE 19,125
READ
Ejemplo_3:
resp = SPACE(1)
@ 5,5 say " GRABAR ? " GET resp "!" VALID(resp$"SN")
READ
Ejemplo_4:
importe = 0
@ 5,5 SAY " TECLEAR IMPORTE: " GET importe PICTURE "@E9,999.99"
READ
ACCEPT acepta datos alfanumricos por pantalla y los carga en <mven>. No es necesario
haber declarado previamente <Vmen>.
Ejemplo_1:
INPUT Acepta datos por pantalla. Los datos han de ser identificados con sus
correspondientes indicadores, as, por ejemplo, una cadena de carcteres deber escribirse
entrecomillada, mientras que esto no ser preciso con un nmero.
Ejemplo_1:
2. Pausa.
INKEY() detiene por un tiempo el flujo del programa y devuelve el valor de la tecla que se
est pulsando.
INKEY([<expN>])
Ejemplo_1:
tecla = INKEY(0)
Pulsando [enter],
tecla = 13
LASTKEY() devuelve el valor de la ltima tecla pulsada. Dicho valor es un nmero que se
corresponde con el valor ASCII del carcter.
Ejemplo_1:
INKEY(0)
DO CASE
CASE LASTKEY() = 27
RETURN
CASE CHR(LASTKEY()) = "+"
.....
CASE LASTKEY() = 13
.....
ENDCASE
4. Salida.
Ejemplo_1:
TEXT
*********************
ERROR
*********************
ENDTEXT
Ejemplo_2:
a=4
b=5
c=3
? (a*b)**c
5. Borrar pantalla.
CLEAR borra la pantalla, manteniendo los atributos de color vigente, y libera todos los
GET pendientes. Asimismo, posiciona el cursor en la posicin 0,0 (posiciones verticales 0 a
24 / posiciones horizontales 0 a 79).
Ejemplo_1:
6. Dibujar un marco.
@..BOX construye una caja entre las coordenadas indicadas y con los cdigos ASCII
especificados en <expC>. El orden de los caracteres es:
Ejemplo_1:
cadena = "+-++-+"
@ 1,1,10,10 BOX cadena
8. Hacer un men.
SET MESSAGE determina el nmero de fila donde aparecern los mensajes de las distintas
opciones.
MENU TO sirve para leer el valor numrico que representa a la opcin seleccionada. Dicho
valor se asigna automticamente y representa el nmero de orden de cada PROMPT.
Ejemplo_1:
SET WRAP ON
SET MESSAGE TO 23 CENTER
@ 1,1 PROMPT "ALTA " MESSAGE "Alta de usuarios "
@ 2,1 PROMPT "BAJA " MESSAGE "Baja de usuarios "
@ 3,1 PROMPT "LISTADO " MESSAGE "Listado DESDE/HASTA"
MENU TO opcion
DO CASE
CASE opcion = 1
.....
CASE opcion = 2
.....
CASE opcion = 3
.....
ENDCASE
9. Salvar/Restaurar pantallas.
Ejemplo_1:
Ejemplo_2:
Bifurca un programa entre una condicin y su opuesta. Puede usarse como mandato o como
funcin. En el primer caso, lo que hace es ejecutar alternativamente unas instrucciones u
otras y en el segundo devolver alternativamente un valor u otro. La sintxis de la funcin
puede ser IF() o IIF().
Mandato:
IF <expL>
<instrucciones>
[ELSEIF <expL>]
<instrucciones>
[ELSE
<instrucciones>]
ENDIF
Funcin:
IIF/IF(<expL>,<.T.>,<.F.>)
ELSE realiza las distintas rdenes que se indican cuando la condicin es falsa.
Ejemplo_1:
IF sexo = "V"
peso = 20
ELSE
peso = 12
ENDIF
Ejemplo_2:
IF porcentaje > 10
porcentaje = porcentaje - 2
ENDIF
Ejemplo_3:
DO CASE
CASE <expL>
<instrucciones>
CASE <expL>
<instrucciones>
OTHERWISE
<instrucciones>
ENDCASE
DO CASE
CASE velocidad > 180
consumo = 4
CASE velocidad > 120
consumo = 3
CASE velocidad > 80
consumo = 2
OTHERWISE
consumo = 1
ENDCASE
Permite la creacin de una estructura de bucle que se ejecuta para un rango de valores
determinados de forma ascendente o descendente.
LOOP pasa de nuevo el control al comienzo del bucle, sin necesidad de que se llegue a
NEXT.
Ejemplo_1:
FOR N=1 TO 10
CUADRADO = N**N
? CUADRADO
NEXT
DO WHILE <expL>
<instrucciones>
[EXIT]
[LOOP]
ENDDO
LOOP manda todo el proceso de nuevo al comienzo del bucle, sin necesidad de que se
llegue al final, es decir a ENDDO.
EXIT fuerza a que se pare el proceso y sale del bucle aunque la condicin no haya cesado
de darse.
Ejemplo_1:
DO WHILE .T.
@ 2,2 PROMPT "CLIENTES"
@ 3,2 PROMPT "PROVEEDORES"
MENU TO opcion
DO CASE
CASE opcion = 1
DO CLI
CASE opcion = 2
DO PRO
CASE LASTKEY() = 27
CLEAR
RETURN
ENDCASE
ENDDO
Ejemplo_2:
C=0
DO WHILE C<100
C=C+1
?C
ENDDO
VIII. Fin.
1. Retornar.
RETURN termina un procedimiento, programa, o funcin, devolviendo el control al
procedimiento de llamada o al DOS.
Ejemplo_1:
PROCEDURE BORRAR
PARAMETERS X1,Y1,X2,Y2
@ X1,Y1 CLEAR TO X2,Y2
RETURN
2. Terminar.
Este mandato realiza la misma funcin que CANCEL o que RETURN en el procedimiento
de ms alto nivel.
Ejemplo_1:
3. Cancelar.
Ejemplo_1:
clave = SPACE(4)
@ 4,4 SAY "Clave: " GET clave PICTURE "@!"
READ
IF clave # "9876"
CANCEL
ELSE
ENDIF
<fich1> es el nombre inicial del fichero y <fich2> es el nuevo nuevo. Tanto <fich1> como
<fich2> deben incluir la extesin del fichero.
Ejemplo_1:
2. Copiar ficheros.
COPY FILE copia el contenido de <fich1> en <fich2>. No sirven con este mandato los
comodines para copiar varios ficheros en bloque. Salvo esta excepcin funciona igual que
el COPY del DOS.
Es importante recordar que siempre hemos de proporcionarle las vas donde buscar los
ficheros a copiar y donde queremos copiarlos. Si no se le especifica esta ltima el fichero se
deposita en el directorio de trabajo.
Ejemplo_1:
3. Borrar ficheros.
DELETE FILE y ERASE borran ficheros. Al especificar el nombre del fichero a borrar
debe figurar tambin su extensin. Antes de usar este comando es necesario cerrar el
fichero a borrar con el comando CLOSE.
USE CLIENTES
..
..
CLOSE DATABASES
DELETE FILE CLIENTES.DBF
4. LLamada al Dos.
RUN <sent>
! <sent>
Ejemplo_1:
Antes de realizar cualquier operacin con un fichero podemos comprobar su existencia con
la funcin FILE() que nos retornar un verdadero (.T.) o un falso (.F.).
FILE(<fich>)
Ejemplo_1:
IF FILE("CLIENTES.DBF")
SORT ON NOMBRE TO CLISORT
DELETE FILE CLIENTES.DBF
ENDIF
X. Procedimientos y funciones.
1. Procedimiento.
Ejemplo_1:
CLEAR
DO FONDO
INKEY(0)
RETURN
PROCEDURE Fondo
FOR I=0 TO 24
@ I, 0 SAY REPLICATE("", 80 )
NEXT
RETURN
2. LLamada a un procedimiento.
Ejemplo_1:
PROCEDURE LISTACURSOS
IF !ISPRINTER()
DO MSGIMPRESORA
ENDIF
* rdenes ...
RETURN
PROCEDURE MSGIMPRESORA
CLEAR
@ 9, 28 TO 12, 51
@ 10,30 SAY "CONECTE LA IMPRESORA"
@ 11,32 SAY "Y PULSE UNA TECLA"
INKEY(0)
RETURN
Ejemplo_1:
PROCNAME()
Ejemplo_1:
PROCLINE() Devuelve el nmero de la lnea del cdigo fuente en curso del programa.
Siempre que no le hayamos indicado al compilador que no numere las lneas.
PROCLINE()
Ejemplo_1:
Ejemplo_1:
CLEAR
@ 24,0 SAY ISBISIESTO( DATE() )
RETURN
FUNCTION ISBISIESTO
PARAMETERS DFECHA
PRIVATE DANY, CCADENA, LDEVUELVE
DANY = YEAR( DFECHA )
CCADENA = CTOD( "29-02-" + STR(DANY))
IF DOW(CCADENA)=0
LDEVUELVE = .F.
ELSE
LDEVUELVE = .T.
ENDIF
RETURN LDEVUELVE
PCOUNT()
Ejemplo_1:
PROCEDURE EDITOR
PARAMETERS CFICHERO
IF PCOUNT() = 0
@ 24,0 SAY "INDIQUE EL FICHERO: " GET CFICHERO
READ
ENDIF
XI. Tablas.
1 Declaracin tablas.
Una tabla es un rea de memoria que puede reservarse para contener un grupo de datos.
Una tabla consta de un identificativo o nombre y un nmero definible de posiciones (de 1 a
1024 en Clipper '87). Estas posiciones pueden contener datos numricos, alfabticos,
fechas, etc. Para acceder a uno de los datos contenido en una tabla se har indicando el
nmero de posicin que ocupa. Existen varias funciones que posibilitan realizar
operaciones en una tabla tales como aadir nuevos datos, eliminar datos, rellenar, etc. Este
tipo de estructuras de memoria se utilizan como soporte temporal de los datos.
DECLARE declara una o ms reas de memoria (arrays) con una longitud especfica. Antes
de poder realizar cualquier operacin con una tabla debemos declararla.
DECLARE <array>[<expN>]{,<array>[<expN>]...}
Ejemplo_2: numero = 8
DECLARE PROVINCIA[numero]
Ejemplo_3: tipo = "FICHA"
numero = "01"
tabla = tipo+numero
DECLARE &tabla[4]
&tabla[1] = "ANDALUCIA"
&tabla[2] = 8
&tabla[3] = .T.
&tabla[4] = CTOD("01/01/92")
2 Longitud.
LEN es una funcin que devuelve el nmero de elementos que tiene una tabla, o lo que es
lo mismo la longitud de la tabla indicada.
LEN(<array>)
3 Insertar.
4 Suprimir.
ADEL(<array>,<expN>)
5 Copiar.
La copia de un elemento o grupo de elementos de una tabla a otra tabla la realiza la funcin
ACOPY, debiendo indicarse la tabla origen, la tabla destino, la posicin inicial de la tabla
origen, el n de elementos a copiar y el elemento de la tabla destino donde ha de
comenzarse la copia.
ACOPY(<array1>,<array2>[,<expN1> [,<expN2>[,<expN3>]]])
6 Rellenar.
AFILL(<array1>,<expr>[,<expN1>[,<expN2>]])
7 Directorio.
ADIR accede al directorio del disco almacenado en tablas informacin relativa a los
ficheros y directorios.
8 Estructura.
La estructura de una base de datos puede conocerse mediante la funcin AFIELDS. Los
nombres de campos, tipo, longitud, etc. pueden almacenarse en tablas para el posterior
tratamiento.
9 Men.
ACHOICE es una funcin que permite generar un men de persiana con los elementos de
una tabla en las posiciones de pantalla que se indiquen. Devuelve un valor de tipo numrico
que se corresponde con el nmero de posicin del elemento seleccionado. Si el valor es 0
no se seleccion ningn elemento.
DBEDIT visualiza el contenido de una base de datos en pantalla. Es una potente funcin
que permite la edicin de los datos sobre una ventana definida en pantalla.
Cuando se utiliza una funcin de usuario, DBEDIT() pasa de forma automtica dos
parmetros:
1-Estado actual de DBEDIT() dependiendo de la ltima tecla pulsada antes de llamar a la
funcin. Las diferentes modalidades del estado son:
0 Inactividad
1 Se ha intentado sobrepasar el primer
2 Se ha intentado sobrepasar el ltimo registro
3 El fichero de datos se encuentra vacio
4 Se ha pulsado una tecla especfica
2-Posicin que ocupa en la tabla el campo sobre el que nos encontramos posicionados.
Valores de retorno:
Ejemplo_1:
DECLARE
TAB1[3],TAB2[3],TAB3[3],TAB4[3],TAB5[3],TAB6[3],TAB7[3]
* Nombre campos
TAB1[1]= "BAS_LOC"
TAB1[2]= "BAS_PRO"
TAB1[3]= "BAS_HAB"
* Mscaras de visualizacin
TAB2[1]= "XXXXXXX"
TAB2[2]= "XXXXXXX"
TAB2[3]= "999,999,999"
* Encabezados de columna
TAB3[1]= "LOCALIDAD"
TAB3[2]= "PROVINCIA"
TAB3[3]= "HABITANTES"
* Separadores de encabezados
TAB4[1]= "D"
TAB4[2]= "D"
TAB4[3]= "D"
* Separadores de columnas
TAB5[1]= "3"
TAB5[2]= "3"
TAB5[3]= "3"
TAB6[1]= "D"
TAB6[2]= "D"
TAB6[3]= "D"
* Pies de pgina
TAB7[1]= "DPIE_1D"
TAB7[2]= "DPIE_2D"
TAB7[3]= "DPIE_3D"
CLEAR
USE BASE
DBEDIT(1,1,7,40,TAB1,"",TAB2,TAB3,TAB4,TAB5,TAB6,TAB7)
XII. Impresora.
1. Salida.
SET DEVICE redirecciona las salidas por pantalla o por impresora. Por defecto es por
pantalla.
Ejemplo_1:
PROCEDURE LISTACURSOS
IF !ISPRINTER() && Impresora no conectada
DO MSGIMPRESORA && Mensaje que conecte
INKEY(0)
ENDIF
SET DEVICE TO PRINT
USE CURSOS INDEX CURSOS
GO TOP
NPAGINA = 1 && Contador de pginas
NFILA = 5 && Contador de filas
@ 0,0 SAY CHR(15) && Impresin comprimida
* CABECERA
* FIN CABECERA
* REPETICION DE LA CABECERA
NFILA = 5
ENDIF
SKIP && Incrementamos registro
ENDDO
CLOSE
EJECT
@ 0,0 SAY CHR(18) && Desactivamos comprimido
SET DEVICE TO SCREEN
RETURN
2. Salto de pgina.
EJECT realiza un salto de pgina en la impresora, y pone a cero los valores de la fila y la
columna de la impresora.
Use SETPRC() si necesita poner a cero los valores internos de fila y columna de la
impresora sin enviar un salto de pgina.
EJECT
PCOL()
Ejemplo_1:
PROW()
Ejemplo_1:
ISPRINTER()
Ejemplo_1:
DOSERROR()
Ejemplo_1:
IF DOSERROR() = 28
? "Falta papel"
ENDIF
2. Numricas.
3. Cadenas.
AT() Devuelve un nmero que indica la posicin de comienzo de una cadena de caracteres
dentro de otra.
4. Fechas.
5. Hora.
TSTGRING() Dada una cantidad de segundos nos devuelve dicha cantidad en formato
hora.
SET DECIMALS TO <expN> Fija el nmero de los decimales a mostrar en los resultados
de las funciones numricas y clculos.
AMERICAN mm/dd/aa
ANSI aa.mm.dd
BRITISH dd/mm/aa
ITALIAN dd-mm-aa
FREMCH dd/mm/aa
GERMAN dd.mm.aa.
SET FILTER TO <condicin> Hace que la base de datos se vea como si slo contuviese los
registros que cumplen la condicin.
SET INDEX TO <lista ficheros> Abre el ndice indicado y cierra los anteriores abiertos con
la misma base de datos.
SET BELL on/OFF Determina cundo suena la alarma durante la entradade datos.
SET CENTURY on/OFF Determina si una fecha debe mostrar los dgitos del siglo o no.
SET CONFIRM on/OFF Determina si se requiere pulsar return para cada GET.
SET INTENSITY ON/off Muestra los campos de entrada durante los GETs en color o en
vdeo inverso.
SET UNIQUE on/OFF Determina si slo los registros con clave no repetida aparecern en
el ndice.
RLOCK() Bloquea/desbloquea el registro actual del rea de trabajo en curso. Para utilizar
en redes locales.
RLOCK() / LOCK()
2. Bloqueo de ficheros.
FLOCK()
3. Desbloqueo.
UNLOCK [ALL]
ALL - Quita todos los bloqueos en curso de todas las reas de trabajo.