Está en la página 1de 62

CLIPPER BSICO

OBJETIVO TERMINAL:
Al finalizar el curso el alumno estar en condiciones de elaborar programas en
Clipper que le permitan manejar archivos de datos en aplicaciones varias.

DURACIN: 16 HORAS.

CONTENIDO

1.- Conceptos Bsicos


1.1. Archivo.
1.2. Base de Datos
1.3. Operaciones con archivos

2.- Generalidades del Clipper


2.1. Que es Clipper
2.2. Caractersticas de Clipper
2.3. Requerimientos de Clipper

3.- Programando con Clipper


3.1. Variables y Operadores
3.2. Estructuras de Decisin
3.3. Estructuras de Repeticin
3.4. Edicin de un programa
3.5. Entrada y salida de datos

4.- Compilacin y prueba de un Programa

5.- Manejo de Archivos


5.1- Creacin de archivos
5.2- Apertura y cierre de archivos
5.3- reas de trabajo
5.4- Adicin de registros
5.4.1- Comando append
5.4.2- Comando replace
5.5- Movimiento dentro del archivo
5.5.1- Comando goto : bottom / top
5.5.2- Comando skip
5.6- Borrado de registros
5.6.1- Marcar registros para eliminacin
5.6.2- Funcin delete( )
5.6.3- Comando set delete
5.6.4- Recuperacin de los registros
5.6.7- Eliminacin fsica de los registros

5.7- Bsqueda secuencial en un archivo


5.7.1- Comando locate
5.7.2- Comando continue
5.8- Creacin y apertura de archivos indexados
5.8.1- Orden Index on ( ) to

5.8.2- Orden Set index to


5.9- Bsqueda indexada en un archivo
5.9.1- Comando find
5.9.2- Comando seek

6.- Procedimientos y Funciones en Clipper

7.- Manejo de arreglos en Clipper

8.- Presentacin de datos en Pantalla

9.- Diseo, elaboracin y prueba de un sistema sencillo.

10.- Compilacin y Encadenamiento

- Libreras Pre-encadenadas
- Compilacin por Mdulos
- Encadenamiento con Archivos ( .LNK )
- Creacin de Archivos Overlay ( .OVL )
- Encadenamiento de Libreras Externas.

11.- Macro-Sustitucin y Bloques de Cdigo.

12.- La Funcin Achoice()

13.- La Funcin Dbedit()

14.- Manejo de Mouse

- Funcin MouseMenu()
- Funcin ChoiceMenu()

15.- Introduccin a la Programacin Orientada a Objetos ( POO )

- La Clase Get()

- La Clase Tbrowse()

16.- Manejo de Ayudas

- La Funcin Memoedit().
- Creacin de un Editor de Texto.

17.- Manejo del Clipper en una Red de rea Local ( L.A.N. )

- Introduccin
- Funciones y Comandos
- Limitaciones y Recomendaciones
- Creacin de Funciones para la Apertura de Archivos.
- Creacin de Funciones para el Bloqueo de Archivos y Registros.

CONCEPTOS BSICOS

1.- Dato
Del Latn data que significa hecho, entidades independientes sin evaluar. Los
datos pueden ser numricos o no numricos. Un conjunto de datos se convierten en
informacin cuando son evaluados y procesados. Para que este conjunto de datos se
procese eficientemente debe estar organizado lgicamente en archivos.

1.- Archivo
Un conjunto de registros del mismo tipo recibe el nombre de Archivo. Un
registro, a su vez es un conjunto de campos con relacin entre s, y un campo es la
unidad ms pequea a la que se puede referir un dato. La figura siguiente nos muestra
de una forma grfica lo que sera un archivo, un registro y un campo.

REGISTRO 1

CAMPO 1
DEL

CAMPO 2
DEL

REGISTRO 1

REGISTRO 1

CAMPO 1
DEL

CAMPO 2
DEL

REGISTRO 3

REGISTRO 3

REGISTRO 2

REGISTRO 3

ARCHIVO

2.- Base de Datos


Es una coleccin de archivos interrelacionados creados con un Sistema de
Manejo de Bases de datos, y que pueden ligarse de diferentes maneras.

3.- Operaciones con Archivos

Los datos que tienen relacin entre s se almacenan u ordenan como se dijo en
los campos de un registro, estos campos pueden ser manipulados de forma tal que el
usuario que los necesita pueda utilizarlos, guardndolos, cambindolos o borrndolos
segn sea el caso; si esto se hace con los campos es valedero decir que lo mismo se
puede hacer con los registros y por ende se hace con los archivos. Es oportuno acotar
aqu que la data debe protegerse y que por lo tanto cualquier aplicacin que se
desarrolle para manejar archivos, debe llenar como primer requisito la conservacin y
proteccin de los datos.

GENERALIDADES SOBRE CLIPPER

Clipper es un manejador de archivos con ciertas caractersticas de un manejador


de Base de Datos y surge como la necesidad de suplir algunas deficiencias del DBASE,
siendo la mas resaltante la de ser un Compilador, motivo ste por el cual se acelera la
ejecucin de un programa escrito en DBASE. Provee adems un conjunto de rdenes y
funciones propias que han sido desarrolladas con el paso de los aos convirtindolo en
el Manejador de Archivos ms popular.

Sin Compararlo con DBASE podramos decir qu sus caractersticas son:

- Compilador Profesional.
- Un conjunto de rdenes y Funciones que permiten un mejor y ms fcil manejo de la
programacin.
- Permite programacin por capas, no existiendo por lo tanto lmite para la dimensin de
un programa.
- Permite la definicin de funciones por parte del usuario.
- Puede conectarse con rutinas externas de otros lenguajes.

En cuanto a los requerimientos de Hardware Clipper es poco exigente, sin


embargo se recomienda que el equipo tenga Disco Duro y por lo menos un Mega de
memoria Ram. Sin embargo no es lo mismo cuando se desarrollan aplicaciones ya que
los requerimientos dependen en s ms de la aplicacin que de Clipper.

De la misma forma en entorno de Software necesario es mnimo, Sistema


operativo DOS, y un config.sys con Buffers no menores a 20 y Files no menores de 40.

PROGRAMACIN EN CLIPPER

1.- Variables y Operadores

Una variable de memoria es un pedazo de memoria del computador que recibe


un nombre o identificador y almacena temporalmente un dato. Una variable de
memoria puede almacenar nmeros, cadenas de caracteres, una fecha o un valor lgico.

Los identificadores de variables en Clipper pueden tener hasta diez (10)


caracteres y deben empezar por una letra, no puede tener espacios, no pueden ser
palabras de uso propio de Clipper (palabras reservadas).

Se pueden crear de dos formas diferentes:


Con el uso del comando STORE, ejemplo STORE
<valor>
<Identificador> o por medio de la asignacin; ejemplo Identificador = valor

Ejemplos segn tipo:

NUMRICAS:

LGICAS

store 0 to cdigo

store .t. to ciclo

cdigo = 0

ciclo = .t.

TO

TIPO FECHA

Clipper dispone de la funcin CTOD() para crear e inicializar variables del tipo
fecha.

store CTOD(28/04/96) to hoy

Cuando se desea inicializar mas de una variable del mismo tipo se puede
emplear cualquiera de la siguientes formas:

- STORE <VALOR> TO VAR1, VAR2, VAR3


- VAR1=VAR2=VAR3= <VALOR>

TIPO ARRAY
Clipper maneja los arreglos como un conjunto de datos o variables con el mismo
nombre y su declaracin es como sigue:

DECLARE VAR []

Donde var corresponde al identificador del arreglo y dentro de los corchetes se


coloca un nmero que le indica a Clipper cuantas variables con ese nombre va a
manejar, ejemplo:

Declare cliente[3] as:


cliente[1] podra ser el nombre
cliente[2] la direccin y
cliente[3] el telfono del cliente

Los arreglos en Clipper puede ser tambin multidimensionales, veamos el


ejemplo de creacin de un arreglo multidimensional

Declare clientes[3] [3]


En este caso se trata de una matriz de 3 columnas y 3 filas

Operadores

Clipper maneja operadores numricos, de cadena, de relacin y lgicos; su


descripcin se enumera a continuacin:

Numricos:

---------------> Suma

---------------> Substraccin

Cadena

*
---------------> Producto
Comparacin de subcadenas.
/

----------->

---------------> Divisin

** o ^
%

---------------> Concatenacin

---------------> Exponenciacin

---------------> Modulo

Relacionales

Lgicos

>

---------------> Mayor que

.and.

---------------> Y

lgico

<

---------------> Menor que

.or.

---------------> O

lgico

=
---------------> Igual que
lgico

.not.

---------------> NO

== o ++ --------------> Exactamente igual que


<=

---------------> Menor o igual que

>=

---------------> Mayor o igual que

!= o <>

---------------> Diferente

Clipper maneja los siguientes operadores de asignacin:

---------------> Asignacin simple

:=

---------------> Asignacin en lnea

=+

---------------> Adicin y asignacin en la lnea

-=

---------------> Substraccin y adicin en la lnea

*=

---------------> Producto y asignacin

/=

---------------> Divisin y asignacin en lnea

Clipper clasifica las variables de memoria en cuatro clases: PUBLIC, PRIVATE,


LOCAL Y STATIC.

- Una variable declarada como PUBLIC es visible para cualquier programa del
sistema. Son denominadas tambin GLOBALES.

- Una variable declarada como LOCAL solo existe mientras se est ejecutando
el programa en el que fue declarada. El valor se pierde al retornar al programa principal.

- Las variables declaradas como STATIC funcionan de forma parecida a las


locales, solo que su valor no se pierde y sigue disponible cuando se llama por segunda
vez al programa donde se encuentra.

- Cuando una variable se declara PRIVATE, sta es visible desde todos los
programas que llame el programa en el cual fue declarada. Si una variable no es
declarada especficamente automticamente se considera de tipo PRIVATE.

2.- Estructuras de Decisin

En Clipper se encuentra la estructura de decisin simple si entonces, la


compuesta si entonces .... de lo contrario (si no) y la de decisin mltiple caso; sus
sintaxis se enumeran a continuacin:

if <condicin>
instruccin o instrucciones
endif

if <condicin>
instruccin o instrucciones
else
instruccin o instrucciones
endif

La condicin para efectuar la toma de decisiones debe ser una condicin lgica o
relacional, ejemplo:
if conta = 3
v=4

if conta = 3
v=4

endif

else
v = v+1
endif

if conta = .t.

if conta > conta1

v=4

v=4

endif

else
v = v+1

endif
DO CASE
CASE <variable> = <valor1>
instruccin o instrucciones
CASE <variable> = <valor2>
instruccin o instrucciones
CASE <variable> = <valorn>
instruccin o instrucciones
ENDCASE

3.- ESTRUCTURAS DE REPETICIN

Clipper trabaja con dos estructuras repetitivas, el DO WHILE y el FOR...


NEXT, la sintaxis de esta son:

DO WHILE <condicin>
instruccin o instrucciones
ENDDO

Esta estructura es la principal y la ms utilizada para controlar la ejecucin


global de un programa en Clipper. Su funcionamiento depende de la evaluacin que se
hace inicialmente de la condicin, si es verdadera se ejecutan los comandos
(instrucciones) que se encuentran entre el DO WHILE y el ENDDO, al llegar al enddo
el programa testea nuevamente la condicin, si esta deja de cumplirse el ENDDO
entrega el control del programa a la lnea siguiente del ENDDO.
El ciclo DO WHILE puede ser interrumpido usando el comando EXIT, esto es
muy usado por los programadores cuando se desea interrumpir el ciclo al cumplirse un
hecho o condicin.

De igual forma que el ciclo puede interrumpirse, es posible ordenarle que se


repita, para ello Clipper provee de la instruccin LOOP.
FOR <variable> = <valor inicial> TO <valor final> [STEP <incremento>]
Instruccin o instrucciones
NEXT

El ciclo se ejecuta de la siguiente forma: para la variable comenzando con valor


inicial y variando hasta valor final se ejecutan las instrucciones entre el FOR y el NEXT
el cual incrementa el valor de la variable hasta superar el valor final, momento en el
cual el control del programa es transferido a la lnea siguiente al NEXT.

EDICIN DE UN PROGRAMA

Clipper trae un editor de programas llamado PE, sin embargo permite que las
aplicaciones puedan ser escritas en procesadores de texto como WordStar o el Edit del
Sistema operativo.

Si deseamos usar el PE debemos escribir a nivel del punto indicativo del


DOS: PE <nombre> y pulsar ENTER, una vez dentro del editor podemos transcribir
nuestro programa; finalizada la tarea de transcripcin debemos pulsar las teclas Ctrl-W
y el editor sale al dos y salva el programa con la extensin prg.

Si usamos otro editor debemos tener presente al salvarlo agregar la extensin


prg, as si usamos el Edit del DOS podramos seguir el siguiente procedimiento: Edit
<nombre.prg> para estar seguros de colocar la extensin correcta, ya que sin ella
Clipper no lo compila.

Clipper tiene como nica exigencia que cada orden debe estar en una lnea
diferente ya que no posee un separador de rdenes, por lo tanto al momento de
transcribir el programa debemos pulsar enter despus de cada instruccin para separarla
de la siguiente.

Cuando se desarrolla una aplicacin siempre es conveniente documentarla


brevemente para ello Clipper posee cuatro formas de colocar comentarios en los
programas.

* Usado para una sola lnea de comentario y puede ir en cualquier parte del programa.
/* .... */ Usado cuando el comentario ocupa ms de una lnea
&& o // se emplea cuando el comentario se coloca en la misma lnea que un comando.

ENTRADA Y SALIDA DE DATOS

Para la captura de datos y presentacin de estos y mensajes Clipper provee de las


instrucciones: ACCEPT, ? y ??, As por ejemplo se desea capturar un numero con la
variable nmero_1, la sintaxis sera:

ACCEPT mensaje nmero_1

Para escribir el valor de la variable nmero_1, se debe escribir la siguiente


orden:
? nmero_1

Y si lo que se desea es acompaar la escritura de la variable con un mensaje


entonces debemos escribir la orden as:
? El valor de la variables es: , nmero_1

La orden ? es interpretada por Clipper como que debe escribir lo que est entre
comillas(si lo hay) y/o el valor de la variable, saltando a la lnea siguiente una vez
ejecutada la orden. La orden ??, se ejecuta de igual forma pero no salta a la otra lnea
sino que permanece en la misma lnea en la que acaba de escribir.

Es deseable que la entrada y salida de datos no est en forma desordenada, sino


que por lo contrario muestre un aspecto agradable al usuario, para ello Clipper usa las
instrucciones @ SAY, @GET y PICTURE.

La primera de ellas permite colocar el cursor en cualquier punto de la pantalla,


tomando como base que Clipper divide la pantalla en 25 filas y 80 columnas siendo 0,0
la primera posicin y 25,79 la ltima; la sintaxis de la orden es:
@ fila,columna SAY mensaje

La orden @ Get funciona de forma similar solo que en lugar de escribir un valor
o mensaje, se coloca en la posicin indicada para leer un dato.
@ fila,columna GET variable
La orden PICTURE tiene como funcin dar forma al dato que se va a visualizar,
ello se logra colocando despus de orden y entre comilla cualquiera de los siguientes
modificadores:
9o#

para indicar que visualizar un dgito.

AoN

para indicar que se visualizar una letra

para indicar que se visualizar un dato lgico

!
Maysculas.

indica que la visualizacin de letras se har en

ejemplo:
@ 2,4 say Nombre del Usuario get Nombre picture !x
@ 2,4 say Nombre del Usuario Nombre picture !x

Como complemento de la orden picture Clipper provee de funciones de plantilla


!...........................................
Maysculas.

Transforma

los

caracteres

mostrndolos

en

(........................................... Coloca los nmeros negativos entre parntesis.


B.......................................... Justifica un texto a la izquierda dentro del campo.
C.......................................... Muestra CR despus de un valor positivo.
X.......................................... Visualiza DB despus de un nmero negativo.
D........................................... Muestra la fecha en formato especificado.
E............................................ Muestra la fecha en formato europeo.
Z............................................ Muestra los valores cero como blancos.

COMPILACIN Y PRUEBA DE UN PROGRAMA

Aqu es bueno puntualizar la diferencia existente entre un Compilador y un


interpretador. Clipper es un compilador que proporciona gran velocidad a una
aplicacin por cuanto traduce el lenguaje Clipper al Lenguaje de mquina una sola vez,
mientras que un interpretador como DBASE, tiene que convertir en lenguaje de
mquina todas las instrucciones cada vez que esta son usadas.

Si Ud. posee Clipper instalado en su computador por medio de una versin


instaladora solo tiene que escribir desde el punto indicativo del DOS la siguiente orden:
cl <nombrearch> <enter>

Si no tiene a Clipper instalado de esa forma debe indicarle las vas de acceso,
bien sea a travs de un archivo bach o editando nuevamente el autoexec.bat y el
config.sys con las instrucciones siguientes:

PATH C:\CLIPPER5\BIN;C:\NG;%PATH%
SET INCLUDE=D:\CLIPPER5\INCLUDE
SET LIB=D:\CLIPPER5\LIB
SET OBJ=D:\CLIPPER5\OBJ
SET PLL=D:\CLIPPER5\PLL

QUE HACE CLIPPER AL COMPILAR?


Clipper convierte el programa fuente en lenguaje de mquina produciendo un
archivo en cdigo objeto llamado programa objeto; esto lo realiza Clipper.exe.

Una vez que Clipper ha creado el archivo objeto entra a funcionar Rtlink.exe
que enlaza los archivos objetos creados por Clipper con las rutinas de librera,
construyendo finalmente con la unin de ellos un archivo ejecutable.
- Realice ahora los ejercicios del numeral 1 del anexo titulado EJERCICIOS.
- Concluido los ejercicios elabore los programas del numeral 2

MANEJO DE ARCHIVOS

CREACION DE UN ARCHIVO:

En Clipper se utiliza el programa DBU para crear una estructura de un archivo.

El programa de servicios DBU.EXE permite la operacin de una serie de


comandos interactivos de Dbase.
El programa DBU permite la apertura de hasta 6 archivos.
Posee la siguiente sintaxis:

DBU arch.dbf
Si se especifica el nombre de un archivo, se mostrar una pantalla de
visualizacin BROWSE.

APERTURA DE UN ARCHIVO:

Con el comando USE se puede abrir o cerrar un archivo .DBF.


Su sintaxis es:
USE nom_arch [ INDEX lista_indices ]

El Clipper permite hasta 250 archivos abiertos en 250 reas de trabajo.

Para abrir el archivo, el comando USE se utiliza seguido del nombre del archivo
:
USE nom_arch.

Para cerrar el archivo, use el comando USE sin especificar ningn argumento.
USE
Para cerrar todas las bases de datos abiertas, use el comando:
CLOSE ALL
CLOSE DATABASES

AREAS DE TRABAJO:

Se identifican por las letras de la A hasta la Z o por un nmero de 1 a 250. Se


puede identificar por el nombre del archivo que est abierto en cada uno. Cualquier
archivo abierto sin una seleccin previa ser abierto en el rea A.

El comando que selecciona un rea es:


SELECT rea

donde rea es la letra nmero correspondiente al rea por abrirse.

EJEMPLO:
SELECT 1
USE cliente
SELECT 2
USE factura

FUNCION SELECT( ):

Retorna el nmero del rea donde el archivo dado como argumento se encuentra
abierto.
Su sintaxis es:
SELECT ( alias )
ADICION DE REGISTROS:

El comando APPEND BLANK adiciona un registro en blanco a la base de datos


en uso. la inclusin Su sintaxis es:
APPEND BLANK

Despus de la inclusin del registro en blanco, los campos vacos deben llenarse
mediante el comando REPLACE, el cul sustituye el contenido de los campos
especificados por los resultados o el valor de las expresiones.

Su sintaxis es:
REPLACE campo WITH expresin [ FOR condicin ] [ WHILE
condicin ]

Con el comando APPEND FROM copia registros del archivo especificado hacia
el archivo en uso.
Su sintaxis es:
APPEND FROM nomb_arch [ FOR WHILE condicin ]

MOVIMIENTO DENTRO DEL ARCHIVO:

El comando GOTO mueve el puntero de registros al registro indicado por el


comando.
Tiene la siguiente sintaxis:
GOTO num_reg / TOP / BOTTOM

GOTO TOP coloca el puntero en el primer registro del archivo y si est


indexado en el primer registro del ndice.

GOTO BOTTOM coloca el puntero en el ltimo registro del archivo o en el


ltimo registro del ndice.

El comando SKIP mueve el puntero de registros a lo largo del archivo en uso o a


lo largo de un archivo abierto en otra rea.
La sintaxis es:
SKIP num_reg

SKIP sin argumento avanza el puntero al siguiente registro.

Si se indica un nmero positivo, el puntero se mover la cantidad de registros


hacia el final del archivo. Si por el contrario, el nmero es negativo se mover en
direccin hacia el inicio del archivo.

BORRADO Y RECUPERACION DE REGISTROS:

Para borrar un registro de un archivo .DBF, primero marcarlo para eliminarlo y


en seguida eliminarlo fsicamente del archivo.

Para marcarlo se utiliza el comando DELETE.


Su sintaxis es:
DELETE

[ WHILE condicin ] [ FOR condicin ]

Si se especifica DELETE sin ningn parmetro, el registro actual se marcar


para su eliminacin.

FUNCION DELETE( ) :

Retorna el valor lgico .T. si el registro actual est marcado para la eliminacin
o .F. en caso contrario.
Su sintaxis es:
DELETE( )
COMANDO SET DELETE:

Determina si los registros marcados para eliminacin sean transparentes para


comandos que hagan bsqueda o intenten acceder al archivo.
Su sintaxis es:
SET DELETE ON / OFF

RECUPERACION DE LOS REGISTROS ELIMINADOS:

Recupera los registros que haban sido marcados para eliminacin por el
comando DELETE. Este comando debe utilizarse con el comando SET DELETE OFF.

Tiene la siguiente sintaxis:


RECALL [ WHILE condicin ] [ FOR condicin ]

ELIMINACION FISICA DE LOS REGISTROS:

Se utiliza el comando PACK para eliminar fsicamente los registros que fueron
marcados con el comando DELETE. Despus que se ejecuta ste comando, no ser
posible recuperar los registros eliminados.
Su sintaxis es:

PACK

BUSQUEDA SECUENCIAL EN UN ARCHIVO:

Un archivo en Clipper puede abrirse de modo secuencial o indexado.

COMANDO LOCATE:

Mediante el comando LOCATE se busca entro del conjunto de registros


suministrados, el primer registro que satisfaga una condicin especificada.
La sintaxis de ese comando es:
LOCATE FOR condicin [ WHILE condicin ]

COMANDO CONTINUE:

Despus del comando LOCATE se utiliza el comando CONTINUE si existe


otro registro que satisfaga la condicin, en caso contrario el puntero se mover hasta el
final del archivo.

Su sintaxis es:
CONTINUE

CREACION Y APERTURA DE ARCHIVOS INDEXADOS:

El comando que genera un ndice es el INDEX ON. Para crear cualquier archivo
ndice, debe estar abierto el archivo .DBF.
Su sintaxis es:
INDEX ON clave TO nomb_arch

La extensin del archivo automticamente ser .NTX.


Los ndices creados arreglan siempre los archivos en orden creciente del valor,
no importa si la clave, es numrica, de fecha o alfabtica. Los campos MEMO o
LOGICOS no pueden utilizarse para la construccin de ndices.

COMANDO SET INDEX TO:

Abre el ndice que est relacionado con el archivo en uso. Pueden abrirse hasta
15 ndices simultneamente.
Su sintaxis es:
SET INDEX TO ndices
Si se utiliza este comando sin especificar ningn ndice, todos los ndices
abiertos en el rea actual quedan cerrados.

BUSQUEDA EN ARCHIVOS INDEXADOS:

Los comandos que ejecutan sta bsqueda son FIND y SEEK. Estos comandos
funcionan si existe un ndice abierto.

El comando FIND localiza claves compuestas por nmeros o cadenas literales.


Si la clave es una cadena de caracteres, deber estar entre comillas sin comenzar con
caracteres en blanco.
Su sintaxis es:
FIND cadena

Despus de una bsqueda se pueden utilizar funciones como FOUND( ), EOF( ),


BOF( ) y RECNO( ) para saber si la bsqueda tuvo xito.

El comando SEEK busca por el primer registro del archivo indexado que est
en uso o que posea la clave suministrada.
Al usar el comando SEEK con una clave alfanumrica, sta puede ser colocada o
no entre comillas. El comando SEEK evala una expresin y busca su resultado, lo que
permite la composicin de claves basadas en ms de un campo.
Su sintaxis es:
SEEK clave

A continuacin realice los ejercicios del numeral 3 del anexo de ejercicios.

EJERCICIOS

1.- A continuacin encontrar un grupo de programas, edite con PE, salve, compile y
pruebe cada uno de ellos segn lo expuesto anteriormente.

a.-* programa primero


clea
store 0 to edad
nombre = space(10)
accept "entre su edad " to edad
accept "entre su nombre " to nombre
? "hola "
?? nombre
? "tienes "
?? edad
?? " aos"
return

b.-* programa segundo


clea && limpia la pantalla
store 0 to edad
nombre = space(10)
/* A CONTINUACION USAREMOS EL @ GET Y EL @ SAY PARA POSICIONAR
EL CURSOR EN LA FILA 2 COLUMNA 2 Y AS SUCESIVAMENTE */
@ 02,02 say "entre su edad " get edad
@ 03,02 say "entre su nombre " get nombre

read
@ 05,02 say "hola "+ nombre
@ 06,02 say "tienes "
@ 06,10 say edad
@ 06,20 say " aos"
return

c.-* programa tercero


clea
store 0 to edad
nombre = space(25)
@ 02,02 say "entre su edad " get edad pict "##"

// picture da formato de entrada

@ 03,02 say "entre su nombre " get nombre pict "@!"


read
@ 05,02 say "hola "+ nombre
@ 06,02 say "tienes "
@ 06,09 say edad Pict "##" // pict da formato de salida
@ 06,12 say " aos"
return

d.-*programa cuarto
#define recuadro chr(213)+chr(205)+chr(184)+chr(179)+;
chr(190)+chr(205)+chr(212)+chr(179)+chr(32)
/* usamos define para declarar la variable recuadro la cual va acompaada de 9 valores,
correspondientes al caracter ascii que da forma a la caja que se usara */
clea

store 0 to edad
store spac(25) to nombre
/* vamos a utilizar ahora las sentencias de decisin */
@ 01,01 to 24,79 double // dibuja un marco en la pantalla
@ 03,03,07,77 box recuadro
@ 04,18 say "instituto universitario de tecnologa"
@ 05,25 say "curso de clipper bsico"
@ 06,29 say "Fundainformatica"
@ 10,08 say "entre su nombre " get nombre pict "@!"
/* la funcin VALID permite validar la entrada, se usa acompaando al get */
@ 11,08 say "entre su edad " get edad pict "##" valid(edad>0)
read
@ 13,08 say "hola " + nombre
if (edad<11)
@ 14,08 say "eres un nio "
endif
if edad>11
if edad<17
@ 14,08 say "eres un adolescente "
else
if edad<= 30
@ 14,08 say "eres un joven"
endif
if edad<= 50
@ 14,08 say "eres adulto"

else
@ 14,08 say "estas cruzando la esquina"
endif
endif
endif
wait"" $$ hace una pausa hasta que se pulse una tecla
return

e.- *programa quinto


#define recuadro chr(213)+chr(205)+chr(184)+chr(179)+;
chr(190)+chr(205)+chr(212)+chr(179)+chr(32)
clea
store 0 to edad
store spac(25) to nombre
conta=1
/* vamos a utilizar ahora la sentencia de repeticin do while */
@ 01,01 to 24,79 double
@ 03,03,07,77 box recuadro
@ 04,18 say "instituto universitario de tecnologa"
@ 05,25 say "curso de clipper bsico"
@ 06,29 say "Fundainformatica"
do while conta<3
store 0 to edad
nombre=spac(25)
@ 10,06 say "entre su nombre " get nombre pict "@!"

@ 11,58 say "entre su edad " get edad pict "##" valid(edad>0)
read
@ 13,08 say "hola " + nombre
if (edad<11)
@ 14,08 say "eres un nio "
endif
if edad>11
if edad<17
@ 14,08 say "eres un adolescente "
else
if edad<= 30
@ 14,08 say "eres un joven"
endif
if edad<= 50
@ 14,08 say "eres adulto"
else
@ 14,08 say "estas cruzando la esquina"
endif
endif
endif
conta=conta+1
enddo
wait""
clea
return

f.-*programa sexto
#define recuadro chr(213)+chr(205)+chr(184)+chr(179)+;
chr(190)+chr(205)+chr(212)+chr(179)+chr(32)
clea
store 0 to edad
store spac(25) to nombre
@ 01,01 to 24,79 double
@ 03,03,07,77 box recuadro
@ 04,18 say "instituto universitario de tecnologa"
@ 05,25 say "curso de clipper bsico"
@ 06,29 say "Fundainformatica"
do while .t.
store 0 to edad
nombre=spac(25)
@ 14,08 say "

"

@ 10,06 say "entre su nombre [/ para salir]" get nombre pict "@k"
read
if nombre $"/"
EXIT
endif
@ 11,50 say "entre su edad " get edad pict "##" valid(edad>0)
@ 13,08 say "hola " + nombre
if (edad<11)
@ 14,08 say "eres un nio "

endif
if edad>11
if edad<17
@ 14,08 say "eres un adolescente "
else
if edad<= 30
@ 14,08 say "eres un joven"
endif
if edad<= 50
@ 14,08 say "eres adulto"
else
@ 14,08 say "estas cruzando la esquina"
endif
endif
endif
enddo
wait""
clea
return

g.-* programa sptimo


clea
do while .t.
store 0 to resultado, num1,num2, op
@ 02,08 say "entre el primer nmero" get num1 pict @#

@ 03,08 say "entre el segundo nmero" get num2 pict @#


read
@ 05,08 say "1.- SUMAR "
@ 06,08 say "2.- MULTIPLICAR"
@ 07,08 say "3.- SALIR"
@ 08,10 say "ESCOJA SU OPCIN" get op # VALID (op $123)
if op=3
exit
endif
do case
case op=1
resultado = num1 + num2
@ 10,08 say "el resultado es"
@ 10,25 resultado
case op = 2
resultado = num1*num2
@ 10,08 say "el resultado es"
@ 10,25 resultado
endcase
enddo

2.- Elabore un programa en clipper que:

a.- Pida dos nmeros los sume y guarde su contenido en una variable temporal,
posteriormente muestre el valor de la suma. Debe usar en este ejercicio las sentencias
CLEA, GET, SAY y PICTURE, as como los comentarios para documentar el
programa.

b.- Elabore un programa que pida dos nmeros enteros y que a travs de un
men se escoja una de las cuatro operaciones bsicas o salir del programa. Para ello use
los recursos vistos hasta ahora, el men debe ser como el del ejemplo:

1.- SUMAR
2.- RESTAR
3.- MULTIPLICAR
4.- DIVIDIR
5.- SALIR
ESCOJA UNA OPCIN

En su diskette encontrar un grupo de programas ejemplo de cada una de las


aplicaciones de los comandos e instrucciones contenidas en el presente curso.

2.- MACRO SUSTITUCIN Y BLOQUES DE CODIGO

MACROS

Recibe el nombre de macro un smbolo que informa al compilador/intrprete


para que asuma el contenido de una variable como si fuera un literal. Son usadas
generalmente en rutinas genricas o reutilizables.

Una macro puede especificarse de dos formas: utilizando una variable o usando
una expresin que genere (devuelva) una cadena. Por lo tanto los dos principales
objetivos de una macro son: la sustitucin de un texto y la compilacin de una
expresin durante la ejecucin del programa.

Una macro se identifica con el operdor & delante del nombre de la variable que
debe ser abierta. Un caso tpico de su uso es con las rdenes use y find como se muestra
a continuacin:
* programa c09.prg
clea
use cliente

con una macro sera:


*programa c09.prg
clea
archi=cliente
use &archi

En el ejemplo anterior se ha utilizado una variable para la macro sustitucin,


otro ejemplo puede ser:

* programa c09.prg
clea
archi=spac(12)
@ 2,2 say Nombre del archivo a ser usado.... get archi
read
if .not. file(&archi)
@ 23,10 say archivo no existe
else
use &archi
endif

Sin embargo las versiones 5.0 en adelante permiten usar expresiones extendidas,
en lugar del operador &, una expresin extendida se caracteriza por estar el nombre de
la variable entre parntesis.

* programa c09.prg
clea
archi=spac(12)
@ 2,2 say Nombre del archivo a ser usado.... get archi
read
use (archi)

BLOQUE DE CODIGO

Se entiende como tal a un tipo de dato que contiene una expresin compilada
que puede ser compilada oportunamente.

Como cualquier otro tipo de dato un bloque de cdigo puede ser:


1. - Asignado a una variable
2. - Pasado como parmetro
3. - Devuelto por una funcin
4. - Especificado como un literal

Un bloque de cdigo puede estar formado por una o ms expresiones que son
evaluadas (cuando haya mas de una) de izquierda a derecha. Las expresiones deben
estar separadas por comas, de forma tal que el bloque de cdigo devuelve el resultado
de la ltima expresin.

De igual forma que una variable caracter es creada al asignarle una cadena de
caracteres, o una variable de tipo fecha es creada con CTOD(), para crear una variable
de tipo bloque de cdigo basta con asignarle a sta una expresin entre llaves como si se
tratara de una matriz, con la diferencia que en este caso inmediatamente despues de la
primera llave se debe colocar dos barras verticales, para diferenciarla de la matriz.

Ejemplos
a=Albani
b=ctod(01/01/96)
c:={\\ x>y}

Entre otras cosas un bloque de cdigo tiene como finalidad Crear rutinas
genricas, Crear opciones Alternativas en programacin, Reducir el tamao del cdigo
fuente utilizado. Es por ello que se puede afirmar que los bloques de cdigo son ms
importantes que las Funciones Definidas por el Usuario.

Un bloque de cdigo por s solo no tiene ninguna aplicacin; por lo tanto debe
ser evaluado, para ello Clipper provee de la funciones EVAL(), AEVAL(), DBEVAL().

Supongamos que se tienen dos variables X , Z y la expresin X > Z y se desea


evaluar la expresin, veamos como queda con macros y cmo con un bloque de cdigo:

* programa expre.prg
clea
exp=x > z
x=15; z= 10;
? &exp

** devolver .t.

*programa expre.prg
clea
x=15; z= 10;
b:={\\ x > z}
? eval(b) ** devolver .t.

Del ejemplo anterior se deduce que una macro y un bloque de cdigo son
parecidos, sin embargo la diferencia estriba en su compilacin; mientras que una macro
se compila cada vez que el programa la necesita, el bloque de cdigo lo hace una sola
vez; dems est decir que los errores de una Macro se detectan por lo tanto en tiempo de
corridad (run-time) mientras que en el bloque de cdigo se hace en tiempo de
compilacin. Los ejemplos que siguen dan muestra de lo dicho:

* programa c10.prg
* usando una Macro
exp = a >< b
? &esp

* usando CODE BLOCK


c:={\\a >< b}
? eval(c)

Otra diferencia importante es que si la expresin usada hace llamada a una


funcin, tiene que tener la certeza que el compilador referenciar la funcin, o utilizar la
orden EXTERNAL para que el enlazador la agregue al ejecutable. En un bloque de
cdigo son referenciadas automticamente por el compilador y por lo tanto por el
enlazador. Los siguientes programas muestran lo que sucede en cada caso:

*programa c11.prg
ac:=funinc()
nada=&ac
aca:={\\modfun()}
EVAL (aca)

function modfun
@ 23,10 say se activo la funcion de modificar
inkey(3)
return nil

*programa c12.prg
ac:=funinc()
nada=&ac
aca:={\\modfun()}
EVAL (aca)

function funinc
@ 23,10 say se activo la funcion de incluir
inkey(3)
return nil

El bloque de cdigo presenta como caracterstica la permitibilidad de los


parmetros, cosa que no es posible con las macros. El requerimiento para su uso es la
declaracin entre las barras en la definicin del bloque, caso de haber ms de uno deben
ir separados por comas. Ejemplo:

b:{\a,b,c\ (200 + a)/(b + c)}

Es conveniente en este momento precisar el funcionamiento de EVAL(), en caso


de existir parmetros, su sintaxis es:
Eval(<bloque>,<lista de parmetros>)

* programa c10par.prg
clea
x1:={\i,g\ i > g}
f:=20; a:=10
? EVAL(x1,f,a)

** devuelve .t.

k:= 5; m:=6
? EVAL(x1,k,m)

** devuelve .f.

Los parmetros son pasados por valor, si se desea pasar un prmetro por
referencia debe ir precedido de @. El siguiente ejemplo muestra el uso de los bloques
de cdigo. Los blques de cdigo son muy tiles a la hora de procesar matrices o
registros de una base de datos.

* PROGRAMA c11.prg

local menu:= { {Aadir

, Agrega Registros, {|| funinc()}},;

{Modificar , Modifica registros, {|| funmod()}},;


{F I N

, Sale de la Aplicacin, {|| fin()} } }

do while .t.
clea
for i = to len(menu)
@ 2,i+15 prompt menu(i,1) message menu(i,2)
next
menu to op
if op = 0
op = 3

* forza la salida de la aplicacin

endif
eval (menu[op,3]))
enddo

function funinc
@ 23,10 say Usted entro en la rutina de aadir
inkey(3)
return nil

function funmod
@ 23,10 say Usted entro en la rutina de modificacin
inkey(3)
return nil

function fin
@ 23,10 say Usted finaliz la aplicacin
inkey(3)
quit
return nil

6.- CLIPPER ORIENTADO A OBJETOS

Si bien Clipper no es un lenguaje para programacin orientada a objetos,


introduce algunos conceptos utilizados en este tipo de lenguajes.
Clipper 5.xx maneja solo 5 clases, no pudiendo crear ms clases ni elementos
para las clases ya existentes, las clases manejadas por Clipper son: Error, Get, Tbrowse
y Tbcolumn.

Veamos a continuacin algunos conceptos bsicos:

Clase Una clase es un modelo para la creacin de objetos, definiendo las


operaciones y
variables asociadas a dicho objeto.

Objeto Es un modelo de una clase. Cada objeto posee uno o ms parmetros


llamados
variables modelos. Un modelo puede recibir mensajes y ejecutar ciertas
operaciones
(mtodos). Las variables modelo solo pueden recuperarse o modificar su
contenido
mediante el envo de mensajes al objeto. Un objeto se crea mediante la
llamada a

una funcin especial que depende de la clase de objeto a crear.

Mensaje Es la forma mediante la cual se le solicita a un objeto la ejecucin de una


determinada
Tarea. El envco de un mensaje a un objeto devuelve un valor (al igual que la
llamada a
una funcin). Para enviar un mensaje hay que especificar el nombre del
objeto seguido
de dos puntos y el nombre del selector. El selector debe tener el mismo
nombre del
mtodo a ser ejecutado.

Selector Es el elemento que accionar el mtodo a ser ejecutado. El nombre del


mtodo debe ser
igual al del selector.

Variables Son los atributos o datos que forman un objeto. Cada objeto tiene supropio
conjunto
Modelo de variables modelo, con sus valores iniciales. Las varaibles modelo que
tienen su
contenido accesible se llaman VME (Variables Modelo Exportables).

Funcin de Es la funcin que crea el objeto de una determinada clase.


Creacin

Un Objeto se crea mediante la funcin de creacin y su sintaxis es:


objeto:=<funcin de creacin>

Para acceder al contenido de una VME se usa la sintaxisis:

<objeto>:<VME>

Para modificar el valor de una VME la sintaxis usada es:


<objeto>:<VME>:= <Valor>

Para enviar un mensaje se debe usar la sintaxis siguiente:


<objeto>:<mensaje>[(<parmetros>)]

Clase GET
Esta clase proporciona objetos para la edicin interactiva de campos de archivos
de datos y variables de memoria. Estos objetos proporcionan recursos para el formateo y
comprobacin de los datos(mediante los bloques de cdigo).
Un Objeto GET se asocia, en la mayora de los casos, a una variable (llamada
variable GET) que tiene su contenido modificado mediante la valoracin de un bloque
de cdigo.
El sistema GET puede dividirse en varios niveles o capas como sigue:

read
getreader
getapplykey()
getdoskey()
getprevalidate()
getpostvalidate()
El siguiente ejemplo nos muestra como trabaja el nivel Read, el cual ha sido
trabajado anteriormente pero sin las opciones color y When

* programa readcol.prg

clea
COD=spac(3);NOMBRE=spac(30); valor3:= valor2:=valor1:=0
@ 10,10 say Codigo.... get COD pict 999 color r/w,w/r
@ 12,10 say Nombre.. get NOMBRE pict @! color ,w/r
@ 14,10 say Valor1.... get valor1
@ 16,10 say Valor2.... get valor2 color w/b
@ 18,10 say Valor3.... get valor3 color w/w
read

* programa readwhen.prg
clea
COD=spac(3);NOMBRE=spac(30); valor3:= valor2:=valor1:=0
@ 10,10 say Codigo.... get COD pict 999 color r/w,w/r
when mensget (solo se pueden introducir nmeros (000 salir))
@ 12,10 say Nombre.. get NOMBRE pict @! color ,w/r
when mensget (teclee el nombre del empleado)
@ 14,10 say Valor1.... get valor1 when mensget ()
@ 16,10 say Valor2.... get valor2 color w/b
when mensget valor1>1000 .and. mensget (descuentos sobre el valor 1))
@ 18,10 say Valor3.... get valor3 color w/w
read

function mensget(texto)
@ 23,10 say spac(60)

@ 23,10 texto
return .t.

Esta opcin es muy til ya que nos permite la edicin del campo si el resultado
de la comprobacin previa, que realiza when, es verdadera, o saltar la edicin del
mismo si es falsa. Adems esta opcin permite el envo de un mensaje a la pantalla cada
vez que el campo es editado; activando when invocando una funcin que visualiza el
mensaje, o combinandola con otra expresin que evale la edicin del campo.

NIVEL READMODAL()

Un objeto GET puede ser creado de dos formas: con la orden @..GET o con la
funcin de creacin de la clase GET, que es GETNEW().
Cuando se ejecuta una aplicacin Clipper, se crea automticamente una matrz
PUBLICA llamada GETLIST, sin ningn contenido. Cada vez que una rden get es
ejecutada, se aade un elemento a la matrz.
Ejemplo explicativo:

* programa gets.prg
clea
Nombre=SanJuan
salario=0
@ 1,5 say Introduzca su Nombre.... get Nombre
@ 2,5 say Introduzca el salario.......get salario
read
El procesador traduce ester cdigo en:

scroll(); SetPos(0,0); _KillRead(); GetList:={}


Nombre=SanJuan
salario=0

DevPos(1,5); DevOut( Introduzca su Nombre....);


SetPos(Row(),Col()+1);
AAdd(GetList,_Get_(Nombre,Nombre,,,))
DevPos(2,5); DevOut(Introduzca el salario.......);
SetPos(Row(),Col()+1);
AAdd(GetList,_Get_(salario,salario,,,))
ReadModal(GetList); GetList:={}

Del anterior bloque de cdigo se deduce que la funcin AADD incrementa en un


elemento la matriz GETLIST mediante la funcin interna _GET_, la cual crea un objeto
GET. Se advierte adems que read ha sido sustituido por READMODAL, y que despues
de su ejecucin la Matriz GETLIST queda vaca.

Otra forma de crear objetos GET es mediante GETNEW() cuya sintaxis es:

GETNEW([<lin>,<col>],[<codeblock>],[<variable.]
[<picture>],[<atrib_color>])

CREACION DE GETS ANIDADOS

Antes de aparecer las versiones 5.xx de Clipper, era una verdadera azaa anidar
varios gets con diferentes read, de forma tal que se pudieran procesar un grupo primero,
luego un segundo grupo y posteriormente regresar al primero,puesto que el segundo
read liberara al primer grupo de gets.

En la versn 5 se soluciona este problema ya que permite la creacin de una


matriz GETLIST de tipo LOCAL. Como es sabido todo get se convierte en un elemento
de la matriz PUBLICA GETLIST, la cual se reinicializa despues de un Read; en nuestro
caso la matrz PUBLICA se usar para el primer grupo de gets, y la LOCAL para el
segundo, evitando de esta manera que se pierdan los primeros gets.

* programa ejemplo.prg
clea
set key -1 to calculo
cod=spac(3)
Nom=spac(20)
desc:=valor:=0
@ 1,1 say codigo....... get cod
@ 2,1 say nombre..... get nom
@ 3,1 say valor......... get valor pict @E 999,999.99;
valid if(valor=0 calculo(@valor),.t.)
@ 4,1 say descuento..get desc pict 99
read

function calculo(varia)
local GETLIST:={}, v1:= v2:= v3:= v4:= v5:=0
pantcalc:=saveScreeen(1,50,7,61)
@ 1,50 to 7,61
@ 2,51 get v1 pict @E 999,999.99
@ 2,51 get v2 pict @E 999,999.99
@ 2,51 get v3 pict @E 999,999.99
@ 2,51 get v4 pict @E 999,999.99
@ 2,51 get v5 pict @E 999,999.99
read
varia=v1+v2+v3+v4+v5
keyboard varia

restorescreen (1,50,7,61, pantclac)


return .t.

MODIFICACION DEL GET MEDIANTE LAS VARAIBLES MODELO

Para modificar el valor de un get activo es necesario crear un objeto


correspondiente al get actual mediante la funcin GETACTIVE(), as:
oG:=GETACTIVE()

Para saber el nombre de la variable correspondiente a ese GET debe usar la


varaible modelo NAME, como se muestra:
? oG:NAME

Si lo que desea saber es el contenido, entonces usar:


? oG:VARGET()

Si est editando GETS contenidos en GETLIST, puede usar directamente el


elemento de la matrz para acceder a sus variables modelo, as:
? GETLIST[3]:NAME

LA CLASE TBROWSE

La clase TBROWSE facilita la manipulacin de tablas al estilo de DBEDIT(),


pero con ms posibilidades ya que cuenta con objetos.
Permite la presentacin de datos en forma tabular, la edicin de los mismos, la
visualizacin y seleccin de datos diferenciados. La recuperacin de los datos es
efectuada mediante la evaluacin de los bloques de cdigo. Cada objeto TBROWSE
depende de los objetos creados por la clase TBCOLUMN.

Para trabajar con el Tbrowse se utilizan dos funciones, una para datos de tableas
y otra para datos diversos: la funcin TBROWSEDB() y la funcin TBROWSENEW().
TBROWSEDB(<LinSup>,<ColSup>,<LinInf>,<ColInf>)

La funcin Tbrowsedb crea un objeto dentro de las coordenadas especificadas en


su invocacin; establece adems unas variables modelo especficas para el manejo de
los archivos de datos.

TBROWSENEW(<LinSup>,<ColSup>,<LinInf>,<ColInf>)

La funcin Tbrowsenew crea un objeto dentro de las coordenadas especificadas


en su invocacin. este Objeto no contiene bloque de cdigo, por lo tanto debe ser
aadida por el usuario.

dentro de la clase Tbrowse estan disponibles las siguientes Variables Modelo


Exportables(VME):

autolite

Contiene un valor lgico, que permite destacar la celda actual.

cargo
Es una variable definida por el usuario, que puede ser recuperada
posteriormente.
colcount
Contiene un nmero que indica la cantidad de columnas TBROWSE.
Cada columna Tbrowse
debe tener un objeto TBCOLUMN asociado a ella.
colorespc
cadena de

Permite manejar los colores de visualizacin del Tbrowse a travz de una

caracteres.
colpos

Contiene la indicacin de la columna sobre la cual Tbrowse est situado.

colsep
Contiene una cadena de caracteres que define el separador de columnas,
para aquellas

columnas que no tienen separador propio.


footsep
Contiene una cadena de caracteres que define el separador final, para
aquellas columnas que
no tienen separador propio.
freeze
Contiene un nmero que indica la cantidad de columnas a ser congeladas
a partir de la primera
a la izquierda y que permaneceran fijas en le pantalla.
gobottomblock Contiene un bloque de cdigo que es ejecutado en respuesta al mensaje
gobottom().
gotopblock Contiene un bloque de cdigo que es ejecutado en respuesta al mensaje
gotop(). El bloque de
cdigo debe tener rdenes que siten el cursor en el primer registro del
archivo. Tanto sta
como la anterior VME deben ser usadas al visualizar una base de datos.
headsep
Contiene una cadena de caracteres que define el separador de
encabezamientol, para aquellas
columnas que no tienen separador propio.
hitbottom
Contiene el valor lgico true (.T.) que indica que se intent pasar del
ltimo registro disponible.
leftvisible
Indica el nmero de columna no congelada ms a la izquierda de
TBROWSE.
nbottom
Contiene un valor que indica la ltima lnea usada para la visualizacin
de TBROWSE.

8 . - CLIPPER EN LA RED

Se puede decir que el nico requerimiento de Clipper para trabajar en una Red
de rea Local (LAN), es que sta debe respaldar la llamada de Clipper a la funcin del
DOS ya que Clipper usa Exclusivamente llamadas al DOS para todas sus operaciones
relacionadas con la Red.

Dicho de otra forma una aplicacin desarrollada en Clipper corre en cualquier


LAN diseada en el Standard del DOS.

CARACTERISTICAS

* Modalidad compartida, para permitir el uso a dos o mas usuarios de un mismo


archivo.
( SET EXCLUSIVE OFF )
* Modalidad exclusiva, que anula la capacidad de compartir archivos.
( SET EXCLUSIVE ON, USE <NOMARCH> EXCLUSIVE )
* Bloqueo lgico, que evita que dos o mas usuarios actualicen el mismo
archivo
simultneamente. ( FLOCK() )
* Comprobacin del bloqueo Lgico de archivos, por medio de dos funciones.
( FLOCK() Y RLOCK() )
* Desbloqueo de archivos, regresando a la modalidad compartida.

* Uso de la impresora compartida de la red.


* Comprobacin de errores de la red, para determinar si se ejecut
exitosamente una
orden.

COMANDOS Y FUNCIONES DE CLIPPER PARA RED

SET PRINTER TO
Comando que permite redirigir la impresin hacia la impresora compartida de la
red.

FLOCK()

Intenta el bloqueo del archivo en uso, si tiene xito devuelve el valor lgico
verdadero (.T.), de lo contrario devuelve falso (.F.). Cuando tiene xito se deshace
cualquier bloqueo anterior.

RLOCK()

Bloquea un registro del archivo en uso, si el intento tiene xito regresa .T. , si no
el valor regresado es .F. . Cuando el bloqueo tiene xito se deshace cualquier bloqueo
anterior.

UNLOCK

Este comando es usado para deshacer el bloqueo de archivos y registros fijados


previamente por funciones de bloqueo.

USE <NOMARCH> EXCLUSIVE/SHARED

Exclusive abre los archivos y sus ndices asociados en la modalidad exclusiva.


Por defecto Clipper abre los archivos en modalidad exclusiva.
Shared abre los archivos y sus ndices asociados en la modalidad compartida.
Ambas clusulas operan sin tener en cuenta la orden SET EXCLUSIVE.

NETERR()

Devuelve el valor lgico verdadero cuando fracasa una operacin de la red,


segn la tabla siguiente:

COMANDO
Use

NETERR()
.T.

Use ... Exclusive

.T.

Append Blank

.T.

CAUSA
Uso exclusivo de otro
usuario
Archivo abierto por
otro usuario
Archivo bloqueado
por otro usuario o ha
ordenado un Append
Blank

simultneamente.

NETNAME()

Devuelve la identificacin de la estacin de trabajo en curso.

PROGRAMANDO PARA LA RED

Cuando se desarrolla una aplicacin para la red se debe tener en cuenta:

* Apertura de Archivos para compartir.


* Apertura exclusiva de Archivos.
* Cuando bloquear Archivos y/o Registros
* Bloqueo y su tcnica
- Como intentarlo
- Como superar un bloqueo fracasado.

Recuerde que Ud. abrir los archivos en modalidad compartida, luego el fracaso
en la apertura ( use <nomarch> ) es una posibilidad real, por lo tanto es recomendable
el uso de NETERR() para detectar que la apertura de un archivo fu exitosa; a causa de
esto no se deben abrir al mismo tiempo los archivos ndices al mismo tiempo, si no que
una vez comprobada la apertura exitosa del archivo se debe colocar la orden SET
INDEX, la cual los abre en la misma modalidad en que se abri el archivo.

El siguiente ejemplo muestra como abrir archivos e ndices en un programa para


redes:

* programa demo

use <nomarch> shared


if neterr()
@ 06,24 say Archivo en uso, no puede compartirse
break
endif
set index to <nomind>
@ 06,15 say Apertura exitosa
return

Es oportuno acotar aqu unas reglas sencillas a tener en cuenta en el momento de


abrir archivos para red:
* Si el comando o funcin escribe (modifica) el archivo la modalidad debe ser
exclusiva.
* Si el comando o funcin lee el archivo la modalidad debe ser compartida.

As:
APPEND FROM, COPY FILE LABEL FORM .. TO FILE, REPORT FORM ... TO
FILE, RESTORE, TYPE ... TO FILE, UP DATE Y MEMOREAD(), usan los archivos en modo
de uso compartido ( SHARED ).

COPY STRUCTURE, COPY STRUCTURE STEND, COPY TO, CREATE, CREATE


FROM, DISPLAY ... TO FILE, INDEX, JOIN, LIST .. TO FILE, SAVE, SET ALTERNATE,
SET PRINTER, SORT, TEXT ... TO FILE, TOTAL Y MEMOWRITE(), necesitan el archivo
de uso exclusivo.

Una vez determinado el modo de apertura de un archivo, es necesario bloquear


el archivo o registro segn el uso que se le valla a dar; es aqu donde radica el xito de
la programacin, ya que como programador usted no tiene control sobre el
comportamiento de los comandos y funciones, pero si puede tomar la desicin adecuada
en el momento de programar.

Al ejemplo anterior se le agrega una funcin para que intente la apertura de un


archivo y contine intentandolo por un tiempo lmite o hasta que tenga xito. La funcin
aqu usada es una funcin del usuario a la cual se le pasa como argumentos el nombre
del archivo, la modalidad de apertura y el nmero de segundos que debe reintentar la
operacin.

#define archcom .F.


#define archiexc .F.
if libre(nomarch,archcom,7)
set index to nomind
else
@06,24 say Archivo en uso
break
endif
Function Libre(parchivo,pmodo,ptiempo)
local hasta
hasta = ptiempo
do while
if pmodo
use parchivo exclusive
else
use parchivo shared
endif
if .not. NETERR()
return (.T.)
endif
inkey(1)

ptiempo = ptiempo - 1
enddo
return (.F.)

ANEXOS

ORDENES, FUNCIONES Y PROCEDIMIENTOS TILES EN CLIPPER

AADD(): Aade un nuevo elemento al final de un arreglo.


Sintaxis: AADD(nombre arreglo,valor)

ACLONE() : Duplica un arreglo.


Sintaxis: ACLONE(arreglo)

ACOPY() : Copia todo o parte de un arreglo en otro.


Sintaxis: ACOPY(arreglo1,arreglo2,num1,num2,num3)

ADEL() : Borra un elemento de un arreglo.


Sintaxis: ADEL(arreglo,num)

AFILL() : Llena con un valor determinado el arreglo.


Sintaxis: AFILL(arreglo,valor-esxp,comienzo,cantidad)

ASCAN() : Busca una expresin en un arreglo, si la consigue devuelve la posicin


donde

se encuentra, si no devuelve 0.
Sintaxis: ASCAN(arreglo,expresin,comienzo,cantidad)

ASIZE() : Modifica el tamao de un arreglo, aumentndolo o disminuyndolo.


Sintaxis: ASIZE(arreglo,longitud)

ASORT() : Ordena un arreglo.


Sintaxis: ASORT(arreglo,exp1,exp2)

LEN() : Retorna el nmero de elementos contenidos en un arreglo.


Sintaxis: LEN(arreglo)

SETCOLOR() : Permite cambiar el color del video. Entrega adems los valores actuales
de
los colores antes de cambiarlos.
Sintaxis: SETCOLOR(valores)

SETCURSOR() : Permite visualizar o no el cursor, pudiendo adems cambiar la forma


del
mismo, devuelve la forma actual antes de cambiarla.
Sintaxis: SETCURSOR(valor)

CHR() : Se utiliza para representar un cdigo ASCII como un smbolo asociado a la


pantalla.
Sintaxis: CHR(cdigo).

INKEY() : Espera cierto tiempo, en segundos, a que el usuario pulse una tecla. Si no se
le d
el argumento INKEY devuelve el control inmediatamente.
Sintaxis: INKEY(valor)

DISKSPACE() : Devuelve un valor numrico correspondiente a la cantidad de Bytes


libres
en el disco.
Sintaxis: var=DISKSPACE()

SETKEY() : Asocia un bloque de cdigo a una tecla asignada.

VAL() : Evala una cadena hasta obtener un caracter no numrico o un segundo


separador
decimal, devolviendo el valor numrico correspondiente.
Sintaxis: VAL(expresin)

CTOD() : Convierte una cadena de caracteres en un valor tipo fecha.


Sintaxis: CTOD (12/01/96)

DTOC() : Convierte un valor tipo fecha, en una cadena de caracteres.


Sintaxis: DTOC (01-12-96)

SPACE() : Devuelve una cadena de espacios de longitud determinada.


Sintaxis: SPACE(valor)

REPLICATE() : Devuelve una cadena de caracteres iguales de una longitud


determinada.
Sintaxis: REPLICATE(caracter,longitud)

LTRIM() : Elimina los espacios en blanco al final de una cadena.


Sintaxis: LTRIM(cadena)

RTRIM() : Elimina los espacios en blanco al principio de una cadena.


Sintaxis: RTRIM(cadena)

ALLTRIM() : Elimina los espacios en blanco al principio y al final de una cadena.


Sintaxis: ALLTRIM(cadena)

STR() : Convierte un dato numrico en una cadena de caracteres.


Sintaxis: STR(cadena,longitud,decimales)

SUBSTR() : Se utiliza para obtener una subcadena de una cadena especfica.


Sintaxis: SUBSTR(cadena,inicio,longitud)

ISALPHA() : Devuelve .T. si el caracter ms a la izquierda de una cadena es Alfabtico.


Sintaxis: ISALPHA(cadena)

ISDIGIT() : Devuelve .T. si el caracter ms a la izquierda de una cadena es un dgito.


Sintaxis: ISDIGIT(cadena)

ISLOWER() : Devuelve .T. si el primer caracter de una cadena es una letra minscula.
Sintaxis:ISLOWER(cadena)

ISUPPER() : Devuelve .T. si el primer caracter de una cadena es una letra mayscula.
Sintaxis:ISUPPER(cadena)

STRTRAN() : Usada para buscar y reemplazar caracteres dentro de una cadena de


caracteres o un campo memo.
Sintaxis: STRTRAN(cadena,cadenabuscada,cadenanueva)

STUFF() : Es una funcin muy verstil usada con propsitos tales como: Eliminar
caracteres de una cadena, Reemplazar caracteres de una cadena o Insertar caracteres en
la cadena.
Sintaxis: STUFF(cadena,posicininicial,longitud,cadenanueva)
http://books.google.it/books?id=vrtI4i8kA4EC&pg=PA145&lpg=PA145&dq=area+de+trabaj
o+clipper&source=bl&ots=TIvigyzTIS&sig=vmQ9UrF_kBF92NGJhlE6K4EpL8Y&hl=es&sa
=X&ei=tJUbUe7gFceR4ATr8oGwCg&redir_esc=y#v=onepage&q=area%20de%20trabajo
%20clipper&f=false

También podría gustarte