
RAT()
Devuelve la posición de la .ltima aparici.n de una subcadena en una cadena
dada
------------------------------------------------------------------------------
Sintaxis
RAT(<cB.squeda>, <cDestáno>) --> nPosici.n
Argumentos
<cB.squeda> es la cadena de carácteres que se desea buscar.
<cDestáno> es la cadena de carácteres en la que se busca.
Devuelve
RAT() devuelve la posición de <cB.squeda> en <cDestáno>, en forma de
valor numérico entero. Si <cB.squeda> no se encuentra, RAT() devuelve
cero.
Descripción
RAT() es una función que devuelve la posición de la .ltima aparici.n de
una subcadena de carácteres en otra cadena . Para ello, examina la
cadena de destáno empezando por la derecha. RAT() es similar a la
función AT(), que devuelve la posición de la primera aparici.n de una
subcadena dentro de otra cadena. También es similar al operador $, que
determina si una subcadena est. contenida en una cadena.
Tanto la función RAT() como la función AT() se utilizan con SUBSTR(),
LEFT() y RIGHT() para extraer subcadenas.
Ejemplos
. Este ejemplo utiliza RAT() para crear una función,
ViaFichero(), que extrae la vía de una especificación de fichero. Si
no se especifica una vía, devuelve una cadena nula (""):
? ViaFichero("C:\DBF\Sales.dbf") // Resultado: C:\DBF\
FUNCTION ViaFichero(cFichero)
LOCAL nPos, cViaFichero
IF (nPos := RAT("\", cFichero)) != 0
cViaFichero = SUBSTR(cFichero, 1, nPos)
ELSE
cViaFichero = ""
ENDIF
RETURN cViaFichero
Ficheros: La biblioteca asociada es EXTEND.LIB.
READEXIT()
Activa o desactiva las flechas Arriba y Abajo como teclas de salida del READ
------------------------------------------------------------------------------
Sintaxis
READEXIT([<lActivar/desactivar>]) --> lEstadoActual
Argumentos
<lActivar/desactivar> activa o desactiva la utilización de las
flechas Arriba y Abajo como teclas de salida de un mandato READ. Si se
especifica verdadero (.T.), se activan como teclas de salida y, si se
especifica falso (.F.), se desactivan.
Devuelve
READEXIT() devuelve la selecci.n actual, en forma de valor l.gico.
Descripción
READEXIT() es una función de entorno que informa del estado actual de
las flechas Arriba y Abajo como teclas de salida del mandato READ desde
el primer o último objeto Get de una GetList. Si se especifica el
argumento opciónal <lActivar/desactivar>, estas teclas se activan o
desactivan como teclas de salida. Cuando se arranca el programa, Arriba
y Abajo no están activadas como teclas de salida de READ. Normalmente,
las teclas de salida de READ incluyen .nicamente ReP.g, AvP.g, Esc o
Intro desde el último objeto GET.
Ejemplos
. Este ejemplo muestra c.mo READEXIT() activa Arriba y Abajo
como teclas de salida antes de un mandato READ y las desactiva al
finalizar el mismo:
cMiVar = SPACE(10)
lUltimaSalida = READEXIT(.T.) // Resultado:
// Activa las teclas de salida
@ 10, 10 SAY "Intro: " GET cMiVar
READ
READEXIT(lUltimaSalida) // Resultado:
// Restablece la selecci.n anterior
Ficheros: La biblioteca asociada es CLIPPER.LIB.
READINSERT()
Activa o desactiva el modo de inserci.n para los mandatos READ y MEMOEDIT()
------------------------------------------------------------------------------
Sintaxis
READINSERT([<lActivar/desactivar>]) --> lModoActual
Argumentos
<lActivar/desactivar> activa o desactiva el modo de inserci.n.
Verdadero (.T.) lo activa y falso (.F.) lo desactiva. El valor por
defecto es falso (.F.) o el último modo seleccionado por el usuario con
un mandato READ o MEMOEDIT().
Devuelve
READINSERT() devuelve el estado actual del modo de inserci.n, en forma
de valor l.gico.
Descripción
READINSERT() es una función de entorno que informa del estado actual del
modo de inserci.n de los mandatos READ y MEMOEDIT() y, opciónalmente, lo
activa o desactiva, dependiendo del valor de <lActivar/desactivar>. Si
READINSERT() devuelve falso (.F.), los carácteres se sobreescriben al
introducir el usuario carácteres en la memoria intermedia de un objeto
mediante un mandato READ o MEMOEDIT(). Si READINSERT() devuelve
verdadero (.T.), los carácteres introducidos se insertan. El modo de
inserci.n pertenece a la configuración global del sistema y no a un
objeto determinado.
READINSERT() puede ejecutarse antes o durante un mandato READ o
MEMOEDIT(). Si se utiliza con READ, READINSERT() puede invocarse en una
cláusula WHEN o VALID de @...GET o en un procedimiento SET KEY. Si se
utiliza con MEMOEDIT(), puede invocarse con la función de usuario, as.
como con un procedimiento SET KEY.
Ejemplos
. Este ejemplo fija el modo de inserci.n antes de entrar en
MEMOEDIT() y reinicializa el modo cuando MEMOEDIT() finaliza:
USE Ventas NEW
// Activar el modo de inserci.n
lModoIns = READINSERT(.T.)
Ventas->Notas := MEMOEDIT(Ventas->Notas)
// Restablecer el modo de inserci.n anterior
READINSERT(lModoIns)
Ficheros: La biblioteca asociada es CLIPPER.LIB.
READKEY()*
Determina qu. tecla ha finalizado un mandato READ
------------------------------------------------------------------------------
Sintaxis
READKEY() --> nC.digoTeclaRead
Devuelve
READKEY() devuelve un código que representa la tecla que se ha pulsado
para salir de un READ. En CA-Clipper, las siguientes son las teclas de
salida estándar de READ y sus códigos de retorno READKEY():
C.digos de Retorno de READKEY()
------------------------------------------------------------------------
Tecla de Salida C.digo de Retorno
------------------------------------------------------------------------
Arriba 5
Abajo 2
ReP.g 6
AvP.g 7
Ctrl-ReP.g 31
Ctrl-AvP.g 30
Esc 12
Ctrl-Fin, Ctrl-W 14
Escribir m.s all. del fin 15
Intro 15
------------------------------------------------------------------------
Descripción
READKEY() es una función de teclado que emula a la función READKEY() de
dBASE III PLUS. Su finalidad es determinar qu. tecla ha pulsado el
usuario para finalizar un READ. Si UPDATED() es verdadero (.T.),
READKEY() devuelve el código m.s 256. S.lo pueden utilizarse Arriba y
Abajo para salir de un mandato READ si READEXIT() vale verdadero (.T.).
El valor por defecto es falso (.F.). Para permitir una completa
compatibilidad de estas teclas, ejecute READEXIT (.T.) al principio de
su procedimiento principal.
READKEY() se incluye como función de compatibilidad, por lo que su
utilización no es recomendable. Puede sustituirse completamente por
LASTKEY(), que determina la .ltima pulsaci.n obtenida de la memoria
intermedia del teclado. Si la pulsaci.n fue una tecla de salida de READ,
LASTKEY() devuelve el código de INKEY() de esta tecla. Para determinar
si se ha modificado la memoria intermedia de un objeto Get durante un
READ, puede sustituirse por la función UPDATED().
Ficheros: La biblioteca asociada es EXTEND.LIB,
el fichero fuente es SOURCE\SAMPLE\READKEY.PRG
READMODAL()
Activa el modo de edici.n de pantalla completa de la GetList
------------------------------------------------------------------------------
Sintaxis
READMODAL(<aGetList>) --> NIL
Argumentos
<aGetList> es una matriz que contiene la lista de objetos Get que se
van a editar.
Devuelve
READMODAL() devuelve siempre NIL.
Descripción
READMODAL() es una función de interfaz de usuario que activa el modo de
pantalla completa para objetos GET. Forma parte del sistema Get de
arquitectura abierta de CA-Clipper. READMODAL() es similar al mandato
READ, excepto en que toma una matriz GetList como argumento y no
reinicializa la matriz cuando finaliza. Debido a esto, es posible
utilizar m.ltiples listas de objetos Get y activarlas en cualquier
momento de la ejecución de un programa, siempre que la matriz que se va
a utilizar est. visible.
Por compatibilidad con las versiones anteriores de CA-Clipper, el
sistema GET utiliza una matriz pública llamada GetList. Cada vez que se
ejecuta un mandato @...GET, .ste crea un objeto Get y lo a.ade a la
matriz GetList actualmente visible. El mandato READ estándar se
preprocesa mediante una llamada a READMODAL(), que utiliza la matriz
GetList como argumento. Si no se especifica la cláusula SAVE, se asigna
a la variable GetList una matriz vac.a cuando finaliza READMODAL().
Algunas de las funciónes de Getsys.prg se han hecho públicas para que
puedan utilizarse con otros sistemas Get personalizados. En la siguiente
tabla se listan estas funciónes.
funciónes del Sistema Get
------------------------------------------------------------------------
función Descripción
------------------------------------------------------------------------
GETACTIVE() Devuelve el objeto Get actualmente activo
GETAPPLYKEY() Aplica una tecla a un objeto Get desde una rutina de
lectura del Get
GETDOSETKEY() Procesa SET KEY durante la edici.n del objeto GET
GETPOSTVALIDATE() Eval.a la postcondición del objeto Get actual
GETPREVALIDATE() Eval.a la precondición del objeto Get actual
GETREADER() Ejecuta las acciones READ estándares para un objeto
Get
READFORMAT() Devuelve, y opciónalmente establece, el bloque de
código que define un fichero de formato (.fmt)
READKILL() Devuelve, y opciónalmente establece, si debe salirse
del Read actual
READUPDATED() Devuelve, y opciónamente establece, si un objeto Get
se ha modificado durante un Read
------------------------------------------------------------------------
Si desea información sobre los objetos Get y las funciónes antes
listadas, consulte el capítulo El Sistema Get de la guía de Programación
y Utilidades.
Si desea más información sobre las teclas que pueden utilizarse por
defecto con la función READMODAL(), consulte la referencia del mandato
READ de este capítulo.
Ficheros: La biblioteca asociada es CLIPPER.LIB,
el fichero fuente es SOURCE\SYS\GETSYS.PRG
READVAR()
Devuelve el nombre de la variable del Get o del Men. actual
------------------------------------------------------------------------------
Sintaxis
READVAR() --> cNombreVar
Devuelve
READVAR() devuelve el nombre de la variable asociada con el objeto Get
actual o el de la variable asignada mediante el mandato MENU TO, como
una cadena de carácteres en mayúsculas.
Descripción
READVAR() es una función de entorno que se utiliza, fundamentalmente,
para generaráayudas sensibles al contexto para objetos Get y men.s de
barra. READVAR() sólo puede utilizarse con los mandatos READ o MENU TO.
Si se utiliza durante cualquier otro estado de espera, como ACCEPT,
INPUT, WAIT, ACHOICE(), DBEDIT() o MEMOEDIT(), devuelve una cadena nula
(""). Es habitual acceder a ella desde un procedimiento SET KEY o
función invocada con una cláusula WHEN o VALID de un objeto Get.
Ejemplos
. Este ejemplo crea un sistema sencillo de ayuda para objetos
Get, utilizando un fichero de base de datos para almacenar el texto
de ayuda. Cuando el usuario pulsa F1, se busca en el fichero
utilizando READVAR() como valor clave y, si existe texto de ayuda, se
muestra en una ventana:
#include "Inkey.ch"
//
SET KEY K_F1 TO ConsultaAyuda
cCadena = SPACE(10)
@ 5, 5 SAY "Intro:" GET cCadena
READ
RETURN
FUNCTION ConsultaAyuda
USE Ayuda INDEX Ayuda NEW
SEEK READVAR()
IF FOUND()
MostrarAyuda(Ayuda->Tema)
ELSE
MostrarAyuda("No hay ayuda sobre " + READVAR())
ENDIF
CLOSE Ayuda
RETURN NIL
FUNCTION MostrarAyuda(cTema)
LOCAL cPantalla := SAVESCREEN(5,5,15,70),;
cColor := SETCOLOR("BG+/B")
//
SET CURSOR OFF
@ 5, 5 CLEAR TO 15, 70
@ 5, 5 TO 15, 70 DOUBLE
@ 5, 30 SAY " Ayuda para " + READVAR() + " "
MEMOEDIT(cTema, 6, 7, 14, 68, .F.)
//
RESTSCREEN(5, 5, 15, 70, cPantalla)
SETCOLOR(cColor)
SET CURSOR ON
//
RETURN NIL
Ficheros: La biblioteca asociada es CLIPPER.LIB.
RECCOUNT()*
Determina el número de registros del fichero (.dbf) actual
------------------------------------------------------------------------------
Sintaxis
RECCOUNT()* | LASTREC() --> nRegistros
Devuelve
RECCOUNT() devuelve el número de registros f.sicos existentes en el
fichero actual de base de datos, en forma de valor numérico entero. Los
mandatos de filtro como SET FILTER o SET DELETED no afectan al valor
devuelto. RECCOUNT() devuelve cero si no hay ningún fichero de base de
datos abierto en el área de trabajo actual.
Descripción
RECCOUNT() es una función de base de datos similar a LASTREC(). Por
defecto, RECCOUNT() opera en el área de trabajo actual. Si desea
utilizarla en otra área de trabajo, debe especificarla mediante una
expresión de alias (consulte el ejemplo siguiente).
Ejemplos
. Este ejemplo ilustra la relaci.n que existe entre COUNT y
RECCOUNT():
USE Ventas NEW
? RECCOUNT() // Resultado: 84
//
SET FILTER TO Vendedor = "1001"
COUNT TO nRegistros
? nRegistros // Resultado: 14
? RECCOUNT() // Resultado: 84
. Este ejemplo utiliza una expresión de alias para acceder al
número de registros de un área de trabajo no seleccionada:
USE Ventas NEW
USE Cliente NEW
? RECCOUNT(), Ventas->(RECCOUNT())
Ficheros: La biblioteca asociada es CLIPPER.LIB.
RECNO()
Devuelve el número del registro actual de un área de trabajo
------------------------------------------------------------------------------
Sintaxis
RECNO() --> nRegistro
Devuelve
RECNO() devuelve el número del registro actual, en forma de valor
numérico entero. Si el área de trabajo contiene un fichero con cero
registros, RECNO() devuelve uno, BOF() y EOF() devuelven verdadero (.T.)
y LASTREC() devuelve cero.
Si el puntero se desplaza m.s all. del último registro, RECNO() devuelve
LASTREC() + 1 y EOF() devuelve verdadero (.T.). Si se intenta desplazar
antes del primer registro, RECNO() devuelve el número del primer
registro l.gico del fichero de base de datos y BOF() devuelve verdadero
(.T.). Si no hay un fichero de base de datos abierto, RECNO() devuelve
cero.
Descripción
RECNO() es una función de base de datos que devuelve el número del
registro actual de un área de trabajo. En el esquema de ficheros de base
de datos de CA-Clipper, todos los ficheros se ordenan f.sicamente por
los números de registro. A su vez, todas las áreas de trabajo tienen un
puntero en el registro actual de su fichero abierto. RECNO() informa de
este número de registro. La numeraci.n permite accerder directamente a
un registro sin tener que examinar todo el fichero para llegar al
registro especificado.
RECNO() se utiliza normalmente con rutinas que procesan los registros
por su número. Estas incluyen SET RELATION...TO RECNO(), que enlaza
ficheros de base de datos por números de registro. GO RECNO() actualiza
también los datos del registro actual del disco.
Por defecto, RECNO() opera en el área de trabajo actual. Si desea
utilizarla en un área de trabajo no seleccionada, debe especificarla en
una expresión de alias (consulte el ejemplo siguiente).
Ejemplos
. Este ejemplo consulta RECNO() tras desplazar intencionadamente
el puntero de registro:
USE Clientes NEW
GO 3
? RECNO() // Resultado: 3
GO TOP
? RECNO() // Resultado: 1
nRegistro := 3
GO nRegistro
? RECNO() // Resultado: 3
GO BOTTOM
SKIP
? RECNO(), LASTREC() // Resultado: 11 10
. Este ejemplo utiliza expresiónes de alias para obtener el
valor de RECNO() en .reas de trabajo no seleccionadas:
USE Ventas NEW
USE Cliente NEW
//
? Ventas->(RECNO())
? Cliente->(RECNO())
Ficheros: La biblioteca asociada es CLIPPER.LIB.
RECSIZE()
Determina el tama.o de un registro de un fichero de base de datos (.dbf)
------------------------------------------------------------------------------
Sintaxis
RECSIZE() --> nBytes
Devuelve
RECSIZE() devuelve, como valor numérico entero, la longitud en bytes de
un registro del fichero de base de datos abierto en el área de trabajo
actual. Si no hay un fichero de base de datos abierto, RECSIZE()
devuelve cero.
Descripción
RECSIZE() es una función de base de datos que determina la longitud de
un registro, sumando lasólongitudes de cada campo y, a continúa.ión, uno
para el indicador de estado DELETED(). Si este valor se multiplica por
LASTREC(), el resultado es el espacio ocupado por todos los registros
del fichero.
RECSIZE() es útil en programas que realicen autom.ticamente copias de
seguridad del fichero. Si se utiliza con DISKSPACE(), la función
RECSIZE() permite comprobar la existencia de espacio libre suficiente en
el disco antes de guardar un fichero.
Por defecto, RECSIZE() opera en el área de trabajo actual. Si desea
utilizarla en un área de trabajo no seleccionada, debe especificarla en
una expresión de alias (consulte el ejemplo siguiente).
Ejemplos
. La siguiente función, TamanoDbf(), utiliza RECSIZE() para
calcular el tama.o del fichero actual de base de datos:
FUNCTION TamanoDbf
RETURN ((RECSIZE() * LASTREC()) + HEADER() + 1)
. Este ejemplo muestra la forma de utilización de RECSIZE() para
determinar la longitud de registro de un fichero abierto en un .rea
de trabajo no seleccionada.
USE Cliente NEW
USE Ventas NEW
//
? RECSIZE(), Cliente->(RECSIZE())
? TamanoDbf(), Cliente->(TamanoDbf())
Ficheros: La biblioteca asociada es EXTEND.LIB.
REPLICATE()
Devuelve una cadena, repetida el número de veces especificado
------------------------------------------------------------------------------
Sintaxis
REPLICATE(<cCadena>, <nVeces>) --> cCadenaRepetida
Argumentos
<cCadena> es la cadena de carácteres que se va a repetir.
<nVeces> es el número de veces que se va a repetir <cCadena>.
Devuelve
REPLICATE() devuelve una cadena de carácteres de una longitud máxima de
65.535 (64K) bytes. Si se especifica cero como argumento <nVeces>,
devuelve una cadena nula ("").
Descripción
REPLICATE() es una función de carácteres que muestra, imprime o llena la
memoria del teclado con uno o m.s carácteres repetidos. REPLICATE() es
similar a la función SPACE(), que devuelve el número especificado de
carácteres de espacio.
Ejemplos
. Estos ejemplos muestran la repetición de cadenas por medio de
REPLICATE():
? REPLICATE("*", 5) // Resultado: *****
? REPLICATE("Hola", 2) // Resultado: Hola Hola
? REPLICATE(CHR(42), 5) // Resultado: *****
. Este ejemplo utiliza REPLICATE() para llenar la mamoria del
teclado con varias flechas Abajo:
#include "Inkey.ch"
KEYBOARD REPLICATE(CHR(K_DN), 25)
Ficheros: La biblioteca asociada es CLIPPER.LIB.
RESTSCREEN()
Muestra una zona de pantalla prevíamente guardada, en la posición
especificada
------------------------------------------------------------------------------
Sintaxis
RESTSCREEN([<nSuperior>], [<nIzquierda>], [<nInferior>],
[<nDerecha>], <cPantalla>) --> NIL
Argumentos
<nSuperior>, <nIzquierda>, <nInferior> y <nDerecha>
definen las coordenadas de la información de pantalla contenida en
<cPantalla>. Si no se especificaron coordenadas con <cPantalla> para que
se guardara toda la pantalla, tampoco son necesarias con RESTSCREEN().
<cPantalla> es una cadena de carácteres que contiene la zona de
pantalla guardada.
Devuelve
RESTSCREEN() devuelve siempre NIL.
Descripción
RESTSCREEN() es una función que vuelve a mostrar una zona de pantalla
guardada con SAVESCREEN(). La posición de destáno puede ser la posición
de pantalla original u otra diferente. Si se especifica una nueva
posición, la nueva zona debe tener el mismo tama.o que la antigua o se
obtendr.n resultados ambiguos. Al utilizar RESTSCREEN() para recuperar
secciones de pantalla guardadas con SAVE SCREEN, pueden especificarse
coordenadas comprendidas entre 0, 0,y MAXROW(), MAXCOL().
.Advertencia! SAVE SCREEN, RESTORE SCREEN, SAVESCREEN() y
RESTSCREEN() sólo pueden utilizarse con el controlador de pantalla por
defecto. Otros controladores pueden no permitir guardar y recuperar las
pantallas.
Ejemplos
. Este ejemplo muestra RESTSCREEN() como parte de una función de
men. emergente de uso general, MenuEmerg():
? MenuEmerg({1, 1, 3, 10, {"ElementoUno", "ElementoDos"}, ;
"BG+/B"})
FUNCTION MenuEmerg(aLista)
LOCAL cPantalla, nSeleccion, cAntiguoColor := ;
SETCOLOR(aLista[6])
cPantalla := SAVESCREEN(aLista[1], aLista[2],;
aLista[3], aLista[4])
@ aLista[1], aLista[2] TO aLista[3], aLista[4] DOUBLE
nSeleccion := ACHOICE(++aLista[1], ++aLista[2],;
--aLista[3], --aLista[4], aLista[5])
SETCOLOR(cAntiguoColor)
RESTSCREEN(--aLista[1], --aLista[2], ++aLista[3],;
++aLista[4], cPantalla)
RETURN nSeleccion
Ficheros: La biblioteca asociada es EXTEND.LIB.
RIGHT()
Devuelve una subcadena, comenzando por el carácter situado m.s a la derecha
------------------------------------------------------------------------------
Sintaxis
RIGHT(<cCadena>, <nPosiciones>) --> cSubCadena
Argumentos
<cCadena> es la cadena de carácteres de la que se extraen los
carácteres.
<nPosiciones> es el número de carácteres que se van a extraer.
Devuelve
RIGHT() devuelve <nPosiciones> carácteres, contados desde el extremo
derecho de <cCadena>. Si <nPosiciones> es cero, RIGHT() devuelve una
cadena nula (""). Si <nPosiciones> es un número negativo o mayor que la
longitud de la cadena de carácteres, RIGHT() devuelve <cCadena>. El
máximo tama.o de una cadena es de 65.535 (64K) bytes.
Descripción
RIGHT() es una función de carácteres que extrae una subcadena comenzando
por el carácter situado m.s a la derecha de <cCadena>. Es id.ntica a la
expresión de carácteres SUBSTR(<cCadena>, -<nPosiciones>). Por ejemplo,
RIGHT("ABC", 1) esólo mismo que SUBSTR("ABC", -1). RIGHT() est.
relacionada con LEFT(), que extrae una subcadena comenzando por el
carácter m.s a la izquierda de <cCadena>.
Las funciónes RIGHT(), LEFT() y SUBSTR() se utilizan frecuentemente con
las funciónes AT() y RAT() para localizar la primera y/o .ltima posición
de una subcadena antes de extraerla.
Ejemplos
. Este ejemplo muestra la relaci.n que existe entre RIGHT() y
SUBSTR():
? RIGHT("ABCDEF", 3) // Resultado: DEF
? SUBSTR("ABCDEF", -3) // Resultado: DEF
. Este ejemplo extrae una subcadena, desde el final de otra
cadena hasta la .ltima aparici.n de una coma:
LOCAL cNombre := "Jaime,Guillermo"
? RIGHT(cNombre,;
LEN(cNombre) - RAT(",", cNombre) - 1) // Resultado: Guillermo
Ficheros: La biblioteca asociada es EXTEND.LIB.
RLOCK()
Bloquea el registro actual del área de trabajo activa
------------------------------------------------------------------------------
Sintaxis
RLOCK() --> lExito
Devuelve
RLOCK() devuelve verdadero (.T.) si se bloquea el registro; y falso
(.F.) en caso contrario.
Descripción
RLOCK() es una función de red que bloquea el registro actual, impidiendo
que otros usuarios puedan actualizar ese registro hasta que se libere.
RLOCK() permite un bloqueo compartido y los otros usuarios tienen acceso
de sólo lectura al registro bloqueado. S.lo se permite modificarlo al
usuario actual. El bloqueo de registro se mantiene hasta que se bloquee
otro registro, se ejecute un mandato UNLOCK, se cierre el fichero de
base de datos o se ejecute un FLOCK() en el fichero actual.
Por cada invocaci.n de RLOCK(), se realiza un intento de bloquear el
registro actual y el resultado se devuelve como valor l.gico. Los
intentos de bloqueo de un registro fallan cuando otro usuario ha
bloqueado o est. utilizando en modo exclusivo el fichero actual. Si se
intenta ejecutar RLOCK() en una base de datos vac.a, se devuelve
verdadero (.T.).
Por defecto, RLOCK() opera en el área de trabajo actual. Si desea
utilizarla en un área de trabajo no seleccionada, debe especificarla en
una expresión de alias (consulte el ejemplo siguiente). Esto puede ser
muy .til porque RLOCK() no intenta autom.ticamente bloquear los
registros de ficheros relacionados.
Normalmente, RLOCK() opera .nicamente en el registro actual. Esto
incluye los siguientes mandatos:
. @...GET
. DELETE (un registro)
. RECALL (un registro)
. REPLACE (un registro)
Si desea más información, consulte el capítulo Programaci.n en Red de la
guía de Programación y Utilidades.
Notas
. SET RELATION: CA-Clipper no bloquea autom.ticamente todos
los registros de la cadena de relaci.n cuando el usuario bloquea el
registro del área de trabajo actual. Asimismo, un mandato UNLOCK no
afecta a las .reas de trabajo relacionadas.
Ejemplos
. Este ejemplo borra un registro en un entorno de red utilizando
RLOCK():
USE Clientes INDEX NombreCli SHARED NEW
SEEK "Martinez"
IF FOUND()
IF RLOCK()
DELETE
? "Martinez ha sido borrado"
ELSE
? "Otro usuario est. utilizando el registro"
ENDIF
ELSE
? "Martinez no se encuentra en el fichero Clientes"
ENDIF
CLOSE
. Este ejemplo especifica RLOCK() en una expresión de alias para
bloquear un registro en un área de trabajo no seleccionada:
USE Ventas SHARED NEW
USE Clientes SHARED NEW
//
IF !Ventas->(RLOCK())
? "Otro usuario est. utilizando el registro Ventas actual"
ENDIF
Ficheros: La biblioteca asociada es CLIPPER.LIB.
ROUND()
Devuelve un valor numérico, redondeado con el número de cifras especificado
------------------------------------------------------------------------------
Sintaxis
ROUND(<nNúmero>, <nDecimales>) --> nRedondeado
Argumentos
<nNúmero> es el valor numérico que se va a redondear.
<nDecimales> define el número de decimales que se mantienen. Si se
especifica un valor negativo, se redondean números enteros.
Devuelve
ROUND() devuelve un valor numérico.
Descripción
ROUND() es una función numérica que redondea <nNúmero> con el número de
decimales especificado con <nDecimales>. Si se especifica cero o un
valor negativo en <nDecimales> se redondea el número entero. Un valor
negativo de <nDecimales> indica el número de cifras a la izquierda de la
coma decimal que se van a redondear. Las cifras entre cinco y nueve,
ambos inclusive, se redondean por encima y las cifras inferiores a cinco
se redondean por debajo.
La visualización del valor devuelto no obedece el valor de DECIMALS, a
menos que se haya establecido SET FIXED ON. Si se ha establecido SET
FIXED OFF, la visualización del valor devuelto contiene tantas cifras
decimales como las especificadas en <nDecimales> o cero, si <nDecimales>
es menor de uno.
Ejemplos
. Estos ejemplos redondean valores con cifras decimales:
SET DECIMALS TO 2
SET FIXED ON
//
? ROUND(10.4, 0) // Resultado: 10.00
? ROUND(10.5, 0) // Resultado: 11.00
? ROUND(10.51, 0) // Resultado: 11.00
? ROUND(10.49999999999999, 2) // Resultado: 10.50
. Estos ejemplos utilizan un argumento <nDecimales> negativo y
redondean valores numéricos en números enteros:
? ROUND(101.99, -1) // Resultado: 100.00
? ROUND(109.99, -1) // Resultado: 110.00
? ROUND(109.99, -2) // Resultado: 100.00
Ficheros: La biblioteca asociada es CLIPPER.LIB.
ROW()
Devuelve la fila actual del cursor
------------------------------------------------------------------------------
Sintaxis
ROW() --> nFila
Devuelve
ROW() devuelve la posición de fila del cursor, en forma de valor
numérico entero. El rango del valor devuelto es de cero a MAXROW().
Descripción
ROW() es una función de pantalla que devuelve la posición de fila o
línea actual del cursor en la pantalla. El valor de ROW() se actualiza
por los mandatos y funciónes, tanto de consola como de pantalla
completa. @...SAY sólo actualiza ROW() cuando se ha establecido SET
DEVICE TO SCREEN.
ROW() se utiliza con COL() y todas las variantes del mandato @ para
colocar el cursor en una nueva línea respecto a la línea actual. En
concreto, ROW() y COL() pueden utilizarse para crear procedimientos y
funciónes de posición independiente, en los que la fila y columna
superior izquierda se pasan como parámetros.
ROW() está relacionada con PROW() y PCOL(), que controla la posición
actual del cabezal de la impresora en vez de la posición del cursor.
Ejemplos
. En este ejemplo, ROW() simula el mandato LIST, mostrando el
texto en la misma línea, pero en diferentes columnas:
LOCAL nFila
USE Cliente INDEX NombreCli NEW
DO WHILE .NOT. EOF()
CLS
@ 1, 1 SAY PADR("Nombre" LEN(CNombreCli))
@ ROW(), COL() + 2 SAY PADR("Direccion", ;
LEN(Direccion))
@ ROW(), COL() + 2 SAY PADR("Tel.fono", LEN(Telefono))
nFila = 0
DO WHILE nFila++ <= 15 .AND. (!EOF())
@ ROW() + 1, 1 SAY NombreCli
@ ROW(), COL() + 2 SAY Direccion
@ ROW(), COL() + 2 SAY Telefono
SKIP
ENDDO
WAIT
ENDDO
CLOSE Cliente
Ficheros: La biblioteca asociada es CLIPPER.LIB.
RTRIM()
Suprime los espacios finales de una cadena de carácteres
------------------------------------------------------------------------------
Sintaxis
[R]TRIM(<cCadena>) --> cCadenaSuprim
Argumentos
<cCadena> es la cadena de carácteres que se va a copiar sin espacios
finales.
Devuelve
RTRIM() devuelve una copia de <cCadena> sin espacios finales. Si
<cCadena> es una cadena nula ("") o todo espacios, RTRIM() devuelve una
cadena nula ("").
Descripción
RTRIM() es una función que formatea cadenas de carácteres. Sirve para
borrar espacios finales al concatenar cadenas, lo que ocurre con mucha
frecuencia en los campos de base de datos que se almacenan con un
formato de anchura fija. Por ejemplo, RTRIM() puede utilizarse para
concatenar los campos que contienen el nombre y el apellido para formar
una cadena con el nombre completo.
RTRIM() está relacionada con LTRIM(), que suprime los espacios
iniciales, y con ALLTRIM(), que suprime tanto los espacios iniciales
como los finales. Las funciónes inversas de ALLTRIM(), LTRIM() y RTRIM()
son PADC(), PADR() y PADL(), que centra, justifica a la derecha o
justifica a la izquierda, respectivamente, las cadenas de carácteres,
rellen.ndolas con carácteres de relleno.
Ejemplos
. Esta es una función en la que RTRIM() formatea los campos
Ciudad, Provincia y C.digo postal para etiquetas y circulares:
FUNCTION Direccion(cCiudad, cProvincia, cCodigoPostal)
RETURN RTRIM(cCiudad) + ", " ;
+ RTRIM(cProvincia) + " " + cCodigoPostal
. En este ejemplo, la función, Direccion(), muestra un registro
de Clientes.dbf:
USE Clientes INDEX NombreCli NEW
SEEK "Rosa"
? Direccion(Ciudad, Provincia, CodigoPostal)
// Resultado: Oviedo, Asturias 43066
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SAVESCREEN()
Guarda una parte de la pantalla para su posterior visualización
------------------------------------------------------------------------------
Sintaxis
SAVESCREEN([<nSup>], [<nIzq>], [<nInf>], [<nDer>]) --> cPantalla
Argumentos
<nSup>, <nIzq>, <nInf>, y <nDer> definen las coordenadas
de la parte de la pantalla que va a guardarse. Si <nInf> o <nDer> son
mayores que MAXROW() o MAXCOL(), la pantalla se recorta. Si no
especifican coordenadas, se guarda toda la pantalla (es decir, desde 0,0
hasta MAXROW(), MAXCOL()).
Devuelve
SAVESCREEN() devuelve la zona especificada de la pantalla, como cadena
de carácteres.
Descripción
SAVESCREEN() es una función de pantalla que guarda una zona de la
pantalla en una variable de cualquier clase de almacenamiento,
incluyendo variables de campo. M.s adelante, puede volver a mostrar la
imagen de pantalla guardada, en la misma posición o en otra nueva,
utilizando RESTSCREEN( ). Normalmente, las zonas de pantalla se
alamacenan y recuperan cuando se utiliza una rutina de men. desplegable
o se arrastra un objeto de pantalla.
Advertencia SAVE SCREEN, RESTORE SCREEN, SAVESCREEN(), y
RESTSCREEN() se admiten cuando se utiliza el controlador de pantalla por
defecto. Es posible que otros controladores de pantalla no admitan las
operación.s de archivo y recuperaci.n de pantallas.
Ejemplos
. La siguiente función definida por el usuario crea un men. que
aparece en pantalla utilizando ACHOICE() con SAVESCREEN(),
devolviendo la selecci.n en la matriz de opciónes:
FUNCTION Menu( nSup, nIzq, nInf, nDer, ;
aElementos, cColor )
LOCAL cPantalla, nOpcion, cUltColor := ;
SETCOLOR(cColor)
//
cPantalla:= SAVESCREEN(nSup, nIzq, nInf, nDer)
@ nSup, nIzq TO nInf, nDer DOUBLE
//
nOpcion:= ACHOICE(++nSup, ++nIzq, ;
--nInf, --nDer, aElementos)
//
RESTSCREEN(--nSup, --nIzq, ++nInf, ++nDer, ;
cPantalla)
SETCOLOR(cUltColor)
RETURN nOpcion
Ficheros: La biblioteca asociada es EXTEND.LIB.
SCROLL()
Desplaza una zona de la pantalla hacia arriba o hacia abajo, a la derecha o a
la izquierda
------------------------------------------------------------------------------
Sintaxis
SCROLL([<nSup>], [<nIzq>],[<nInf>],[<nDer>],
[<nVert>] [<nHoriz>]) --> NIL
Argumentos
<nSup>, <nIzq>, <nInf>, y <nDer> definen las coordenadas
de la zona de desplazamiento. Los valores de filas y columnas pueden ir
desde 0, 0 hasta MAXROW(), MAXCOL(). Si no especifica argumentos de
coordenadas, se utilizan las dimensiónes de la pantalla visible.
<nVert> define el número de filas de desplazamiento vertical. Un
valor positivo desplaza hacia arriba la pantalla el número especificado
de filas. Un valor negativo desplaza hacia abajo la pantalla el número
especificado de filas. Un valor cero desactiva el desplazamiento
vertical. Si no se especifica <nVert> se asume un valor cero.
<nHoriz> define el número de filas de desplazamiento horizontal. Un
valor positivo hace que la pantalla se desplace hacia la izquierda el
número de columnas especificado. Un valor negativo hace que la pantalla
se desplace hacia la derecha el número de columnas especificado. Un
valor cero desactiva el desplazamiento horizontal. Si no se especifica
<nHoriz>, se asume un valor cero.
Si no introduce los parámetros <nVert> ni <nHoriz> en SCROLL(), el .rea
especificada por los cuatro primero parámetros queda en blanco.
.Advertencia! El desplazamiento horizontal no se puede utilizar en
ningúno de los controladores de terminal alternativos (ANSITERM,
NOVTERM, PCBIOS).
Devuelve
SCROLL() siempre devuelve NIL.
Descripción
SCROLL() es una función de pantalla que desplaza una zona de .sta hacia
arriba o hacia abajo un número especificado de filas. Cuando una
pantalla se desplaza hacia arriba, la primera línea de la zona se borra;
las líneas restántes se desplazan hacia arriba y se muestra una línea en
blanco en el color estándar actual en la .ltima línea de la zona
especificada. Si la zona se desplaza hacia abajo, la operación.se
invierte. Si la zona de pantalla se desplaza m.s de una línea, se repite
este proceso.
SCROLL() se utiliza principalmente para mostrar información de estado en
una zona definida de la pantalla. Cada vez que se muestra un mensaje
nuevo, la zona de la pantalla se desplaza una línea hacia arriba y se
muestra una nueva línea en la parte inferior.
Ejemplos
. Esta función definida por el usuario muestra una cadena de
mensaje al final de una zona de pantalla después de desplazarla una
línea hacia arriba:
FUNCTION DespArr( nSup, nIzq, nInf, nDer, ;
expVisual )
//
SCROLL(nSup, nIzq, nInf, nDer, 1)
@ nInf, nIzq SAY expVisual
//
RETURN NIL
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SECONDS()
Devuelve el número de segundos transcurridos desde la medianoche
------------------------------------------------------------------------------
Sintaxis
SECONDS() --> nSegundos
Devuelve
SECONDS() devuelve la hora del sistema como valor numérico en forma de
segundos.cent.simas. El valor numérico devuelto es el número de segundos
transcurridos desde medianoche y se basa en un reloj de veinticuatro
horas con un rango de cero a 86399.
Descripción
SECONDS() es una función de tiempo que ofrece un m.todo simple para
calcular el tiempo transcurrido durante la ejecución de un programa
bas.ndose en el reloj del sistema. Esta función está relacionada con la
función TIME() que devuelve la hora del sistema como una cadena con el
formato hh:mm:ss.
Ejemplos
. Este ejemplo contrasta el valor de TIME() con SECONDS():
? TIME() // Resultado: 10:00:00
? SECONDS() // Resultado: 36000.00
. Este ejemplo utiliza SECONDS() para controlar el tiempo
transcurrido en segundos:
LOCAL nInicio, nTranscurrido
nInicio:= SECONDS()
.
. <sentencias>
.
nTranscurrido:= SECONDS() - nInicio
? "Transcurrido: " + LTRIM(STR(nTranscurrido)) + " segundos"
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SELECT()
Determina el número de área de trabajo de un alias especificado
------------------------------------------------------------------------------
Sintaxis
SELECT([<cAlias>]) --> nAreadeTrabajo
Argumentos
<cAlias> es el nombre alias del área de trabajo destáno.
Devuelve
SELECT() devuelve el área de trabajo del alias especificado como valor
numérico entero.
Descripción
SELECT() es una función de base de datos que determina el número de .rea
de trabajo de un alias. El número devuelto puede estar comprendido entre
cero y 250. Si no se especifica <cAlias>, se devuelve el número del .rea
de trabajo actual. Si se especifica y el alias no existe, SELECT()
devuelve cero.
Nota: La función SELECT() y el mandato SELECT especificados con un
argumento de expresión ampliado tienen un aspecto muy similar. Esto no
debe constituir un problema ya que la función SELECT() no es muy .til en
s. misma si figura aislada en una línea.
Ejemplos
. Este ejemplo utiliza SELECT() para determinar qu. .rea de
trabajo ha seleccionado USE...NEW:
USE Ventas NEW
SELECT 1
? SELECT("Ventas") // Resultado: 4
. Para volver a seleccionar el valor devuelto por la función
SELECT(), utilice el mandato SELECT con la sintaxis
SELECT(<idVarmem>), del modo siguiente:
USE Ventas NEW
nAreadeTrabajo:= SELECT()
USE Cliente NEW
SELECT (nAreadeTrabajo)
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SET()
Comprueba o modifica un valor de configuración del sistema
------------------------------------------------------------------------------
Sintaxis
SET(<nEspecificador>, [<expNuevoValor>],
[<lModoApertura>]) --> ValorActual
Argumentos
<nEspecificador> es un valor numérico que identifica al valor que
debe comprobarse o modificarse. <nEspecificador> debe proporcionarse
como una constante declarada (ver a continúa.ión).
<expNuevoAjuste> es un argumento opciónal que indica un valor
nuevo para <nEspecificador>. El tipo de este argumento depende de
<nEspecificador>.
<lModoApertura> es un valor l.gico que indica si los ficheros que
se abren para los siguientes pr.positos:
_SET_ALTFILE, _SET_PRINTFILE, _SET_EXTRAFILE
deber.an truncarse o abrirse en modo de adici.n. Un valor de falso
(.F.) signfica que el fichero debe truncarse. Un valor de verdadero
significa que el fichero debe abrirse en modo de adici.n. En
cualquier caso, si el fichero no existe se crea.
Si no se especifica este argumento, el valor por defecto es modo de
adici.n.
Devuelve
SET() devuelve el valor de configuración actual de la carácter.stica
especificada.
Descripción
SET() es una función del sistema que le permite comprobar o modificar
los valores de sistema de CA-Clipper. Para obtener más información
sobre el significado y valores correctos para un ajuste en concreto,
consulte el mandato o función asociados.
Use una constante declarada para especificar el ajuste que deba ser
comprobado o modificado. Estas constantes se definen en un fichero
de cabecera llamado Set.ch. Este fichero debe incluirse al principio
de cualquier módulo fuente que utilice SET().
Set.ch también define una constante llamada _SET _COUNT. Esta constante
es igual al número de ajustes que pueden cambiarse o inspeccionarse con
SET(), permitiendo la construcci.n de una función gen.rica que conserva
todos los ajustes (consulte el ejemplo que aparece m.s adelante).
Nota: Los valores numéricos de las constantes declaradas en
Set.ch dependen de la versi.n y nunca deben utilizarse directamente,
siempre deben utilizarse las constantes declaradas.
Si <nEspecificador> o <expNuevoAjuste> no son víaacute;lidos, se ignora la
llamada a SET().
Valores de Set Definidos en Set.ch
------------------------------------------------------------------------
Constante Tipo de Valor Mandato o función Asociados
------------------------------------------------------------------------
_SET_EXACT L.gico SET EXACT
_SET_FIXED L.gico SET FIXED
_SET_DECIMALS numérico SET DECIMALS
_SET_DATEFORMAT C.racter SET DATE
_SET_EPOCH numérico SET EPOCH
_SET_PATH C.racter SET PATH
_SET_DEFAULT C.racter SET DEFAULT
_SET_EXCLUSIVE L.gico SET EXCLUSIVE
_SET_SOFTSEEK L.gico SET SOFTSEEK
_SET_UNIQUE L.gico SET UNIQUE
_SET_DELETED L.gico SET DELETED
_SET_CANCEL L.gico SETCANCEL()
_SET_DEBUG L.gico ALTD()
_SET_COLOR C.racter SETCOLOR()
_SET_CURSOR numérico SETCURSOR()
_SET_CONSOLE L.gico SET CONSOLE
_SET_ALTERNATE L.gico SET ALTERNATE
_SET_ALTFILE C.racter SET ALTERNATE TO
_SET_DEVICE C.racter SET DEVICE
_SET_PRINTER L.gico SET PRINTER
_SET_PRINTFILE C.racter SET PRINTER TO
_SET_MARGIN numérico SET MARGIN
_SET_BELL L.gico SET BELL
_SET_CONFIRM L.gico SET CONFIRM
_SET_ESCAPE L.gico SET ESCAPE
_SET_INSERT L.gico READINSERT()
_SET_EXIT L.gico READEXIT()
_SET_INTENSITY L.gico SET INTENSITY
_SET_SCOREBOARD L.gico SET SCOREBOARD
_SET_DELIMITERS L.gico SET DELIMITERS
_SET_DELIMCHARS C.racter SET DELIMITERS TO
_SET_WRAP L.gico SET WRAP
_SET_MESSAGE numérico SET MESSAGE
_SET_MCENTER L.gico SET MESSAGE
------------------------------------------------------------------------
Nota: _SET_EXTRAFILE y _SET_SCROLLBREAK no tienen mandatos
correspondientes. _SET_EXTRAFILE le permite especificar un fichero
alternativo adicional y _SET_SCROLLBREAK activar o desactivar la
interpretaci.n de Ctrl-S.
Ejemplos
. Este ejemplo muestra una función definida por el usuario que
conserva o restaura toda la configuración. Esta función podr.a
utilizarse al entrar en un subsistema para garantizar que .ste no
afecta al estado del programa que lo ha llamado:
#include "Set.ch"
//
FUNCTION EstablecerTodo( aNuevosValores )
LOCAL aValoresActuales[_SET_COUNT], nActuales
IF ( aNuevosValores != NIL ) // Establecer los nuevos y devolver los
actuales
FOR nActuales := 1 TO _SET_COUNT
aValoresActuales[nActuales] := ;
SET(nActuales, aNuevosValores[nActuales])
NEXT
ELSE // Devolver sólo actuales
FOR nActuales := 1 TO _SET_COUNT
aValoresActuales[nActuales] := SET(nActuales)
NEXT
ENDIF
RETURN (aValoresActuales)
Ficheros: La biblioteca asociada es CLIPPER.LIB
y el fichero de cabecera Set.ch.
SETBLINK()
Activa o desactiva la interpretaci.n del asterisco (*) en la cadena
SETCOLOR() entre parpadeo e intensidad de fondo
------------------------------------------------------------------------------
Sintaxis
SETBLINK([<lActivar/Desactivar>]) --> lValorActual
Argumentos
<lActivar/Desactivar> modifica el significado del carácter asterisco
(*) cuando se encuentra en una cadena SETCOLOR(). Especificando
verdadero, se establece el parpadeo de los carácteres; falso (.F.)
establece la intensidad del fondo. El valor por defecto es verdadero
(.T.).
Devuelve
SETBLINK() devuelve el valor de la configuración actual como valor
l.gico.
Descripción
SETBLINK() es una función de entorno que activa o desactiva el atributo
de parpadeo/intensidad de fondo e informa sobre el estado actual de
SETBLINK(). Cuando la función est. activada, los carácteres escritos en
la pantalla parpadean mediante la inclusi.n de un asterisco (*) en una
cadena de color pasada a SETCOLOR(). Cuando SETBLINK() est. desactivado,
el asterisco hace que el color del fondo se intensifique. As. pues, los
atributos de parpadeo e intensidad de fondo no están disponibles a la
vez.
Nota: Esta función sólo tiene sentido en PCs de IBM u ordenadores
compatibles con dispositivos de visualización CGA, EGA, o VGA.
Ejemplos
. Este ejemplo guarda el estado actual SETBLINK() antes de pasar
el control a una función definida por el usuario. Tras la devoluci.n
SETBLINK() se restaura a su valor original:
lParpAnti := SETBLINK()
MiFunc()
SETBLINK(lParpAnti)
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SETCANCEL()
Activa o desactiva Alt-C y Ctrl-Intro como teclas de finalizaci.n de programa
------------------------------------------------------------------------------
Sintaxis
SETCANCEL([<lActivar/Desactivar>]) --> lAjusteActual
Argumentos
<lActivar/Desactivar> modifica la disponibilidad de Alt-C y
Ctrl-Intro como teclas de finalizaci.n. Un valor de verdadero (.T.)
permite la utilización de ambas combinaciónes de teclas para finalizar
una aplicación y un valor de falso (.F.) las desactiva. El valor por
defecto es verdadero (.T.).
Devuelve
SETCANCEL() devuelve el ajuste actual como valor l.gico.
Descripción
SETCANCEL() es una función de teclado que activa o desactiva el estado
de las teclas de finalizaci.n Alt-C y Ctrl-Inter, e informa sobre el
estado actual de SETCANCEL().
Tenga en cuenta que si Alt-C o Ctrl-Enter se redefinen con SET KEY, esta
nueva definición tiene precedencia aunque SETCANCEL() devuelva verdadero
(.T.).
.Advertencia! Cuando se establece SETCANCEL() como falso (.F.), el
usuario no puede finalizar un programa fuera de control a menos que se
le proporcione un mecanismo de escape alternativo.
Ejemplos
. Este ejemplo ofrece una vía de escape a partir de un estado de
espera con la función SET CANCEL() desactivada:
#define K_ALTC 302
//
SETCANCEL(.F.) // Desactivar teclas de finalizaci.n
SET KEY K_ALTC TO AltC // Redefinir Alt-C
.
. <sentencias>
.
RETURN
FUNCTION AltC
LOCAL cPantalla, nOpcion, cúltimoColor := ;
SETCOLOR("W/B, N/G")
//
SAVE SCREEN TO cPantalla
@ 6, 20 CLEAR TO 9, 58
@ 6, 20 TO 9, 58 DOUBLE
@ 7, 26 SAY "Alt-C: .Desea salir?"
@ 8, 35 PROMPT " S. "
@ 8, 41 PROMPT " No "
MENU TO nOpcion
SETCOLOR(cúltimoColor)
RESTORE SCREEN FROM cPantalla
//
IF nOpcion = 1
QUIT
ENDIF
//
RETURN NIL
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SETCOLOR()
Devuelve los colores actuales y, opciónalmente, establece algunos nuevos
------------------------------------------------------------------------------
Sintaxis
SETCOLOR([<cCadenaColor>]) cCadenaColor
Argumentos
<cCadenaColor> es una cadena de carácteres que contiene una lista
de atributos de color para la posterior salida por pantalla. La
siguiente es una lista de ajustes y ámbitos relacionados:
configuraciónes de Color
------------------------------------------------------------------------
configuración ámbito
------------------------------------------------------------------------
Est.ndar Todosólos mandatos y funciónes de salida por pantalla
Resaltado GET y zonas resaltadas de opciónes
Borde Borde alrededor de la pantalla; no se usa en EGA y VGA
Fondo No est. admitido
Sin Selec. GET sin seleccionar u opción de men. no accesible
------------------------------------------------------------------------
Cada configuración es un par de colores de primer plano y fondo
separados por un carácter de barra (/) y seguidos por una coma. Todas
las configuraciónes son opciónales. Si se ignora una configuración,
se conserva su valor previo estableci.ndose sólo valores nuevos.
Devuelve
SETCOLOR() devuelve el ajuste de color actual como una cadena de
carácteres.
Descripción
SETCOLOR() es una función de pantalla que guarda la configuración de
color actual o establece nuevos colores para el posterior coloreado
de la pantalla. Una cadena de color est. formada por varias
configuraciónes de color, correspondiendo cada color a diferentes
zonas de la pantalla. Tal y como se ha dicho anteriormente, cada
configuración consta de un color de primer plano y otro de fondo. El
primer plano define el color de los carácteres que se muestran en la
pantalla. El fondo define el color que se muestra detrás del
carácter. Los espacios y carácteres que no se visualización se
muestran como fondo.
En CA-Clipper, las configuraciónes que definen el comportamiento de
los colores son:
Est.ndar: La configuración estándar controla todos los mandatos y
funciónes de consola, pantalla completa e interfaz cuando se muestran
en la pantalla. Esto incluye mandatos como @...PROMPT, @...SAY y ? y
funciónes como ACHOICE(), DBEDIT() y MEMOEDIT().
Resaltado: La configuración resaltada controla la visualización
de las zonas resaltadas. Esto incluye GET si se ha establecido SET
INTENSITY ON y las zonas resaltadas de selecci.n de MENU TO, DBEDIT()
y ACHOICE().
Borde: El borde es un .rea situada alrededor de la pantalla en la
cual no puede escribirse.
Fondo: El fondo no se utiliza.
Sin selecionar: Esta configuración se usa para visualizar los GET
no seleccionados y las opciónes de men. no disponibles. Además de los
colores, los ajustes de primer plano pueden tener atributos de
intensidad alta y/o parpadeo. Con una pantalla monocroma, la intensidad
alta aumenta el brillo del texto. Con una pantalla en color, la
intensidad cambia la tonalidad del color especificado. Por ejemplo, "N"
muestra el texto de primer plano en negro mientras que "N+" lo muestra
en gris. La intensidad alta viene indicada mediante "+". El atributo de
parpadeo hace que el texto de primer plano aparezca y desaparezca a
intervalos r.pidos. Este atributo se indica mediante "*". El carácter
de atributo puede estar en cualquier punto de la cadena de configuración,
pero siempre afecta al color de primer plano con independencia del lugar
en que se introduzca.
Se admiten los siguientes colores:
Lista de Colores
------------------------------------------------------------------------
Color Letra Monocromo
------------------------------------------------------------------------
Negro N, Espacio Negro
Azul B Subrayado
Verde G Blanco
Cian BG Blanco
Rojo R Blanco
Magenta RB Blanco
Marr.n GR Blanco
Blanco W Blanco
Gris N+ Blanco
Azul Intenso B+ Subr. Intenso
Verde Intenso G+ Blanco Intenso
Cian Intenso BG+ Blanco Intenso
Rojo Intenso R+ Blanco Intenso
Magenta Int. RB+ Blanco Intenso
Amarillo GR+ Blanco Intenso
Blanco Intenso W+ Blanco Intenso
Negro U Subrayado
V.deo Inverso I V.deo Inverso
En Blanco X En Blanco
------------------------------------------------------------------------
Notas
. Argumentos no especificados: Al contrario que SET COLOR
TO, SETCOLOR() sin argumentos no restaura los colores a sus valores
por defecto.
. números de colores: SETCOLOR() admite combinaciónes de
letras de colores pero no de números de colores.
Ejemplos
. Este ejemplo asigna la configuración de color actual a la
variable cColor:
cColor:= SETCOLOR()
. Este ejemplo utiliza SETCOLOR() para guardar la configuración
de color actual y establecer una nueva.
cColorNuevo:= "BR+/N, R+/N"
cColorAntiguo:= SETCOLOR(cColorNuevo)
. Este ejemplo utiliza SET COLOR TO para volver a establecer los
colores por defecto:
SET COLOR TO
? SETCOLOR() // Resultado: W/N, N/W, N, N, N/W
. Estos dos ejemplos especifican SETCOLOR() sin algunas
configuraciónes:
// configuraciónes omitidas
SETCOLOR("W/N, BG+/B")
//
// configuraciónes ignoradas dentro de la lista
SETCOLOR("W/N, BG+/B,,,W/N")
. Este ejemplo utiliza SETCOLOR() con ISCOLOR() para establecer
los colores, dependiendo del tipo de pantalla:
FUNCTION ColoresDefecto
IF ISCOLOR()
cFormulario := "W+/N, BG+/B,,,W/N"
cDialogo := "N/N+, BG+/B,,,N/N+"
cAviso := "W+/R, BG+/B,,,W+/R"
ELSE
cFormulario := "W+/N, N/W,,,W/N"
cDialogo := "W+/N, N/W,,,W/N"
cAviso := "W+/N, N/W,,,W/N"
ENDIF
RETURN NIL
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SETCURSOR()
Establece la forma del cursor
------------------------------------------------------------------------------
Sintaxis
SETCURSOR([<nFormaCursor>]) --> nFormaActual
Argumentos
<nFormaCursor> es un número que indica la forma del cursor. Para
códigos sencillos, el fichero de cabecera Setcurs.ch ofrece nombres
descriptivos para las diversas formas del cursor tal y como se muestra
en la siguiente tabla:
Formas del Cursor
------------------------------------------------------------------------
Formas Valor Setcurs.ch
------------------------------------------------------------------------
Ninguna 0 SC_NONE
Subrayado 1 SC_NORMAL
Bloque medio inferior 2 SC_INSERT
Bloque completo 3 SC_SPECIAL1
Bloque medio superior 4 SC_SPECIAL2
------------------------------------------------------------------------
Devuelve
SETCURSOR() devuelve la forma actual del cursor como valor numérico.
Descripción
SETCURSOR() es una función de entorno que controla la forma del cursor
de pantalla. La forma real depende del controlador actual de la
pantalla. Las formas especificadas aparecen en PC de IBM y ordenadores
compatibles. En otros ordenadores, el aspecto puede diferir para cada
valor especificado.
SETCURSOR(0) equivale a SET CURSOR OFF y cualquier valor entero positivo
de <nFormaCursor> menor que 5 equivale a SET CURSOR ON. El cursor se
muestra con la forma seleccionada.
Ejemplos
. Este ejemplo utiliza SETCURSOR() para que el cursor adopte la
forma de bloque completo para el READ posterior. Una vez finalizado
el READ, SETCURSOR() desactiva el cursor:
#include "Setcurs.ch"
//
USE Cliente NEW
@ 10, 10 GET Cliente->Nombre
@ 11, 10 GET Cliente->Telefono
//
SETCURSOR(SC_SPECIAL1) // Cambiar el cursor a bloque
READ
SETCURSOR(SC_NONE) // Desactivar cursor
Ficheros: La biblioteca asociada es CLIPPER.LIB
y el fichero de cabecera Setcurs.ch.
SETKEY()
Asigna un bloque de acci.n a una tecla
------------------------------------------------------------------------------
Sintaxis
SETKEY(<nC.digoInkey>, [<bAcción>]) --> bAcciónActual
Argumentos
<nC.digoInkey> es el valor INKEY() de la tecla a la que va a
asociarse la acci.n o que va a consultarse.
<bAcción> especifica un bloque de código que se ejecuta
autom.ticamente siempre que se pulsa la tecla especificada durante un
estado de espera.
Devuelve
SETKEY() devuelve el bloque de acci.n asociado actualmente a la tecla
especificada o NIL si dicha tecla no est. asociada a ningún bloque.
Descripción
SETKEY() es una función de teclado que establece o consulta la acci.n
autom.tica asociada a una tecla determinada durante un estado de espera.
Un estado de espera es cualquier modo que lee del teclado a excepci.n de
INKEY(), pero incluyendo ACHOICE(), DBEDIT(), MEMOEDIT(), ACCEPT, INPUT,
READ y WAIT. Pueden asignarse hasta 32 teclas a la vez. Al arrancar, el
sistema asigna autom.ticamente la tecla F1 para ejecutar u procedimiento
o función definida por el usuario denominado Help.
Cuando se pulsa una tecla asignada durante un estado de espera, la
función EVAL() eval.a la <bAcción> asociada y los parámetros PROCNAME(),
PROCLINE() y READVAR(). Sin embargo, no es necesario listar los
argumentos al especificar <bAcción> si no se van a utilizar dentro del
bloque de acci.n.
SETKEY() es como el mandato SET KEY que asocia una llamada a un
procedimiento a una tecla.
Ejemplos
. Este fragmento de código asocia un bloque de acci.n a una
tecla, después, tras obtener una tecla con INKEY(), la ejecuta con la
función EVAL():
#include "Inkey.ch"
SETKEY(K_DN, {|cProc, nLinea, cVar| MiProc(cProc, ;
nLinea, cVar)})
.
. <sentencias>
.
DO WHILE .T.
nTecla := INKEY(0)
DO CASE
CASE (bAcción := SETKEY(nTecla)) != NIL
EVAL(bAcción, PROCNAME(), PROCLINE(), READVAR())
CASE nTecla = K_PGUP
Previous()
CASE nTecla = K_PGDN
Next()
CASE nTecla = K_ESC
EXIT
ENDCASE
ENDDO
Ficheros: La biblioteca asociada es CLIPPER.LIB
y el fichero de cabecera Inkey.ch.
SETMODE()
Cambia el modo de visualización a un número especificado de filas y columnas
------------------------------------------------------------------------------
Sintaxis
SETMODE(<nFilas>, <nCols>) --> lCorrecto
Argumentos
<nFilas> es el número de filas en el modo de visualización deseado.
<nCols> es el número de columnas en el modo de visualización
deseado.
Devuelve
SETMODE() devuelve verdadero (.T.) si el cambio de modo ha sido
satisfactorio; en caso contrario, devuelve falso (.F.).
Descripción
SETMODE() es una función de entorno que intenta cambiar el modo del
dispositivo de visualización para que coincida con el número de filas y
columnas especificado. El cambio en el tama.o de la pantalla se refleja
en los valores devueltos por MAXROW() y MAXCOL().
Ejemplos
. Este ejemplo cambia a un modo de visualización de 43 líneas:
IF SETMODE(43, 80)
? "modo de 43 líneas establecido con .xito"
ELSE
? "modo de 43 líneas no disponible"
ENDIF
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SETPOS()
Desplaza el cursor a una nueva posición
------------------------------------------------------------------------------
Sintaxis
SETPOS(<nFila>, <nCol>) --> NIL
Argumentos
<nFila> y <nCol> definen la nueva posición de pantalla del
cursor. Estos valores pueden estar comprendidos entre 0,0 y MAXROW(),
MAXCOL().
Devuelve
SETPOS() siempre devuelve NIL.
Descripción
SETPOS() es una función de entorno que desplaza el cursor a una nueva
posición en la pantalla. Una vez situado el cursor, ROW() y COL() se
actualizan en consecuencia. Para controlar la forma y visibilidad del
cursor, utilice la función SETCURSOR().
Ejemplos
. Este ejemplo desplaza el cursor a una nueva posición, después
muestra una cadena en la pantalla utilizando un mandato de consola,
??:
SETPOS(1, 1)
?? "Hola a todos"
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SETPRC()
Establece los valores PROW() y PCOL()
------------------------------------------------------------------------------
Sintaxis
SETPRC(<nFila>, <nCol>) --> NIL
Argumentos
<nFila> es el nuevo valor de PROW().
<nCol> es el nuevo valor de PCOL().
Devuelve
SETPRC() siempre devuelve NIL.
Descripción
SETPRC() es una función de impresora que envía códigos de control a la
impresora sin cambiar la posición de la cabeza de impresión. Cuando CA-
Clipper imprime, actualiza el valor de PCOL() con el número de
carácteres envíado a la impresora. No existe diferencia entre carácteres
que pueden imprimirse y aqu.llos que no pueden hacerlo. Si, por ejemplo,
se envía a la impresora una cadena de diez carácteres que contiene dos
carácteres interpretados como código de control por la impresora, el
valor de PCOL() de CA-Clipper se incrementa en diez mientras que la
posición real de la cabeza de impresión sólo se desplaza ocho. Esto
puede llevar a problemas de alíneaci.n. Mediante el uso de SETPRC()
puede compensar estos códigos de control volviendo a establecer PCOL()
tal y como se muestra en el ejemplo que aparece m.s adelante.
SETPRC() también suprime los saltos de p.gina al imprimir con @...SAY.
Esto es importante cuando la siguiente posición de fila es menor que la
fila actual y no se ha ejecutado un EJECT. En esta situaci.n, CA-Clipper
ejecuta un salto de p.gina autom.tico si la siguiente posición de
impresi.n de fila es menor que el valor actual de PROW(). Con SETPRC(),
puede establecer PROW() a un número inferior a la fila actual,
eliminando as. el EJECT autom.tico.
Ejemplos
. Esta función definida por el usuario, ImprimirCodigos(),
utiliza SETPRC() para envíar códigos de control a la impresora sin
afectar a los valores de PROW() y PCOL():
#include "Set.ch"
#define ITALICS_ON CHR(27) + "I"
#define ITALICS_OFFCHR(27) + "E"
//
SET DEVICE TO PRINTER
@ 12, 10 SAY "Se trata de una"
@ PROW(), PCOL() + 2 SAY ImprimirCodigos(ITALICS_ON) + ;
"importante"
@ PROW(), PCOL() + 2 SAY ImprimirCodigos(ITALICS_OFF) + ;
"reuni.n"
SET DEVICE TO SCREEN
RETURN
FUNCTION ImprimirCodigos( cCodigoCtrl )
LOCAL nFila, nCol, lImpresora
lImpresora := SET(_SET_PRINTER, .T.) // SET PRINTER ON
nFila:= PROW() // Guardar posición cabeza
// de impresión
nCol:= PCOL()
//
?? cCodigoCtrl // Envíar código de control
//
SETPRC(nFila, nCol)
SET(_SET_PRINTER, lImpresora) // Recuperar parámetros
// de impresora
RETURN "" // Devolver una cadena nula
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SOUNDEX()
Convierte una cadena de carácteres en su cadena de similitud fon.tica
------------------------------------------------------------------------------
Sintaxis
SOUNDEX(<cCadena>) --> cCadenaSimilFon
Argumentos
<cCadena> es la cadena de carácteres que debe convertirse.
Devuelve
SOUNDEX() devuelve una cadena de carácteres de cuatro dígitos en la
forma A999.
Descripción
SOUNDEX() es una función de carácteres que indexa y busca coincidencias
fon.ticas o sonidos similares. Se utiliza en aplicaciónes en las que no
se conoce la ortograf.a precisa de las claves de carácteres o en las que
existe una probabilidad alta de nombres mal escritos. Los errores
ortogr.ficos son muy normales en sistemas de transacci.n en tiempo real
en los que el operador de entrada de datos recibe la información a
trav.s del tel.fono. SOUNDEX() funcióna reuniendo los sonidos semejantes
bajo el mismo valor clave. Sin embargo, tenga en cuenta que el m.todo de
similitud fon.tica no es absoluto. Claves que son bastante diferentes
pueden dar como resultado el mismo valor de similitud fon.tica.
Ejemplos
. Este ejemplo genera un ííndice utilizando SOUNDEX() para crear
los valores claves. Despu.s, busca un valor encontrado en el campo
Vendedor:
USE Ventas
INDEX ON SOUNDEX(Vendedor) TO Vendedor
SEEK SOUNDEX("Pedrol")
? FOUND(), Vendedor // Resultado: .T. Pedrol
. Aqu., se busca la misma clave que en el ejemplo anterior pero
con una ortograf.a diferente:
SEEK SOUNDEX("Pedroll")
? FOUND(), Vendedor // Resultado: .T. Pedrol
Ficheros: La biblioteca asociada es EXTEND.LIB
y el fichero fuente SOURCE\SAMPLE\SOUNDEX.C
SPACE()
Devuelve una cadena de espacios
------------------------------------------------------------------------------
Sintaxis
SPACE(<nEspacios>) --> cEspacios
Argumentos
<nEspacios> es el número de espacios que va a devolverse hasta un
máximo de 65.535 (64K).
Devuelve
SPACE() devuelve una cadena de carácteres. Si <nEspacios> es cero,
SPACE() devuelve una cadena nula ("").
Descripción
SPACE() es una función de carácteres que devuelve un número especificado
de espacios. Equivale a REPLICATE(" ", <nVeces>). SPACE() puede
inicializar una variable de carácteres antes de asociarla a un GET.
SPACE() puede también rellenar cadenas con espacios iniciales o finales.
Sin embargo, tenga en cuenta que para este prop.sito son m.s eficaces
las funciónes PAD(), PADL() y PADR().
Ejemplos
. Este ejemplo utiliza SPACE() para inicializar una variable
para entrada de datos:
USE Cliente NEW
MEMVAR->Nombre = SPACE(LEN(Cliente->Nombre))
@ 10,10 SAY "Nombre Cliente" GET MEMVAR->Nombre
READ
Ficheros: La biblioteca asociada es CLIPPER.LIB.
SQRT()
Devuelve la ra.z cuadrada de un número positivo
------------------------------------------------------------------------------
Sintaxis
SQRT(<nNúmero>) --> nRa.z
Argumentos
<nNúmero> es un número positivo del cual va a extraerse la ra.z
cuadrada.
Devuelve
SQRT() devuelve un valor numérico calculado con doble precisión. El
número de lugares decimales mostrado se determina mediante SET DECIMALS
sin tener en cuenta SET FIXED. Si <nNúmero> es negativo, SQRT devuelve
cero.
Descripción
SQRT() es una función numérica utilizada en cualquier parte de un
c.lculo numérico para hallar una ra.z cuadrada (por ejemplo, en una
expresión que calcule la desvíaci.n estándar).
Ejemplos
. Estos ejemplos muestran varios resultados de SQRT():
SET DECIMALS TO 5
//
? SQRT(2) // Resultado: 1,41421
? SQRT(4) // Resultado: 2,00000
? SQRT(4) ** 2 // Resultado: 4,00000
? SQRT(2) ** 2 // Resultado: 2,00000
Ficheros: La biblioteca asociada es CLIPPER.LIB.
STR()
Convierte una expresión numérica en una cadena de carácteres
------------------------------------------------------------------------------
Sintaxis
STR(<nNúmero>, [<nLongitud>], [<nDecimales>]) --> cnúmero
Argumentos
<nNúmero> es la expresión numérica que va a convertirse en una
cadena de carácteres.
<nLongitud> es la longitud de la cadena de carácteres que debe
devolverse, incluyendo dígitos decimales, coma decimal y signo.
<nDecimales> es el número de posiciónes decimales que hay que
devolver.
Devuelve
STR() devuelve <nNúmero> con formato de cadena de carácteres. Si no se
especifican los argumentos opciónales de longitud y decimales, STR()
devuelve la cadena de carácteres de acuerdo con las siguientes reglas:
Resultados de STR() sin Argumentos Opcionales
------------------------------------------------------------------------
Expresi.n Longitud de Retorno
------------------------------------------------------------------------
Variable de campo Longitud del campo m.s decimales
Expr./constantes M.nimo de 10 dígitos m.s decimales
VAL() M.nimo de 3 dígitos
MONTH()/DAY() 3 dígitos
YEAR() 5 dígitos
RECNO() 7 dígitos
------------------------------------------------------------------------
Descripción
STR() es una función de conversión numérica que convierte valores
numéricos en cadenas de carácteres. Se utiliza con frecuencia para
concatenar valores numéricos a cadenas de carácteres. STR() tiene
aplicaciónes mostrando números, creando códigos a partir de valores
numéricos como, por ejemplo, números de referencia y creando claves de
índice que combinan datos numéricos y de tipo carácter.
STR() es similar a TRANSFORM(), que da formato a valores numéricos como
cadenas de carácteres útilizando una m.scara en lugar de
especificaciónes de longitud y decimales.
La función inversa de STR() es VAL() que convierte valores de tipo
carácter en números.
Notas
. Si <nLongitud> es menor que el número de dígitos de número
entero de <nNúmero>, STR() devuelve asteriscos en vez del número.
. Si <nLongitud> es menor que el número de dígitos decimales
necesarios para la parte decimal de la cadena de retorno, CA-Clipper
redondea el número al número disponible de posiciónes decimales.
. Si se especifica <nLongitud>, pero se omite <nDecimales> (sin
lugares decimales), el valor de retorno se redondea a un entero.
Ejemplos
. Estos ejemplos demuestran el rango de valores devueltos por
STR(), dependiendo de los argumentos especificados:
nNúmero:= 123.45
? STR(nNúmero) // Resultado: 123.45
? STR(nNúmero, 4) // Resultado: 123
? STR(nNúmero, 2) // Resultado: **
? STR(nNúmero * 10, 7, 2) // Resultado: 1234.50
? STR(nNúmero * 10, 12, 4) // Resultado: 1234.5000
? STR(nNúmero, 10, 1) // Resultado: 1234.5
. Este ejemplo utiliza STR() para crear un ííndice con una clave
compuesta de números de pedido y nombres de cliente:
USE Cliente NEW
INDEX ON STR(NumPedido, 9) + NomClien TO PedClien
Ficheros: La biblioteca asociada es CLIPPER.LIB.
STRTRAN()
Busca y sustituye carácteres dentro de una cadena de carácteres o campo memo
------------------------------------------------------------------------------
Sintaxis
STRTRAN(<cCadena>, <cB.squeda>, [<cSustituir>], [<nInicio>],
[<nNúmero>]) --> cNuevaCadena
Argumentos
<cCadena> es la cadena de carácteres o campo memo en los que debe
realizarse la b.squeda.
<cB.squeda> es la secuencia de carácteres que hay que encontrar.
<cSustituir> es la secuencia de carácteres que va a sustituir a
<cB.squeda>. Si no se especifica este argumento, las apariciones
especificadas del argumento de b.squeda se sustituyen por una cadena
vac.a ("").
<nInicio> es la primera aparici.n que debe sustituirse. Si se ignora
este argumento, el valor por defecto es uno.
<nNúmero> es el número de apariciones que deben sustituirse. Si no
se especifica, el valor por defecto es todas.
Devuelve
STRTRAN() devuelve una nueva cadena de carácteres con los casos
especificados de <cB.squeda> reemplazados por <cSustituir>.
Descripción
STRTRAN() es una función de carácteres que lleva a cabo la b.squeda
estándar de una subcadena dentro de una cadena de carácteres. Cuando
localiza una coincidencia, sustituye la cadena buscada por la cadena de
sustituci.n especificada. Se sustituyen todas las apariciones de
<cB.squeda> a menos que se especifique <nInicio> o <nNúmero>. Tenga en
cuenta que STRTRAN() sustituye subcadenas y, por lo tanto, no tiene en
cuenta palabras enteras.
Ejemplos
. Este ejemplo utiliza STRTRAN() para establecer un an.logo
postmoderno a una famosa cita:
cCadena:= "Calcular o no calcular?"
? STRTRAN(cCadena, "calcular", "ser")
// Resultado: Ser o no ser?
Ficheros: La biblioteca asociada es CLIPPER.LIB.
STUFF()
Borra e inserta carácteres en una cadena
------------------------------------------------------------------------------
Sintaxis
STUFF(<cCadena>, <nInicio>, <nBorrar>, <cInsertar>) --> cNuevaCadena
Argumentos
<cCadena> es la cadena de carácteres destáno en la que se insertan y
borran carácteres.
<nInicio> es la posición inicial en la que se produce la
inserci.n/borrado.
<nBorrar> es el número de carácteres que hay que borrar.
<cInsertar> es la cadena que debe insertarse.
Devuelve
STUFF() devuelve una copia de <cCadena> con los carácteres especificados
borrados y con <cInsertar> insertada.
Descripción
STUFF() es una función de carácteres que borra <nBorrar> carácteres de
<cCadena> empezando en la posición <nInicio>. A continúa.ión, inserta
<cInsertar> en la cadena resultante empezando en la posición <nInicio>
para formar la cadena de retorno. De esta forma, STUFF() puede realizar
las seis operación.s siguientes:
. Insertar: Si <nBorrar> es cero, no se suprimen carácteres
de <cCadena>. <cInsertar> se inserta en <nInicio> y se devuelve toda
la cadena. Por ejemplo STUFF("Mi perro tiene pulgas." 16, 0, "no ")
devuelve "Mi perro no tiene pulgas".
. Sustituir: Si <cInsertar> tiene la misma longitud que
<nBorrar>, <cInsertar> sustituye los carácteres empezando en
<nInicio> y la cadena resultante tiene la misma longitud que la
original. Por ejemplo, STUFF("Mi perro tiene pulgas.", 16, 6,
"huesos") devuelve "Mi perro tiene huesos".
. Borrar: Si <cInsertar> es una cadena nula (""), se borra
de <cCadena> el número de carácteres especificado por <nBorrar> y la
cadena se devuelve sin ningún carácter a.adido. Por ejemplo,
STUFF("Mi perro tiene pulgas.", 1, 3, "") devuelve "perro tiene
pulgas".
. Sustituir e insertar: Si <cInsertar> es m.s largo que
<nBorrar>, se sustituyen todos los carácteres desde <nInicio> hasta
<nBorrar> y se inserta el resto de <cInsertar>. Puesto que se
insertan m.s carácteres de los que se borran, la cadena resultante
siempre es m.s larga que la original. Por ejemplo, STUFF("Mi perro
tiene pulgas.", 10, 5, "nunca ha tenido") devuelve "Mi perro nunca ha
tenido pulgas".
. Sustituir y borrar: Si la longitud de <cInsertar> es menor
que <nBorrar>, se borran m.s carácteres de los que se insertan. Por
lo tanto, la cadena resultante es m.s corta que la original. Por
ejemplo, STUFF("Mi perro tiene pulgas.", 10, 5, "es") devuelve "Mi
perro es pulgas".
. Sustituir y borrar el resto: Si <nBorrar> es mayor o igual
que el número de carácteres restántes de <cCadena> empezando por
<nInicio>, los carácteres restántes se borran antes de insertar
<cInsertar>. Por ejemplo, STUFF("Mi perro tiene pulgas.", 10, 13,
"es") devuelve "Mi perro es".
Ejemplos
. Estos ejemplos demuestran las seis operación.s b.sicas de
STUFF():
// InsertAR
? STUFF("ABCDEF", 2, 0, "xyz") // Resultado: AxyzBCDEF
// Sustituir
? STUFF("ABCDEF", 2, 3, "xyz") // Resultado: AxyzEF
// Borrar
? STUFF("ABCDEF", 2, 2, "") // Resultado: ADEF
// Sustituir e insertar
? STUFF("ABCDEF", 2, 1, "xyz") // Resultado: AxyzCDEF
// Sustituir y borrar
? STUFF("ABCDEF", 2, 4, "xyz") // Resultado: AxyzF
// Sustituir y borrar resto
? STUFF("ABCDEF", 2, 10, "xyz") // Resultado: Axyz
Ficheros: La biblioteca asociada es EXTEND.LIB,
el módulo fuente asociado: SOURCE\SAMPLE\STUFF.C.
SUBSTR()
Extrae una subcadena de una cadena de carácteres
------------------------------------------------------------------------------
Sintaxis
SUBSTR(<cCadena>, <nInicio>, [<nCaracteres>]) --> cSubcadena
Argumentos
<cCadena> es la cadena de carácteres de la que va a extraerse una
subcadena. Puede tener hasta 65.535 (64K) bytes, el tama.o máximo de
cadena en CA-Clipper.
<nInicio> es la posición inicial en <cCadena>. Si <nInicio> es
positivo, es relativo al carácter situado en el extremo izquierdo de
<cCadena>. Si es negativo, es relativo al carácter situado en el extremo
derecho de <cCadena>.
<nCaracteres> es el número de carácteres que hay que extraer. Si se
omite, la subcadena empieza en <nInicio> y continúa.hasta el final de la
cadena. Si <nCaracteres> es mayor que el número de carácteres desde
<nInicio> hasta el final de <cCadena>, los carácteres adicionales se
ignoran.
Devuelve
SUBSTR() devuelve una cadena de carácteres.
Descripción
SUBSTR() es una función de carácteres que extrae una subcadena de otra
cadena de carácteres o campo memo. SUBSTR() está relacionada con las
funciónes LEFT() y RIGHT() que extraen subcadenas empezando por los
carácteres situados m.s a la izquierda y a la derecha de <cCadena>,
respectivamente.
Las funciónes SUBSTR(), RIGHT() y LEFT() se utilizan muy a menudo con
AT() y RAT() para localizar la primera y/o .ltima posición de una
subcadena antes de extraerla. También se utilizan para mostrar o
imprimir sólo una parte de una cadena de carácteres.
Ejemplos
. Estos ejemplos extraen el nombre y apellido de una variable:
cNombre:= "Juan Pedralbes"
? SUBSTR(cNombre, 1, 4) // Resultado: Juan
? SUBSTR(cNombre, 6) // Resultado: Pedralbes
? SUBSTR(cNombre, LEN(cNombre) + 2) // Resultado:
// cadena nula
? SUBSTR(cNombre, -9) // Resultado: Pedralbes
? SUBSTR(cNombre, -9, 3) // Resultado: Ped
. Este ejemplo utiliza SUBSTR() con AT() y RAT() para crear una
función que extrae un nombre de fichero de una especificación de
fichero:
? FichBase("C:\PRG\MIFICHE.OBJ") // Resultado: MIFICHE.OBJ
FUNCTION FichBase( cFichero )
LOCAL nPos
IF (nPos := RAT("\", cFichero)) != 0
RETURN SUBSTR(cFichero, nPos + 1)
ELSEIF (nPos := AT(":", cFichero)) != 0
RETURN SUBSTR(cFichero, nPos + 1)
ELSE
RETURN cFichero
ENDIF
Ficheros: La biblioteca asociada es CLIPPER.LIB.