EMPTY() Determina si el resultado de una expresión es un valor vac.o ------------------------------------------------------------------------------ Sintaxis EMPTY(<exp>) --> lVac.o Argumentos <exp> es una expresión de cualquier tipo de datos. Devuelve EMPTY() devuelve verdadero (.T.) si la expresión es un valor vac.o; de lo contrario, devuelve falso (.F.). Los criterios para determinar si un valor se considera vac.o dependen del tipo de datos de <exp> de acuerdo con las reglas siguientes: Lista de Valores Vac.os ------------------------------------------------------------------------ Tipo de datos Contenido ------------------------------------------------------------------------ Matriz Longitud cero Car.cter Espacios, tabuladores, CR/LF, o ("") numérico 0 Fecha CTOD(" ") L.gico Falso (.F.) Memo Igual que carácter NIL NIL ------------------------------------------------------------------------ Descripción La función EMPTY() cuenta con diferentes útilizaciones. Puede utilizarla para determinar si un usuario ha introducido un valor en un objeto GET antes de realizar cambios en un fichero de base de datos. También puede determinar si un parámetro formal es NIL o no se ha pasado. Además, puede comprobar una matriz para localizar una longitud cero. Ejemplos . Estos ejemplos ilustran la utilización de EMPTY() frente a varios tipos de datos diferentes: ? EMPTY(SPACE(5)), EMPTY("") // Resultado: .T. .T. ? EMPTY(0), EMPTY(CTOD("")) // Resultado: .T. .T. ? EMPTY(.F.), EMPTY(NIL) // Resultado: .T. .T. . Este ejemplo utiliza EMPTY() para determinar si el usuario ha introducido un valor en el primer objeto Get antes de escribir el nuevo valor en el fichero de base de datos: LOCAL cCliente := SPACE(15), nCantidad := 0 USE Ventas NEW @ 10, 10 GET cCliente @ 11, 10 GET nCantidad PICTURE "999.99" READ // IF !EMPTY(cCliente) APPEND BLANK REPLACE Ventas->Cliente WITH cCliente; Ventas->Cantidad WITH nCantidad ENDIF . Este ejemplo utiliza EMPTY() como parte de la cláusula VALID para forzar al usuario a introducir datos en el objeto Get actual: LOCAL cCodigo := SPACE(5) @ 2, 5 SAY "Introduzca código" GET cCodigo VALID; !EMPTY(cCodigo) READ Ficheros: La biblioteca asociada es CLIPPER.LIB.
EOF() Determina cu.ndo se detecta el final del fichero ------------------------------------------------------------------------------ Sintaxis EOF() --> lL.mite Devuelve EOF() devuelve verdadero (.T.) cuando se efect.a un intento de desplazar el puntero de registros sobrepasando el último registro l.gico de un fichero de base de datos; de lo contrario, devuelve falso (.F.). Si no hay fichero de base de datos abierto en el área de trabajo actual, EOF() devuelve falso (.F.). Si el fichero de base de datos actual no contiene registros, EOF() devuelve verdadero (.T.). Descripción EOF() es una función de base de datos utilizada para comprobar una condición l.mite de fin de fichero cuando el puntero del registro avanza por un fichero de base de datos. Cualquier mandato que pueda desplazar el puntero del registro puede establecer EOF(). La aplicación m.s habitual es como una parte del argumento <lCondici.n> de una construcci.n DO WHILE que procesa secuencialmente registros en un fichero de base de datos. Aqu. <lCondici.n> incluir.a una comprobaci.n de .NOT. EOF(), forzando al bucle DO WHILE a terminar cuando EOF() devuelve verdadero (.T.). EOF() y FOUND() se utilizan, frecuentemente, de manera intercambiable para comprobar si un mandato SEEK, FIND, o LOCATE ha resultado fallido. Sin embargo, con estos mandatos es preferible FOUND(). Cuando EOF() devuelve verdadero (.T.), el puntero del registro se sit.a en LASTREC() + 1 con independencia de si existe un filtro activo o si se ha establecido SET DELETED ON. Otros intentos de avanzar el puntero del registro devuelven el mismo resultado sin error. Una vez que EOF() est. establecido en verdadero (.T.), retiene su valor hasta que se produce otro intento de desplazar el puntero del registro. Por defecto, EOF() opera en el área de trabajo seleccionada actualmente. Se puede hacer que act.e en un área de trabajo no seleccionada especific.ndola dentro de una expresión con alias (consulte el ejemplo a continúa.ión). Ejemplos . En este ejemplo se muestra el uso de EOF() desplazando deliberadamente el puntero del registro m.s all. del último registro: USE Ventas GO BOTTOM ? EOF() // Resultado: .F. SKIP ? EOF() // Resultado: .T. . En este ejemplo se utilizan expresiónes con alias para consultar el valor de EOF() en .reas de trabajo no seleccionadas: USE Ventas NEW USE Cliente NEW ? Ventas->(EOF()) ? Cliente->(EOF()) . En este ejemplo se ilustra c.mo EOF() puede utilizarse como parte de una condición para operación.s de ficheros de bases de datos secuenciales: USE Sales INDEX NumClie NEW DO WHILE !EOF() nClieAnt := Ventas->NumClie nCantTotal := 0 DO WHILE nClieAnt = Ventas->NumClie .AND. (!EOF()) ? Ventas->NumClie, Ventas->Descripción, Ventas->CantVentas nCantTotal += Ventas->CantVentas SKIP ENDDO ? "Cantidad total: ", nCantTotal ENDDO Ficheros: La biblioteca asociada es CLIPPER.LIB.
ERRORBLOCK() Establece un bloque de código para que se ejecute cuando surja un error de tiempo de ejecución ------------------------------------------------------------------------------ Sintaxis ERRORBLOCK([<bManejadorError>]) --> bManejadorErrorActual Argumentos <bManejadorError> es el bloque de código que debe ejecutarse siempre que se produzca un error de tiempo de ejecución. Cuando se eval.a, el sistema pasa un objeto de error a <bManejadorError> como argumento. Devuelve ERRORBLOCK() devuelve el bloque de código de manejo de errores. Si no se ha fijado ningún bloque de manejo de errores desde que se llam. al programa, ERRORBLOCK() devuelve el bloque de manejo de errores por defecto. Descripción ERRORBLOCK() es una función de error que define la ejecución de un manejador de errores siempre que se produzca un error. Especifique el manejador de errores como un bloque de código con la forma siguiente: { |<objError>| <lista de expresiónes>,... } donde <objError> es un objeto error que contiene información sobre el error. Dentro del bloque de código, pueden envíarse mensajes al objeto con el fin de obtener información sobre el error. Si el bloque de manejo de errores devuelve verdadero (.T.) se reintenta la operación.fallida y si devuelve falso (.F.) se reanuda el proceso. El bloque de código de manejo de errores puede especificarse como una lista de expresiónes o como una llamada a una función definida por el usuario. La segunda opción es m.s .til puesto que pueden utilizarse las sentencias de control de CA-Clipper en lugar de expresiónes. Este es especialmente el caso si existe BEGIN SEQUENCE pendiente y desea efectuar BREAK a la sentencia RECOVER m.s pr.xima. Como esto implica, los bloques de manejo de errores pueden utilizarse en combinación con estructuras de control BEGIN SEQUENCE...END. En un bloque puede manejar errores de dispositivo, de bajo nivel y comunes que cuentan con un mecanismo de recuperaci.n general. Si la operación. requiere un manejo espec.fico de errores, defina BEGIN SEQUENCE y después, BREAK a la sentencia RECOVER, devolviendo el objeto de error para el procesamiento local. Consulte el ejemplo que se muestra m.s adelante. Si no se ha especificado <bManejadorError> utilizando ERRORBLOCK() y se ha producido un error de tiempo de ejecución, se eval.a el bloque de manejo de errores por defecto. Este manejador de errores muestra un mensaje descriptivo en la pantalla, establece ERRORLEVEL() en 1 y después sale mediante QUIT del programa. Puesto que ERRORBLOCK() devuelve el bloque de manejo de errores actual, es posible especificar un bloque de manejo de errores para una operación. guardando el bloque actual y restableci.ndolo después de que se haya completado la operación. Del mismo modo, los gestores de errores especificados como bloques de códigos, pueden pasarse a los procedimientos y funciónes definidas por el usuario y devolverse mediante RETURN como valores. Para obtener más información sobre la estructura y operación.s de objetos de error, consulte la entrada Clase de Error dentro de este capítulo y el capítulo Estrategias de Manejo de Errores en la gu.a Programaci.n y Utilidades. Ejemplos . El fragmento de código de la p.gina siguiente establece un bloque de manejo de errores, que se llamar. cuando se produzca un error dentro de una construcci.n BEGIN SEQUENCE: LOCAL bManejadorError, búltimoManejador, objErr bManejadorError := { |objError| ; MiManejadorError(objError) } // // Guardar el manejador actual búltimoManejador := ERRORBLOCK(bManejadorError) // BEGIN SEQUENCE . . <sentencias de operación.gt; . // Recibir el objeto de error desde BREAK RECOVER USING objError . . <sentencias de recuperaci.n> . END ERRORBLOCK(búltimoManejador) // Restaurar el // manejador RETURN FUNCTION MiManejadorError( objError ) // BREAK objError // Devolver el objeto de // error a RECOVER RETURN NIL Ficheros: La biblioteca asociada es CLIPPER.LIB.
ERRORLEVEL() Establece el código de retorno de CA-Clipper ------------------------------------------------------------------------------ Sintaxis ERRORLEVEL([<nNuevoC.digoRetorno>]) --> nC.digoRetornoActual Argumentos <nNuevoC.digoRetorno> es la nueva selecci.n de código de retorno. Esta puede tener un valor entre cero y 255. El valor por defecto al inicio es cero. Si no se especifica, ERRORLEVEL() informa sobre la selecci.n actual sin asignar un nuevo valor. Devuelve ERRORLEVEL() devuelve el código de salida de CA-Clipper actual como un valor numérico, si se ha seleccionado uno utilizando ERRORLEVEL() con un argumento; de lo contrario, devuelve cero. Descripción ERRORLEVEL() es una función de entorno que tiene una doble finalidad. Devuelve el código de retorno de CA-Clipper actual y establece, opciónalmente, un nuevo código de retorno. El código de retorno es un valor establecido por un proceso hijo de forma que el proceso padre pueda comprobar su estado de finalizaci.n. Normalmente, el proceso padre es el DOS y el hijo es un programa de aplicación. Puede comprobar el valor de retorno mediante la variable ERRORLEVEL del DOS o bien mediante la función 4Dh de la INT 21h. Cuando finaliza un programa de CA-Clipper, el código de retorno se establece en 1 si el proceso finaliza con un error grave. Si el proceso finaliza normalmente, el código de retorno se establece en cero o en el último valor de ERRORLEVEL() definido en el programa. Normalmente, puede fijar un código de retorno con ERRORLEVEL() para indicar un estado de error al programa que ha llamado al programa de CA-Clipper actual. En la mayor.a de casos, se trata del fichero de proceso por lotes de la aplicación. Aqu. puede comprobar el código de retorno utilizando la variable del DOS ERRORLEVEL. Consulte el manual de DOS para obtener más información. Notas . ERRORLEVEL() no se actualiza después de que finalice un mandato RUN. Para obtener el código de retorno del programa llamado, debe crear una rutina en ensamblador o C que consulte el código de retorno del proceso secundario utilizando la función 4Dh de la INT 21. Consulte el manual de Referencia T.cnica del DOS para obtener m.s información. Ejemplos . Este ejemplo guarda el código de retorno actual de CA-Clipper, seguidamente, establece un nuevo valor: nAntCodigo := ERRORLEVEL() // Obtiene el nivel // de error actual ERRORLEVEL(1) // Establece el nuevo // nivel de error . Este ejemplo utiliza ERRORLEVEL() para establecer un código de retorno que puede comprobar el proceso padre: #define ERR_FICH_PERDIDO 255 #define ERR_EST_INCOMPLETO 254 // IF !FILE("Sisfich.dbf") @ 0, 0 @ 1, 0 @ 0, 0 SAY "Error fatal: Fichero de sistema perdido...saliendo" ERRORLEVEL(ERR_FICH_PERDIDO) QUIT ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
EVAL() Eval.a un bloque de código ------------------------------------------------------------------------------ Sintaxis EVAL(<bBloque>, [<ListaArgBloque>]) --> últimoValorBloque Argumentos <bBloque> es el bloque de código que se debe evaluar. <ListaArgBloque> es una lista de argumentos para envíar al bloque de código antes de que se eval.e. Devuelve EVAL() devuelve el valor de la .ltima expresión dentro del bloque. Un bloque de código puede devolver un valor de cualquier tipo. Descripción EVAL() es una función de bloque de código. Es la función m.s b.sica de evaluaci.n de bloque de código del sistema CA-Clipper. Un bloque de código es un valor de datos especial que hace referencia a un fragmento de código de programa compilado. Para obtener más información sobre bloques de código, consulte el capítulo Conceptos Básicos de la gu.a Programaci.n y Utilidades. Para ejecutar o evaluar un bloque de código, llame a EVAL() con el valor de bloque y cualquier parámetro. Cuando se ejecuta el bloque se le suministran los parámetros. Los bloques de código pueden ser una serie de expresiónes separadas por comas. Cuando se eval.a un bloque de código, el valor de retorno es el valor de la .ltima expresión del bloque. Normalmente, el compilador de CA-Clipper compila un bloque de código en el tiempo de compilación. Sin embargo, existen ocasiones en las que es necesario compilar un bloque de código desde una cadena de carácteres en tiempo de ejecución. Este proceso puede realizarse utilizando el operador de macroexpresiónes (&). EVAL() se utiliza, con frecuencia, para crear funciónes de iteraci.n. Estas son funciónes que aplican un bloque a cada miembro de una estructura de datos. AEVAL(), ASORT(), ASCAN() y DBEVAL() son funciónes de iteraci.n (por ejemplo, AEVAL() eval.a un bloque para cada elemento de una matriz). Ejemplos . En este ejemplo se crea un bloque de código que incrementa un número y despuésólo eval.a: bBloque := { |nArg| nArg + 1 } ? EVAL(bBloque, 1) // Resultado: 2 . En este ejemplo se muestra la compilación de un bloque de código en el tiempo de ejecución utilizando el operador de macroexpresiónes (&): // Compilar una cadena en un bloque bBloque := &("{ |nArg| nArg + 1 }") // Evaluar el bloque ? EVAL(bBloque, 1) Ficheros: La biblioteca asociada es CLIPPER.LIB.
EXP() Calcula e**x ------------------------------------------------------------------------------ Sintaxis EXP(<nExponente>) --> nAntilogaritmo Argumentos <nExponente> es el logaritmo natural para el que debe calcularse un valor numérico. Devuelve EXP() devuelve un valor numérico que es equivalente al valor e elevado a la potencia especificada. Descripción EXP() es una función matem.tica que calcula el valor de 'y' en la ecuaci.n siguiente: e**x = y Donde e es la base de logaritmos naturales (2,71828...) y x es <nExponente>. El valor máximo de <nExponente> es 45 antes de que se produzca un desbordamiento numérico. EXP() y LOG() son funciónes inversas. El número de posiciónes decimales que se muestra est. determinado .nicamente por SET DECIMALS con independencia del valor SET FIXED actual. Ejemplos . En este ejemplo se muestran diversas llamadas a EXP(): ? EXP(1) // Resultado: 2.72 SET DECIMALS TO 10 ? EXP(1) // Resultado: 2.7182818285 ? LOG(EXP(1)) // Resultado: 1.0000000000 Ficheros: La biblioteca asociada es CLIPPER.LIB.
FCLOSE() Cierra un fichero binario abierto y escribe memorias intermedias del DOS en disco ------------------------------------------------------------------------------ Sintaxis FCLOSE(<nManejador>) --> lError Argumentos <nManejador> es el manejador de fichero obtenido prevíamente de FOPEN() o FCREATE(). Devuelve FCLOSE() devuelve falso (.F.) si se ha producido un error mientras estaba escribiendo; de lo contrario, devuelve verdadero (.T.). Descripción FCLOSE() es una función de fichero de bajo nivel que cierra ficheros binarios y fuerza a que las memorias intermedias asociadas del DOS se graben en disco. Si la operación.falla, FCLOSE() devuelve falso (.F.). FERROR() puede utilizarse para determinar el motivo del fallo. Por ejemplo, si intenta utilizar FCLOSE() con un manejador no víaacute;lido devuelve falso (.F.) y FERROR() devuelve el error 6 de DOS, manejador no víaacute;lido. Consulte FERROR() para obtener una lista completa de números de errores. .Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un conocimiento profundo del sistema operativo. Ejemplos . Este ejemplo utiliza FCLOSE() para cerrar un fichero binario que se ha creado recientemente y muestra un mensaje de error si falla el proceso de cierre: #include "Fileio.ch" // nManejador := FCREATE("Fichprueba", FC_NORMAL) IF !FCLOSE(nManejador) ? "Error cerrando el fichero, error número: ", FERROR() ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FCOUNT() Devuelve el número de campos del fichero (.dbf) actual ------------------------------------------------------------------------------ Sintaxis FCOUNT() --> nCampos Devuelve FCOUNT() devuelve el número de campos del fichero de base de datos en el área de trabajo actual como un valor numérico entero. Si no hay ningún fichero de base de datos abierto, FCOUNT() devuelve cero. Descripción FCOUNT() es una función de base de datos. Es .til en aplicaciónes que contienen programas independientes de los datos que pueden funciónar con cualquier fichero de base de datos. Estos incluyen programas generalizados de importaci.n/exportaci.n y de informes. Normalmente, debe utilizarse FCOUNT() para establecer el l.mite superior de un bucle FOR...NEXT o DO WHILE que procesa un campo cada vez. Por defecto, FCOUNT() funcióna en el área de trabajo seleccionada actualmente. Ejemplos . Este ejemplo ilustra FCOUNT(), devolviendo el número de campos del área de trabajo actual y de una no seleccionada: USE Ventas NEW USE Cliente NEW ? FCOUNT() // Resultado: 5 ? Ventas->(FCOUNT()) // Resultado: 8 . Este ejemplo utiliza FCOUNT() para declarar una matriz con información de campo: LOCAL aCampos := ARRAY(FCOUNT()) AFIELDS(aCampos) . Este ejemplo utiliza FCOUNT() como l.mite superior de un bucle FOR que procesa la lista de los campos del área de trabajo actual: LOCAL nCampo USE Ventas NEW FOR nCampo := 1 TO FCOUNT() ? FIELD(nCampo) NEXT Ficheros: La biblioteca asociada es CLIPPER.LIB.
FCREATE() Crea y/o trunca un fichero binario a longitud cero ------------------------------------------------------------------------------ Sintaxis FCREATE(<cFichero>, [<nAtributo>]) --> nManejador Argumentos <cFichero> es el nombre del fichero que va a crearse. Si el fichero ya existe, su longitud se trunca a cero sin aviso previo. <nAtributo> es uno de los atributos de fichero binario que se muestran en la tabla siguiente. Si se omite este argumento, el valor por defecto es cero. Atributos de Fichero Binario ------------------------------------------------------------------------ Valor Fileio.ch Atributo Descripción ------------------------------------------------------------------------ 0 FC_NORMAL Normal Crea un fichero de lectura/escritura normal (por defecto) 1 FC_READONLY S.lo lectura Crea un fichero de sólo lectura 2 FC_HIDDEN Oculto Crea un fichero oculto 4 FC_SYSTEM Sistema Crea un fichero de sistema ------------------------------------------------------------------------ Devuelve FCREATE() devuelve el número de manejador de fichero de DOS del nuevo fichero binario en el rango 0-65.535. Si se produce un error, FCREATE() devuelve -1 y FERROR() se establece de forma que indique un código de error. Descripción FCREATE() es una función de fichero de bajo nivel que crea un nuevo fichero o abre y trunca uno existente. Si <cFichero> no existe, se crea y se abre para escritura. Si existe y puede abrirse para escritura, se trunca a una longitud de cero. Si no puede abrirse para escritura, FCREATE() devuelve -1 y FERROR() devuelve el valor de error apropiado. Cuando FCREATE() crea un nuevo fichero de forma satisfactoria, .ste se deja abierto en modo compartido compatible y en el de acceso de lectura/escritura. El atributo de fichero especificado por el argumento <nAtributo> se aplica al nuevo fichero cuando se cierra, permitiendo la escritura en un fichero reci.n creado de sólo lectura. Si desea obtener una lista de modos de acceso, consulte FOPEN(). Puesto que se requiere un manejador de ficheros para identificar un fichero abierto para otras funciónes de fichero, el valor de retorno de FCREATE() se asigna siempre a una variable para su utilización posterior. Al igual que otras funciónes de fichero, FCREATE() no utiliza los valores SET DEFAULT o SET PATH para su operación. En su lugar, escribe en el directorio actual del DOS a menos que se establezca una vía de forma expl.cita. .Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un conocimiento profundo del sistema operativo. Ejemplos . En este ejemplo se crea un fichero llamado Fichprueba y lo abre para lectura y escritura: #include "Fileio.ch" // IF (nManejador := FCREATE("Fichprueba", FC_NORMAL)) == -1 ? "No se puede crear el fichero:", FERROR() BREAK ELSE FWRITE(nManejador, "Hola a todos") FCLOSE(nManejador) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Fileio.ch.
FERASE() Borra un fichero del disco ------------------------------------------------------------------------------ Sintaxis FERASE(<cFichero>) --> nExito Argumentos <cFichero> es el nombre del fichero que debe borrarse del disco incluyendo la extensión, opciónalmente precedido por una especificación de unidad y/o vía. Devuelve FERASE() devuelve -1 si la operación.falla y cero si es satisfactoria. En el caso de que se produzca un fallo, puede utilizarse FERROR() para determinar la naturaleza del error. Descripción FERASE() es una función de fichero que borra un fichero especificado del disco. FERASE() es igual que el mandato ERASE, pero devuelve un valor y puede especificarse dentro de una expresión. Cuando se llama a FERASE(), <cFichero> se borra del disco .nicamente si se encuentra en el directorio del DOS actual o en el directorio especificado, de forma expl.cita, como parte del nombre del fichero. Al igual que otras funciónes de fichero y mandatos, FERASE() no utiliza los valores de SET DEFAULT ni SET PATH para localizar <cFichero>. .Advertencia! Los ficheros deben cerrarse antes de borrarlos con FERASE(). Ejemplos . En este ejemplo se borra un conjunto de ficheros que coinciden con un patr.n comod.n: #include "Directry.ch" AEVAL(DIRECTORY("*.BAK"), { |aFichero| ; FERASE(aFichero[F_NAME]) }) . En este ejemplo se borra un fichero y se muestra un mensaje si falla la operación. IF FERASE("Fichero.txt") == -1 ? "Error de borrado de archivo:", FERROR() BREAK ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FERROR() Comprueba si existen errores después de una operación.de fichero binario ------------------------------------------------------------------------------ Sintaxis FERROR() --> nC.digoError Devuelve FERROR() devuelve el error del DOS de la .ltima operación.de fichero como un valor numérico entero. Si no hay ningún error, FERROR() devuelve cero. Valores de Retorno de FERROR() ------------------------------------------------------------------------ Error Significado ------------------------------------------------------------------------ 0 Satisfactorio 2 Fichero no encontrado 3 V.a no encontrada 4 Demasiados ficheros abiertos 5 Acceso denegado 6 Manejador no víaacute;lido 8 Memoria insuficiente 15 Unidad especificada no víaacute;lida 19 Ha intentado escribir en un disco protegido contra escritura 21 Unidad no preparada 23 Error CRC de datos 29 Fallo de escritura 30 Fallo de lectura 32 Violaci.n de compartici.n 33 Violaci.n de bloqueo ------------------------------------------------------------------------ Descripción FERROR() es una función de fichero de bajo nivel que indica un error del DOS después de que se haya utilizado una función de fichero. Estas funciónes incluyen FCLOSE(), FCREATE(), FERASE(), FOPEN(), FREAD(), FREADSTR() y FRENAME(). FERROR() retiene su valor hasta la siguiente ejecución de una función de fichero. .Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un conocimiento profundo del sistema operativo Ejemplos . Este ejemplo comprueba FERROR() después de crear un fichero binario y muestra un mensaje de error si falla la creaci.n: #include "Fileio.ch" // nManejador := FCREATE("Temp.txt", FC_NORMAL) IF FERROR() != 0 ? "No se puede crear el fichero, error DOS ", FERROR() ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDBLOCK() Devuelve un bloque de código de asignación/lectura de un campo determinado ------------------------------------------------------------------------------ Sintaxis FIELDBLOCK(<cNombreCampo>) --> bBloqueCampo Argumentos <cNombreCampo> es el nombre del campo al que har. referencia el bloque de asignación/lectura. Devuelve FIELDBLOCK() devuelve un bloque de código que, cuando se eval.a, asigna o lee el valor del campo determinado. Si <cNombreCampo> no existe en el .rea de directorio actual, FIELDBLOCK() devuelve NIL. Descripción FIELDBLOCK() es una función de base de datos que crea un bloque de código. Cuando se ejecuta con un argumento, el bloque de código creado mediante esta función asigna el valor del argumento a <cNombreCampo>. Cuando se ejecuta sin un argumento, el bloque de código recupera el valor de <cNombreCampo>. Observe que es posible que la variable de campo especificada no exista cuando se cree el bloque de código, pero debe existir antes de que .ste se ejecute. Notas . área de trabajo: El bloque de código devuelto por FIELDBLOCK() asigna o recupera el valor del campo especificado en cualquier área de trabajo en la que est. actualmente cuando se ejecute el bloque. Por ejemplo, las .reas de trabajo 1 y 2 determinadas, contienen ambas el campo NomC: SELECT 1 NomC := "Maribel" SELECT 2 NomC := "Sonia" bNomC := FIELDBLOCK("NomC") SELECT 1 ? EVAL(bNomC) // Resultado: "Maribel" SELECT 2 ? EVAL(bNomC) // Resultado: "Sonia" La función FIELDWBLOCK() proporciona un bloque de asignación/lectura para un campo en un área de trabajo espec.fica. Ejemplos . Este ejemplo compara FIELDBLOCK() con un bloque de código creado utilizando el operador de macroexpresiónes. Observe que utilizando FIELDBLOCK() evita los problemas de velocidad y tama.o asociados con el citado operador: // Bloque de asignación/lectura definido por medio del // operador de macroexpresiónes bAsilec := &( "{ |ValorAsig| IF( ValorAsig == NIL,; NomC, NomC := ValorAsig ) }" ) // Bloque de asignación/lectura definido por medio de // FIELDBLOCK() // bAsilec creado aqu. es el equivalente // funciónal del bAsilec anterior bAsilec := FIELDBLOCK("NomC") Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDGET() Obtiene el valor de un campo a partir de su posición en la estructura de la base de datos ------------------------------------------------------------------------------ Sintaxis FIELDGET(<nCampo>) --> ValorCampo Argumentos <nCampo> es la posición ordinal del campo en la estructura de registro para el área de trabajo actual. Devuelve FIELDGET() devuelve el valor del campo especificado. Si <nCampo> no corresponde a la posición de ningún campo del fichero de base de datos actual, FIELDGET() devuelve NIL. Descripción FIELDGET() es una función de base de datos que obtiene el valor de un campo utilizando su posición dentro de la estructura del fichero de la base de datos en lugar de su nombre de campo. Dentro de las funciónes gen.ricas de servicio de base de datos esto permite, entre otras cosas, recuperar los valores de campos sin utilizar el operador de macroexpresiónes. Ejemplos . Este ejemplo compara FIELDGET() con el código funciónalmente equivalente que utiliza el operador de macroexpresiónes para obtener el valor de un campo: LOCAL nCampo := 1, NomC, ValC USE Cliente NEW // // Usando el operador de macroexpresiónes NomC := FIELD( nCampo ) // Obtener el nombre // del campo ValC := &NomC // Obtener el valor // del campo // Usando FIELDGET() ValC := FIELDGET( nCampo ) // Obtener el valor // del campo Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDNAME()/FIELD() Devuelve un nombre de campo del fichero (.dbf) actual ------------------------------------------------------------------------------ Sintaxis FIELDNAME/FIELD(<nPosici.n>) --> cNombreCampo Argumentos <nPosici.n> es la posición de un campo en la estructura del fichero de base de datos. Devuelve FIELDNAME() devuelve el nombre del campo especificado como una cadena de carácteres. Si <nPosici.n> no corresponde con un campo existente en el fichero de base de datos actual o si no se abre ningún fichero de base de datos en el área de trabajo actual, FIELDNAME() devuelve una cadena nula (""). Descripción FIELDNAME() es una función de base de datos que devuelve un nombre de campo utilizando un ííndice en la posición del nombre de campo en la estructura de base de datos. Util.celo en aplicaciónes independientes de los datos donde el nombre de campo es desconocido. Si requiere información de m.s de un campo, utilice AFIELDS() para crear una matriz de información de campos o COPY STRUCTURE EXTENDED para crear una base de datos de información de campos. Si necesita información adicional sobre estructuras de ficheros de base de datos, utilice TYPE() y LEN(). Para obtener el número de posiciónes decimales de un campo numérico, utilice la expresión siguiente: LEN(SUBSTR(STR(<idCampo>), RAT(".", ; STR(<idCampo>)) + 1)) Por defecto, FIELDNAME() funcióna en el área de trabajo seleccionada actualmente, tal como se muestra en el ejemplo siguiente. Ejemplos . En estos ejemplos se ilutra FIELDNAME() utilizado con otras funciónes: USE Ventas ? FIELDNAME(1) // Resultado: SUCURSAL ? FCOUNT() // Resultado: 5 ? LEN(FIELDNAME(0)) // Resultado: 0 ? LEN(FIELDNAME(40)) // Resultado: 0 . En este ejemplo se utiliza FIELDNAME() para listar el nombre y tipo de cada campo de Cliente.dbf: USE Cliente NEW FOR nCampo := 1 TO FCOUNT() ? PADR(FIELDNAME(nCampo), 10),; VALTYPE(&(FIELDNAME(nCampo))) NEXT . En este ejemplo se accede a campos en .reas de trabajo no seleccionadas, utilizando expresiónes de alias: USE Ventas NEW USE Cliente NEW USE Facturas NEW // ? Ventas->(FIELDNAME(1)) // Resultado: NUMVENTA ? Cliente->(FIELDNAME(1)) // Resultado: NUMCLIE Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDPOS() Devuelve la posición de un campo en un área de trabajo ------------------------------------------------------------------------------ Sintaxis FIELDPOS(<cNombreCampo>) --> nPosCampo Argumentos <cNombreCampo> es el nombre de un campo en el área de trabajo actual o especificada. Devuelve FIELDPOS() devuelve la posición del campo especificado dentro de la lista de campos asociados con el área de trabajo actual o especificada. Si el área de trabajo actual no tiene ningún campo con el nombre especificado, FIELDPOS() devuelve cero. Descripción FIELDPOS() es una función de base de datos que realiza el proceso inverso de la función FIELDNAME(). FIELDPOS() se utiliza frecuentemente junto con las funciónes FIELDPUT() y FIELDGET(). FIELDPOS() devuelve los nombres de campos en cualquier área de trabajo no seleccionada, haciendo referencia a la función por medio de una expresión con alias. Consulte el ejemplo que se muestra m.s adelante. Ejemplos . En este ejemplo se muestra una especificación t.pica de la función FIELDPOS(): USE Cliente NEW ? FIELDPOS("Nombre") // Resultado: 1 ? FIELDGET(FIELDPOS("Nombre")) // Resultado: Sonia . En este ejemplo se utiliza FIELDPOS() para devolver la posición de un campo especificado en un área de trabajo no seleccionada: USE Cliente NEW USE Facturas NEW ? Cliente->(FIELDPOS("Nombre")) // Resultado: 1 ? Cliente->(FIELDGET(FIELDPOS("Nombre"))) // Resultado: Sonia Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDPUT() Establece el valor de una variable de campo a partir de su posición en la estructura de la base de datos ------------------------------------------------------------------------------ Sintaxis FIELDPUT(<nCampo>, <expAsignar>) --> ValorAsignado Argumentos <nCampo> es la posición ordinal del campo en el fichero de base de datos actual. <expAsignar> es el valor que debe asignarse al campo dado. El tipo de datos de esta expresión debe coincidir con el tipo de datos de la variable de campo designada. Devuelve FIELDPUT() devuelve el valor asignado al campo designado. Si <nCampo> no corresponde con la posición de ningún campo del fichero de base de datos actual, FIELDPUT() devuelve NIL. Descripción FIELDPUT() es una función de base de datos que asigna <expAsignar> al campo en la posición ordinal <nCampo> en el área de trabajo actual. Esta función le permite establecer el valor de un campo utilizando su posición dentro de la estructura del fichero de base de datos en lugar de su nombre de campo. Dentro de las funciónes gen.ricas de servicio de base de datos esto permite, entre otras cosas, seleccionar valores de campo sin tener que utilizar el operador de macroexpresiónes. Ejemplos . En este ejemplo se compara FIELDPUT() con el código funciónalmente equivalente, que utiliza el operador de macroexpresiónes para establecer el valor de un campo: // Usando el operador de macroexpresiónes NomC := FIELD(nCampo) // Obtener nombre de campo FIELD->&NomC := ValC // Establecer valor de campo // Usando FIELDPUT() FIELDPUT(nCampo, ValC) // Establecer valor de campo Ficheros: La biblioteca asociada es CLIPPER.LIB.
FIELDWBLOCK() Devuelve un bloque de código de asignación/lectura de un campo en un .rea de trabajo determinada ------------------------------------------------------------------------------ Sintaxis FIELDWBLOCK(<cNombreCampo>, <nAreaTrabajo>) --> bBloqueCampoT Argumentos <cNombreCampo> es el nombre del campo especificado como una cadena de carácteres. <nAreaTrabajo> es el número de área de trabajo donde reside el campo especificado. Devuelve FIELDWBLOCK() devuelve un bloque de código que, cuando se eval.a, asigna u obtiene el valor de <cNombreCampo> en el área de trabajo designada por <nAreaTrabajo>. Si <cNombreCampo> no existe en el área de trabajo especificada, FIELDWBLOCK() devuelve NIL. Descripción FIELDWBLOCK() es una función de base de datos que crea un bloque de código. Cuando se eval.a el bloque de código con la función EVAL(), en primer lugar, selecciona el <nAreaTrabajo> designada. Si se ha pasado un argumento, el bloque de código asigna el valor del argumento a <cNombreCampo>. Si no se ha pasado ningún argumento, el bloque de código obtiene el valor de <cNombreCampo>. El área de trabajo original se vuelve a seleccionar antes de que el bloque de código devuelva el control. Observe que es posible que no exista la variable de campo especificada cuando se cree el bloque de código, pero debe existir antes de que se ejecute. Notas . FIELDWBLOCK() es similar a FIELDBLOCK(), con la excepci.n de que FIELDWBLOCK() incorpora un área de trabajo fija en el bloque de asignación/lectura. Ejemplos . Este ejemplo compara FIELDWBLOCK() con un bloque de código creado utilizando el operador de macro. Observe que utilizando FIELDWBLOCK() se evitan los problemas de velocidad y tama.o asociados con el operador de macroexpresiónes: // Bloque de asignación/lectura para el área de trabajo 1 // definido con el operador de macroexpresiónes bAsilec := &( "{ |ValorAsig| IF( ValorAsig == NIL, ; 1->NomC, 1->NomC := ValorAsig ) }" ) // Bloque de asignación/lectura definido por medio de // FIELDWBLOCK() // bAsilec creado aqu. es el equivalente // funciónal del bAsilec anterior bAsilec := FIELDWBLOCK("NomC", 1) Ficheros: La biblioteca asociada es CLIPPER.LIB.
FILE() Determina si existen ficheros en el directorio o vía por defecto de CA-Clipper ------------------------------------------------------------------------------ Sintaxis FILE(<cEspecFichero>) --> lExiste Argumentos <cEspecFichero> determina una especificación de fichero estándar que puede incluir carácteres comod.n * y ?, as. como una referencia de unidad y de vía. Las referencias expl.citas a un fichero deben incluir también una extensión. Devuelve FILE() devuelve verdadero (.T.) si alg.n fichero coincide con el patr.n <cEspecFichero>; de lo contrario, devuelve falso (.F.). Descripción FILE() es una función de entorno que determina si se ha localizado alg.n fichero que coincida con un patr.n de especificación de fichero. FILE() busca el directorio especificado si se ha especificado una vía de forma expl.cita. Si no se ha especificado una vía, FILE() busca en el directorio por defecto de CA-Clipper y posteriormente, la vía de CA-Clipper. En ningún caso se busca en la vía del DOS. Observe también que FILE() no reconoce los ficheros ocultos o de sistema en su b.squeda. Ejemplos . En este ejemplo FILE() intenta localizar Ventas.dbf en otro directorio de CA-Clipper, que no sea el utilizado por defecto: ? FILE("Ventas.dbf") // Resultado: .F. ? FILE("\APPS\DBF\Ventas.dbf") // Resultado: .T. // SET PATH TO \APPS\DBF ? FILE("Ventas.dbf") // Resultado: .T. // SET PATH TO SET DEFAULT TO \APPS\DBF\ ? FILE("Ventas.dbf") // Resultado: .T. ? FILE("*.dbf") // Resultado: .T. Ficheros: La biblioteca asociada es CLIPPER.LIB.
FKLABEL()* Devuelve un nombre de tecla de función ------------------------------------------------------------------------------ Sintaxis FKLABEL(<nTeclafunción>) --> cEtiqTecla Devuelve FKLABEL() devuelve una cadena de carácteres que representa el nombre de la tecla de función especificada por el argumento numérico, <nTeclafunción>. Si el argumento es menor que uno o mayor que 40, la función devuelve una cadena ("") nula. Descripción FKLABEL() es una función de compatibilidad que se utiliza para duplicar la función FKLABEL() en dBASE III PLUS. Como principio general, la utilización de esta función no es recomendable ni necesaria en CA-Clipper. Las teclas de función se etiquetan con Fn, donde n abarca de uno a 40 y corresponde directamente con el argumento FKLABEL(). Ficheros: La biblioteca asociada es EXTEND.LIB, el módulo fuente es SOURCE\SAMPLE\FKLABEL.PRG.
FKMAX()* Devuelve el número de teclas de función como una constante ------------------------------------------------------------------------------ Sintaxis FKMAX() --> nTeclasfunción Descripción FKMAX() es una función de compatibilidad que se utiliza para duplicar la función FKMAX() en dBASE III PLUS. Como principio general, la utilización de esta función no es recomendable ni necesaria en CA-Clipper. Simplemente, devuelve un valor constante igual a 40. Ficheros: La biblioteca asociada es EXTEND.LIB, el módulo fuente es SOURCE\SAMPLE\FKMAX.PRG.
FLOCK() Bloquea un fichero de base de datos abierto en modo compartido ------------------------------------------------------------------------------ Sintaxis FLOCK() --> lExito Devuelve FLOCK() devuelve verdadero (.T.) si el intento de bloquear un fichero de base de datos en uso en el área de trabajo actual es satisfactorio; de lo contrario, devuelve falso (.F.). Si desea obtener más información sobre el bloqueo de ficheros, consulte el capítulo Programaci.n en Red en la gu.a Programaci.n y Utilidades. Descripción FLOCK() es una función de base de datos que se utiliza en entornos de red para bloquear un fichero de base de datos abierto en modo compartido, evitando as. que otros usuarios actualicen el fichero hasta que se libere el bloqueo. Los registros en el fichero bloqueado sólo están accesibles para operación.s de lectura. FLOCK() se relaciona con USE...EXCLUSIVE y RLOCK(). USE...EXCLUSIVE abre un fichero de base de datos, de forma que ningún otro usuario pueda abrir el mismo fichero al mismo tiempo y se trata del mecanismo de bloqueo m.s restrictivo de CA-Clipper. RLOCK() es el menos restrictivo e intenta situar un bloqueo de actualizaci.n en un registro compartido, impidiendo que otros usuarios actualicen el registro actual. FLOCK() representa un nivel de restricci.n medio. FLOCK() se utiliza en operación.s que acceden a la totalidad del fichero de base de datos. Normalmente, estos son mandatos que actualizan el fichero con un ámbito o una condición, como por ejemplo, DELETE o REPLACE ALL. A continúa.ión, se muestra una lista de estos mandatos: Mandatos que requieren FLOCK() ------------------------------------------------------------------------ Mandato Modo ------------------------------------------------------------------------ APPEND FROM FLOCK() o USE...EXCLUSIVE DELETE (varios registros) FLOCK() o USE...EXCLUSIVE RECALL (varios registros) FLOCK() o USE...EXCLUSIVE REPLACE (varios registros) FLOCK() o USE...EXCLUSIVE UPDATE ON FLOCK() o USE...EXCLUSIVE ------------------------------------------------------------------------ Por cada llamada de FLOCK(), existe un intento de bloquear el fichero de base de datos y el resultado se devuelve como un valor l.gico. Un bloqueo de fichero falla si otro usuario tiene actualmente un bloqueo de fichero o de registro para el mismo fichero de base de datos o bien, si otro usuario est. usando la base de datos en modo exclusivo. Si FLOCK() es satisfactorio, el bloqueo de fichero permanece hasta que efect.e UNLOCK, CLOSE DATABASE o RLOCK(). Por defecto, FLOCK() funcióna en el área de trabajo seleccionada, tal como se muestra en el ejemplo siguiente. Notas . SET RELATION: CA-Clipper no bloquea autom.ticamente todas las .reas de trabajo en la cadena de relaci.n cuando bloquea el .rea de trabajo actual y el uso de la función UNLOCK no es efectivo en .reas de trabajo relacionadas. Ejemplos . Este ejemplo utiliza FLOCK() para una actualizaci.n por lotes de los precios de Inventar.dbf: USE Inventar NEW IF FLOCK() REPLACE ALL Inventar->Precio WITH ; Inventar->Precio * 1.1 ELSE ? "Fichero no disponible" ENDIF . Este ejemplo utiliza una expresión con alias para intentar un bloqueo de fichero en un área de trabajo no seleccionada: USE Ventas NEW USE Cliente NEW // IF !Ventas->(FLOCK()) ? "Ventas est. siendo usado por otro usuario" ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FOPEN() Abre un fichero binario ------------------------------------------------------------------------------ Sintaxis FOPEN(<cFichero>, [<nModo>]) --> nManejador Argumentos <cFichero> es el nombre del fichero que se va a abrir incluyendo la vía, si existe. <nModo> es el modo de apertura del DOS solicitado, que indica c.mo puede accederse al fichero abierto. El modo de apertura se compone de elementos de los dos tipos de modos que se describen en las tablas que aparecen m.s adelante. Si .nicamente se utiliza el Modo de Acceso, el fichero se abre como no compartido. El modo de apertura por defecto es cero, lo que indica no compartido y sólo de lectura. Modos de Acceso FOPEN() ------------------------------------------------------------------------ Modo Fileio.ch Operaci.n ------------------------------------------------------------------------ 0 FO_READ Abierto para lectura (por defecto) 1 FO_WRITE Abierto para escritura 2 FO_READWRITE Abierto para lectura o escritura ------------------------------------------------------------------------ Los Modos de Utilizaci.n Compartida determinan c.mo pueden acceder otros procesos al fichero. Los Modos de Acceso en combinación (+) con los modos Compartidos determinan la accesibilidad del fichero en un entorno de red. Modos de Utilizaci.n Compartida FOPEN() ------------------------------------------------------------------------ Modo Fileio.ch Operaci.n ------------------------------------------------------------------------ 0 FO_COMPAT Modo de compatibilidad (por defecto) 16 FO_EXCLUSIVE Uso exclusivo 32 FO_DENYWRITE Evita que otros escriban 48 FO_DENYREAD Evita que otros lean 64 FO_DENYNONE Permite que otros lean o escriban 64 FO_SHARED Igual que FO_DENYNONE ------------------------------------------------------------------------ Devuelve FOPEN() devuelve el manejador del fichero abierto en el rango 0-65.535. Si se produce un error, FOPEN() devuelve -1. Descripción FOPEN() es una función de fichero de bajo nivel, que abre un fichero binario existente para lectura y escritura, según el argumento <nModo>. Siempre que exista un error de apertura, FERROR() devuelve el número de error del DOS. Por ejemplo, si el fichero no existe, FOPEN() devuelve -1 y FERROR() devuelve 2 para indicar que no se ha localizado el fichero. Consulte FERROR() para obtener una lista completa de números de error. Si el fichero especificado se abre de forma satisfactoria, el valor devuelto es el manejador del DOS para el fichero. Este valor es similar a un alias en el sistema de base de datos y es necesario para identificar el fichero abierto para otras funciónes de fichero. Por lo tanto, es importante asignar el valor de retorno a una variable para su utilización posterior, tal como se muestra en el ejemplo que aparece m.s adelante. .Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un conocimiento profundo del sistema operativo. Notas . Acceso a ficheros en otros directorios: FOPEN() no act.a seg.n los valores de SET DEFAULT ni SET PATH. En su lugar, busca en el directorio y vía actual del DOS, a menos que se establezca una vía, de forma expl.cita, como parte del argumento <cFichero>. Ejemplos . Este ejemplo utiliza FOPEN() para abrir un fichero con estado compartible de lectura/escritura y muestra un mensaje de error si falla la apertura: #include "Fileio.ch" // nManejador := FOPEN("Temp.txt", FO_READWRITE + FO_SHARED) IF FERROR() != 0 ? "No se puede abrir el fichero, error DOS", FERROR() BREAK ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Fileio.ch.
FOUND() Determina si se encontr. el registro buscado en la anterior operación. de b.squeda ------------------------------------------------------------------------------ Sintaxis FOUND() --> lExito Devuelve FOUND() devuelve verdadero (.T.) si el último mandato de b.squeda ha sido satisfactorio; de lo contrario, devuelve falso (.F.). Descripción FOUND() es una función de base de datos que determina si una operación. de b.squeda (es decir, FIND, LOCATE, CONTINUE, SEEK o SET RELATION) ha sido satisfactoria. Cuando se ejecuta uno de estos mandatos, FOUND() devuelve verdadero (.T.) si encuentra una coincidencia; de lo contrario, devuelve falso (.F.). Si el mandato de b.squeda es LOCATE o CONTINUE, una coincidencia es el siguiente registro que cumpla con el ámbito y la condición. Si el mandato de b.squeda es FIND, SEEK o SET RELATION, una coincidencia es la primera clave del índice de control que es igual al argumento de b.squeda. Si el valor clave es igual al argumento de b.squeda, FOUND() devuelve verdadero (.T.); de lo contrario, es falso (.F.). El valor de FOUND() se retiene hasta que se ejecuta otro mandato de movimiento de registro. A menos que sea otro mandato de b.squeda, FOUND() se establece autom.ticamente en falso (.F.). Cada área de trabajo tiene un valor FOUND(). Esto significa que si un área de trabajo tiene una relaci.n establecida con un área de trabajo secundaria, la consulta de FOUND() en el .rea secundaria devuelve verdadero (.T.) si encuentra una coincidencia. Por defecto, FOUND() act.a en el área de trabajo seleccionada actualmente. Puede hacer que funcióne en un área de trabajo no seleccionada especific.ndola dentro de una expresión de alias (consulte el ejemplo siguiente). FOUND() devuelve falso (.F.) si no hay ningúna base de datos abierta en el área de trabajo actual. Ejemplos . En este ejemplo se ilustra el comportamiento de FOUND() después de un mandato de movimiento de registro: USE Ventas INDEX Ventas ? INDEXKEY(0) // Resultado: VENDEDOR SEEK "1000" ? FOUND() // Resultado: .F. SEEK "100" ? FOUND() // Resultado: .T. SKIP ? FOUND() // Resultado: .F. . En este ejemplo se comprueba un valor FOUND() en un .rea de trabajo no seleccionada utilizando una expresión de alias: USE Ventas INDEX Ventas NEW USE Cliente INDEX Cliente NEW SET RELATION TO Numclien INTO Ventas // SEEK "Casanova" ? FOUND(), Ventas->(FOUND()) . Este fragmento de código procesa todos los registros de Cliente con el valor clave "Casanova" utilizando FOUND() para determinar cu.ndo cambian los valores clave: USE Cliente INDEX Cliente NEW SEEK "Casanova" DO WHILE FOUND() . . <sentencias> . SKIP LOCATE REST WHILE Nombre == "Casanova" ENDDO Ficheros: La biblioteca asociada es CLIPPER.LIB.
FREAD() Lee carácteres de un fichero binario en una variable de memoria intermedia ------------------------------------------------------------------------------ Sintaxis FREAD(<nManejador>, @<cVarMemInter>, <nBytes>) --> nBytes Argumentos <nManejador> es el manejador de fichero que se obtiene de FOPEN(), FCREATE() o predefinido por el DOS. <cVarMemInter> es el nombre de una variable de carácter inicializada y existente que se utiliza para almacenar datos le.dos de un fichero especificado. La longitud de esta variable debe ser mayor que o igual a <nBytes>. <cVarMemInter> debe pasarse por referencia y, por lo tanto, debe ir precedida por el operador pasar por referencia (@). <nBytes> es el número de bytes que deben leerse en la memoria intermedia. Devuelve FREAD() devuelve el número de bytes le.dos satisfactoriamente como un valor numérico entero. Un valor de retorno menor que <nBytes> o cero indica el final del fichero o cualquier otro error de lectura. Descripción FREAD() es una función de fichero de bajo nivel que lee carácteres de un fichero binario en una variable de carácteres existente. Lee el fichero comenzando en la posición del puntero de fichero del DOS, avanzando dicho puntero el número de bytes le.dos. Se leen todos los carácteres incluyendo los de control, nulos y los de código ASCII superior a 127. FREAD() es similar en ciertos aspectos a FREADSTR() y FSEEK(). FREADSTR() lee un número especificado de bytes de un fichero hasta el carácter nulo siguiente (CHR(0)). FSEEK() desplaza el puntero del fichero sin leer. Si surge un error durante la lectura del fichero, FERROR() devuelve el número de error del DOS. Consulte FERROR() para obtener una lista de números de error. .Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un conocimiento profundo del sistema operativo. Ejemplos . Este ejemplo utiliza FREAD() después de abrir un fichero, de forma satisfactoria, para leer 128 bytes en un .rea de memoria intermedia: #define BLOQUE_F 128 // cMemInter := SPACE(BLOQUE_F) nManejador := FOPEN("Temp.txt") // IF FERROR() != 0 ? "Error de apertura de fichero:", FERROR() ELSE IF FREAD(nManejador, @cMemInter, BLOQUE_F) <> BLOQUE_F ? "Error de lectura en Temp.txt" ENDIF FCLOSE(nManejador) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FREADSTR() Lee carácteres de un fichero binario ------------------------------------------------------------------------------ Sintaxis FREADSTR(<nManejador>, <nBytes>) --> cCadena Argumentos <nManejador> es el manejador de ficheros obtenido de FOPEN(), FCREATE() o predefinido por el DOS. <nBytes> es el número de bytes que deben leerse, comenzando en la posición del puntero del fichero del DOS actual. Devuelve FREADSTR() devuelve una cadena de carácteres de un máximo de 65.535 (64K) bytes. Un valor de retorno nulo ("") indica un error o el final del fichero. Descripción FREADSTR() es una función de fichero de bajo nivel que lee carácteres de un fichero binario abierto que comienza en la posición de puntero del fichero del DOS actual. Los carácteres se leen hasta <nBytes> o hasta que se encuentra un carácter nulo (CHR(0)). Se leen todos los carácteres incluyendo los de control, con la excepci.n de CHR(0). El puntero del fichero avanza <nBytes>. Si este número es mayor que el número de bytes desde la posición del puntero hasta el final del fichero, el puntero se sit.a en el último byte del fichero. .Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un conocimiento profundo del sistema operativo. Ejemplos . El ejemplo de la p.gina siguiente muestra los valores ASCII de los primeros 16 bytes de un fichero de texto: #include "Fileio.ch" // nManejador := FOPEN("Nuevo.txt", FC_NORMAL) IF FERROR() != 0 ? "Error de apertura de fichero:", FERROR() ELSE cCadena := FREADSTR(nManejador, 16) ? cCadena FCLOSE(nManejador) ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FRENAME() Cambia el nombre de un fichero ------------------------------------------------------------------------------ Sintaxis FRENAME(<cFicheroAntiguo>, <cNuevoFichero>) --> nExito Argumentos <cFicheroAntiguo> es el nombre del fichero que debe renombrarse, incluyendo su extensión. También puede incluirse la letra de la unidad y/o nombre de vía, como parte del nombre del fichero. <cNuevoFichero> es el nuevo nombre del fichero, incluyendo su extensión. También puede incluirse la letra de la unidad y/o nombre de vía como parte del nombre. Devuelve FRENAME() devuelve -1 si la operación.falla y cero si es satisfactoria. En el caso de que se produzca un fallo, puede utilizarse FERROR() para determinar la naturaleza del error. Descripción FRENAME() es una función de fichero que cambia el nombre de un fichero especificado por uno nuevo y act.a de forma id.ntica al mandato RENAME. Cuando se llama FRENAME(), el <cFicheroAntiguo> sólo se renombra si est. situado en el directorio del DOS actual o en la vía especificada. FRENAME() no utiliza los valores de SET DEFAULT o SET PATH para localizar <cFicheroAntiguo>. Si el directorio fuente es diferente del directorio destáno, el fichero se desplaza al directorio destáno. En el caso de que exista <cNuevoFichero> o est. abierto actualmente, FRENAME() falla y devuelve - 1, indicando que no ha realizado la acci.n designada. Con FERROR() puede determinarse la naturaleza del error. .Advertencia! Los ficheros deben cerrarse antes de renombrarlos. Si se intenta renombrar un fichero abierto pueden producirse resultados impredecibles. Cuando se renombra un fichero de base de datos, el fichero memo asociado (.dbt) también debe renombrarse. Si no lo hace de este modo, puede poner en peligro la integridad de sus bases de datos. Ejemplos . En este ejemplo se muestra c.mo se renombra un fichero: IF FRENAME("FichAnt.txt", "NuevFich.txt") == -1 ? "Error de fichero:", FERROR() ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
FSEEK() Sitúa el puntero de fichero binario en una nueva posición ------------------------------------------------------------------------------ Sintaxis FSEEK(<nManejador>, <nDesplazamiento>, [<nOrigen>]) --> nPosici.n Argumentos <nManejador> es el manejador de ficheros obtenido de FOPEN(), FCREATE() o predefinido por el DOS. <nDesplazamiento> es el número de bytes que se va a desplazar el puntero del fichero desde la posición definida por <nOrigen>. Puede ser un número positivo o negativo. Un número positivo desplaza el puntero hacia adelante y uno negativo lo desplaza hacia atr.s en el fichero. <nOrigen> define la situaci.n inicial del puntero del fichero antes de que se ejecute FSEEK(). El valor por defecto es cero, representando el inicio del fichero. Si <nOrigen> es el final del fichero, <nDesplazamiento> debe ser cero o negativo. M.todos para Desplazar el Puntero del Fichero ------------------------------------------------------------------------ Origen Fileio.ch Descripción ------------------------------------------------------------------------ 0 FS_SET Busca desde el principio del fichero 1 FS_RELATIVE Busca desde la posición actual del puntero 2 FS_END Busca desde el final del fichero ------------------------------------------------------------------------ Devuelve FSEEK() devuelve la nueva posición del puntero del fichero relativa al inicio del fichero (posición 0) como un valor numérico entero. Este valor es independiente de la posición original del puntero del fichero. Descripción FSEEK() es una función de fichero de bajo nivel que desplaza el puntero del fichero hacia adelante o hacia atr.s en un fichero binario abierto sin leer realmente el contenido del fichero especificado. La posición inicial y desplazamiento se especifican como argumentos de función y se devuelve la nueva posición en el fichero. Independientemente de los argumentos de función especificados, el puntero del fichero no puede desplazarse de forma que exceda los l.mites del inicio o final del fichero. .Advertencia! Esta función permite el acceso de bajo nivel a ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un conocimiento profundo del sistema operativo. Ejemplos . En este ejemplo se utiliza FSEEK() para determinar la longitud de un fichero buscando desde el final del mismo. Seguidamente, el puntero se restablece al inicio del fichero: #include "Fileio.ch" // // Abrir el fichero en modo de sólo lectura IF (nManejador := FOPEN("Temp.txt")) >= 0 // // Obtener la longitud del fichero nLongitud := FSEEK(nManejador, 0, FS_END) // // Restablecer la posición al comienzo del // fichero FSEEK(nManejador, 0) FCLOSE(nManejador) ELSE ? "Error de apertura de fichero:", FERROR() ENDIF . Esta pseudofunción sit.a el puntero del fichero en el último byte de un fichero binario: #define FinalFichero(nManejador); (FSEEK(nManejador, 0, FS_END)) . Esta pseudofunción sit.a el puntero del fichero en el primer byte de un fichero binario: #define InicioFichero(nManejador); (FSEEK(nManejador, 0)) . Esta pseudofunción informa de la posición actual del puntero del fichero en un fichero binario especificado: #define PosFichero(nManejador); (FSEEK(nManejador, 0, FS_RELATIVE)) Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Fileio.ch.
FWRITE() Escribe en un fichero binario abierto ------------------------------------------------------------------------------ Sintaxis FWRITE(<nManejador>, <cMemInter>, [<nBytes>]) --> nBytesEscritos Argumentos <nManejador> es el manejador de ficheros obtenido de FOPEN(), FCREATE() o predefinido por el DOS. <cMemInter> es la cadena de carácteres que debe escribirse en el fichero especificado. <nBytes> indica el número de bytes que debe escribirse, comenzando en la posición del puntero de fichero actual. Si se omite, se escribe todo el contenido de <cMemInter>. Devuelve FWRITE() devuelve el número de bytes escritos como un valor numérico entero. Si el valor devuelto es igual a <nBytes>, la operación.ha resultado satisfactoria. Si el valor de retorno es menor que <nBytes> o es cero, es debido a que el disco est. lleno o se ha producido otro error. Descripción FWRITE() es una función de fichero de bajo nivel que escribe datos en un fichero binario abierto desde una memoria intermedia de cadena de carácteres. Puede escribir todo el contenido de la memoria intermedia o tan sólo una parte. La escritura comienza en la posición actual del fichero y la función devuelve el número real de bytes escritos. Si FWRITE() produce una condición de error, puede utilizar FERROR() para determinar el error espec.fico. .Advertencia! Esta función permite el acceso de bajo nivel a los ficheros y dispositivos del DOS. Debe utilizarse con gran precauci.n y requiere un profundo conocimiento del sistema operativo Ejemplos . En este ejemplo se copia el contenido de un fichero en otro: #include "Fileio.ch" #define BLOQUE_F 512 // cMemInter := SPACE(BLOQUE_F) nFichEnt := FOPEN("Temp.txt", FO_READ) nFichSal := FCREATE("NuevFich.txt", FC_NORMAL) lHecho := .F. // DO WHILE !lHecho nBytesLec := FREAD(nFichEnt, @cMemInter, BLOQUE_F) IF FWRITE(nFichSal, cMemInter, nBytesLec) < ; nBytesLec ? "Fallo de escritura: ", FERROR() lHecho := .T. ELSE lHecho := (nBytesLec == 0) ENDIF ENDDO // FCLOSE(nFichEnt) FCLOSE(nFichSal) Ficheros: La biblioteca asociada es CLIPPER.LIB.
GETENV() Obtiene el contenido de una variable de entorno DOS ------------------------------------------------------------------------------ Sintaxis GETENV(<cVariableEntorno>) --> cCadena Argumentos <cVariableEntorno> es el nombre de la variable de entorno del DOS. Cuando se especifica este argumento, puede utilizarse cualquier combinación de letras mayúsculas y minúsculas; GETENV() no es sensible a las mayúsculas y minúsculas. Devuelve GETENV() devuelve el contenido de la variable de entorno del DOS especificada como una cadena de carácteres. Si no se puede localizar la variable, GETENV() devuelve una cadena nula (""). Descripción GETENV() es una función de entorno que le permite obtener información del entorno DOS en un programa de aplicación. Normalmente, .sta es la información de la configuración, incluyendo los nombres de vía que proporcionan la situaci.n de los ficheros (base de datos, índice, etiqueta o informes). Esta función es particularmente .til en entornos de red. Notas . Valor de retorno vac.o: Si est. seguro de que existe una variable de entorno y GETENV() devuelve siempre una cadena nula (""), aseg.rese de que no existen espacios entre el nombre de variable de entorno y el primer carácter de la cadena que se le ha asignado en el mandato SET del DOS. . Compatibilidad: En las versiones anteriores de CA-Clipper, la función se llamaba GETE(). Esta forma abrevíada de GETENV() es todavía operativa. Ejemplos . Este ejemplo obtiene el valor actual de PATH del DOS, convirti.ndola en la vía actual de CA-Clipper: cVia := GETENV("PATH") SET PATH TO (cVia) . Este ejemplo utiliza variables de entorno para configurar las posiciónes espec.ficas de ficheros. Cuando se configura un sistema, se definen variables de entorno que contienen la posición de varios tipos de fichero as. como la variable de entorno CLIPPER (consulte el capítulo Entorno de Ejecuci.n en la gu.a Programaci.n y Utilidades), de forma an.loga a lo siguiente: C>SET LOC_DBF=<vía de fichero de base de datos> C>SET LOC_NTX=<vía de fichero de índice> C>SET LOC_RPT=<vía de fichero de informe> En la secci.n de configuración del programa de aplicación, asigne el contenido de las variables de entorno a variables. Posteriormente, cuando acceda a un fichero, haga preceder la referencia con la variable de vía, del modo siguiente: cDdfDirectorio := GETENV("LOC_DBF") USE (cDdfDirectorio + "Facturas") Ficheros: La biblioteca asociada es CLIPPER.LIB.
HARDCR() Sustituye los retornos de carro autom.ticos de una cadena de carácteres por retornos de carro forzados. ------------------------------------------------------------------------------ Sintaxis HARDCR(<cCadena>) --> cCadenaConvertida Argumentos <cCadena> es la cadena de carácteres o campo memo que se va a convertir. Devuelve HARDCR() devuelve una cadena de carácteres de hasta 65.535 (64K) carácteres de longitud. Descripción HARDCR() es una función memo que sustituye todos los retornos de carro autom.ticos (CHR(141)) por retornos de carro forzados (CHR(13)). Se utiliza para mostrar con mandatos de consola cadenas de carácteres largas y campos memo que contienen retornos de carro autom.tico. En CA-Clipper los mandatos de consola (incluyendo REPORT y LABEL FORM) no convierten autom.ticamente los retornos de carro autom.ticos en retornos permanentes, por lo que es necesario hacer explícitamente la conversión. MEMOEDIT() a.ade retornos de carro autom.ticos en los saltos de línea. Notas . HARDCR() en REPORT y LABEL FORM: Si se utiliza HARDCR() en una expresión de contenido de REPORT FORM o LABEL FORM y no se utiliza en otra parte, debe declararse EXTERNAL para asegurarse de que est. enlazada. Ejemplos . Para mostrar un campo memo formateado con los saltos de línea autom.ticos de MEMOEDIT(): USE Ventas NEW ? HARDCR(Ventas->Notas) Ficheros: La biblioteca asociada es EXTEND.LIB.
HEADER() Devuelve la longitud de la cabecera del fichero de base de datos actual ------------------------------------------------------------------------------ Sintaxis HEADER() --> nBytes Devuelve HEADER() devuelve el número de bytes de la cabecera del fichero de base de datos actual, en forma de número entero. Si no se est. utilizando ningún fichero de base de datos, HEADER() devuelve cero. Descripción HEADER() es una función de base de datos que se utiliza con LASTREC(), RECSIZE() y DISKSPACE() para crear procedimientos de copia de seguridad de ficheros. Por defecto, HEADER() act.a en el área de trabajo actualmente seleccionada. Para que act.e en un área de trabajo no seleccionada debe especificarse como parte de una expresión de alias (consulte el ejemplo siguiente). Ejemplos . Este ejemplo determina el tama.o de la cabecera de Ventas.dbf: USE Ventas NEW ? HEADER() // Resultado: 258 . Este ejemplo define una pseudofunción, TamaFich(), que utiliza HEADER() con RECSIZE() y LASTREC() para calcular el tama.o en bytes del fichero en base de datos actual: #define TamaFich() ((RECSIZE() * LASTREC()) + ; HEADER() + 1) En adelante, puede utilizar TamaFich() igual que cualquier otra función: USE Ventas NEW USE Cliente NEW ? TamaFich() ? Ventas->(TamaFich()) Ficheros: La biblioteca asociada es EXTEND.LIB.
I2BIN() Convierte un valor numérico de CA-Clipper en un entero binario de 16 bits. ------------------------------------------------------------------------------ Sintaxis I2BIN(<nEntero>) --> cEnteroBinario Argumentos <nEntero> es el número entero que se va a convertir. Los números decimales se truncan. Devuelve I2BIN() devuelve una cadena de carácteres de 2 bytes que contiene un entero binario de 16 bits. Descripción I2BIN() es una función de bajo nivel que convierte un número entero en una cadena de carácteres formateada como un entero binario (byte menos significativo primero). I2BIN() se utiliza con FWRITE() para convertir un número de CA-Clipper a la forma binaria estándar. La inversa de I2BIN() es BIN2I(). Ejemplos . Este ejemplo abre un fichero de base de datos utilizando funciónes de fichero de bajo nivel y escribe la fecha de la .ltima actualizaci.n en los bytes 1-3: #include "Fileio.ch" // nManejador = FOPEN("Ventas.dbf", FO_READWRITE) // // Convierte en un entero la fecha de la .ltima actualizaci.n nAnno = I2BIN(90) nMes = I2BIN(12) nDia = I2BIN(15) // // Se.ala la fecha de la .ltima actualizaci.n FSEEK(nManejador, 1, FS_SET) // // Escribe la fecha de la nueva actualizaci.n // utilizando sólo el primer byte FWRITE(nManejador, nAnno, 1) FWRITE(nManejador, nMes, 1) FWRITE(nManejador, nDia, 1) FCLOSE(nManejador) Ficheros: La biblioteca asociada es EXTEND.LIB, el módulo fuente es SOURCE\SAMPLE\EXAMPLEA.ASM.
IF() Retorna el resultado de una expresión en base a una condición. ------------------------------------------------------------------------------ Sintaxis [I]IF(<lCondici.n>, <expVerdadera>, <expFalsa>) --> Valor Argumentos <lCondici.n> es la expresión l.gica que se va a evaluar. <expVerdadera> es el valor de cualquier tipo de datos que se devuelve si <lCondici.n> es verdadera (.T.). <expFalsa> es el valor, de cualquier tipo de datos, que se devuelve si <lCondici.n> es falsa (.F.). No es necesario que este argumento sea del mismo tipo de datos que <expVerdadera>. Devuelve IF() devuelve el resultado de <expVerdadera> si <lCondici.n> resulta verdadera (.T.) y de <expFalsa> si resulta falsa (.F.). El valor devuelto es del tipo de datos de la expresión víaacute;lida. Descripción IF() es una función de conversión l.gica. Es una de las funciónes m.s potentes y vers.tiles de CA-Clipper. Ofrece un mecanismo para evaluar una condición dentro de una expresión. Con esta función puede convertir una expresión l.gica en otro tipo de datos. Ejemplos . Este ejemplo convierte un valor de datos l.gico en un valor numérico: lPagado =.T. ? IF(lPagado, 1, 0) // Resultado: 1 . En este ejemplo se da formato a un campo l.gico dependiendo de si ha vencido o no el per.odo de pago del cliente. @ ROW() + 1, 25 SAY IF(lPagado, SPACE(10), ".A por ellos!") . Si imprime formularios, puede imprimir un s.mbolo indicativo en diferentes columnas dependiendo del valor de un campo l.gico: @ ROW(), IF(EnHospital, 10, 12) SAY "X" . Puede utilizar también la función IF() para obligar a LABEL FORM a imprimir líneas en blanco. Introduzca la siguiente expresión cuando cree la etiqueta con RL.EXE: IF(EMPTY(Empresa), CHR(255), Empresa) Ficheros: La biblioteca asociada es CLIPPER.LIB.
INDEXEXT() Devuelve la extensión por defecto de los ficheros ííndice basada en el controlador de base de datos actualmente enlazado ------------------------------------------------------------------------------ Sintaxis INDEXEXT() --> cExtensi.n Devuelve A menos que se haya enlazado otro controlador de base de datos, INDEXEXT() devuelve ".NTX", lo que indica que est. activo el controlador por defecto de CA-Clipper. Si est. enlazado el controlador compatible con dBASE III PLUS, la función devuelve "NDX". Descripción INDEXEXT() devuelve la extensión por defecto del fichero ííndice, en función del controlador de base de datos actualmente enlazado. Ejemplos . En este ejemplo, INDEXEXT() crea una prueba de existencia del fichero ííndice Cliente independiente del controlador de base de datos enlazado al programa actual: USE Cliente NEW // IF.NOT. FILE("Cliente" + INDEXEXT()) INDEX ON NombreCliente TO Cliente ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
INDEXKEY() Devuelve la expresión clave del índice especificado ------------------------------------------------------------------------------ Sintaxis INDEXKEY(<nOrden>) --> cExpClave Argumentos <nOrden> es la posición original del índice en la lista de ficheros índice abierta por el último mandato USE...INDEX o SET INDEX TO en el área de trabajo actual. Un valor cero expecifica el índice activo, independientemente de su posición real en la lista. Devuelve INDEXKEY() devuelve la expresión clave del índice especificado como una cadena de carácteres. Si no hay índice correspondiente o no se ha abierto ningún fichero de base de datos, INDEXKEY() devuelve una cadena nula.(""). Descripción INDEXKEY() es una función de base de datos que determina la expresión clave de un ííndice especificado en el área de trabajo actual y la devuelve como una cadena de carácteres. Para evaluar la expresión clave, especifique INDEXKEY() como una macroexpresión similar a la siguiente: &(INDEXKEY(<nOrden>)). INDEXKEY() tiene cierto número de aplicaciónes, pero dos en concreto son importantes. Con esta función puede totalizar la base de datos a trav.s de la expresión clave en el código fuente. El otro caso tiene lugar en la función de usuario de DBEDIT(). Aqu. puede ser necesario decidir si actualizar o no la pantalla después de que el usuario haya editado un registro. Normalmente, sólo es necesario actualizar la pantalla si ha cambiado la expresión clave del índice activo en el registro actual. Ambos ejemplos se describen m.s abajo. Por defecto, INDEXKEY() act.a en el área de trabajo actualmente seleccionada. Puede hacer que act.e en un área de trabajo no seleccionada especific.ndola con una expresión de alias (consulte el ejemplo siguiente). Ejemplos . Este ejemplo accede a la expresión clave de los ííndices abiertos en el área de trabajo actual: #define ORD_NATURAL 0 #define ORD_NOMBRE 1 #define ORD_SERIE 2 // USE Cliente INDEX Nombre, Serie NEW SET ORDER TO ORD_SERIE ? INDEXKEY(ORD_NOMBRE) // Resultado: exp índice de nombres ? INDEXKEY(ORD_SERIE) // Resultado: exp índice en serie ? INDEXKEY(ORD_NATURAL) // Resultado: exp índice en serie . Este ejemplo accede a la expresión clave del índice activo en un área de trabajo no seleccionada: USE Cliente INDEX Nombre, Serie NEW USE Ventas INDEX Vendedor NEW ? INDEXKEY(0), Cliente->(INDEXKEY(0)) . Este ejemplo utiliza INDEXKEY() como parte de una expresión TOTAL ON de clave. Observe que INDEXKEY() se especifica con una macroexpresión para obligar a evaluar la expresión: USE Ventas INDEX Vendedor NEW TOTAL ON &(INDEXKEY(0)) FIELDS CantidadVentas; TO ResumenVentas . Este ejemplo utiliza INDEXKEY() para determinar si debe actualizarse la pantalla de DBEDIT() después de que el usuario haya editado el valor de campo actual. Normalmente, es necesario actualizar la pantalla DBEDIT() si el usuario cambia un campo que es parte de la clave del índice activo. EditarFichero() es una función definida por el usuario llamada desde una función DBEDIT() de usuario para editar el campo actual si el usuario ha pulsado una tecla de edici.n. #include "Dbedit.ch" #define ORD_NATURAL 0 FUNCTION EditarFichero() LOCAL Valíndice // Guarda el valor y expresión clave actual Valíndice = &(INDEXKEY(ORD_NATURAL)) . . <código para obtener (GET) el valor de campo actual> . // Actualizar la pantalla si ha cambiado el //valor clave IF Valíndice != &(INDEXKEY(ORD_NATURAL)) nPeticion = DE_REFRESH ELSE nPeticion = DE_CONT ENDIF RETURN nPeticion Ficheros: La biblioteca asociada es CLIPPER.LIB.
INDEXORD() Devuelve la posición de orden del índice activo. ------------------------------------------------------------------------------ Sintaxis INDEXORD() --> nOrden Devuelve INDEXORD() devuelve un valor numérico entero. El valor devuelto es igual a la posición del índice activo en la lista de ficheros ííndice abiertos del área de trabajo actual. Un valor cero indica que no hay índice activo y que se est. accediendo a los registros en su orden natural. Si no hay abierto ningún fichero de base de datos, INDEXORD() devuelve también el valor cero. Descripción INDEXORD() es una función de base de datos que determina la posición del índice activo en la lista de ficheros ííndice abiertos por el último mandato USE...INDEX o SET INDEX TO en el área de trabajo actual. Suele ser conveniente guardar el último índice de control para poder restablecerlo m.s tarde. Por defecto, INDEXORD() act.a en el área de trabajo actualmente abierta. Para que opere en un área de trabajo no seleccionada, debe especificarla como parte de una expresión de alias (consulte el ejemplo siguiente). Ejemplos . Este ejemplo utiliza INDEXORD() para guardar el orden actual. Despu.s de cambiar a un nuevo orden, utiliza el valor guardado para restablecer el orden original: USE Cliente INDEX Nombre, Serie NEW nOrden := INDEXORD() // Resultado: 1 SET ORDER TO 2 ? INDEXORD() // Resultado: 2 SET ORDER TO nOrden ? INDEXORD() // Resultado: 1 . Este ejemplo utiliza una expresión de alias para determinar el número de orden del índice activo en un área de trabajo no seleccionada: USE Ventas INDEX Vendedor, NumCliente NEW USE Cliente INDEX Nombre, Serie NEW ? Ventas->(INDEXORD()) // Resultado: 1 Ficheros: La biblioteca asociada es CLIPPER.LIB.
INKEY() Lee un carácter de la memoria intermedia del teclado ------------------------------------------------------------------------------ Sintaxis INKEY([<nSegundos>]) --> nC.digoInkey Argumentos <nSegundos> Especifica el número de segundos que INKEY() espera a que se pulse una tecla. Puede especificar valores en incrementos de hasta una d.cima de segundo. Si se especifica cero, el programa se detiene hasta que se pulse una tecla. Si se omite <nSegundos> INKEY() no espera a que se pulse una tecla. Devuelve INKEY() devuelve un valor numérico comprendido entre -39 y 386, que identifica la tecla le.da de la memoria intermedia del teclado. Si la memoria intermedia est. vac.a INKEY() devuelve cero. INKEY() devuelve valores para todas las combinaciónes de carácteres ASCII, funciónes, Alt-función, Ctrl-función, Alt-letra y Ctrl-letra. Descripción INKEY() es una función de teclado que lee la tecla siguiente contenida en la memoria intermedia del teclado y devuelve un valor que representa esa tecla. Este valor se guarda también internamente y puede recuperarse por medio de LASTKEY(). Si se especifica el argumento <nSegundos> y no hay teclas pendientes en la memoria intermedia, la ejecución del programa se detiene hasta que aparezca una tecla en la memoria del teclado o haya transcurrido <nSegundos>. El tiempo que espera la función INKEY() se basa en el reloj del sistema operativo y no en la velocidad del microprocesador. Si <nSegundos> es cero, la ejecución del programa se detiene hasta que haya alguna tecla en la memoria intermedia. Recuerde que INKEY() no es un estado de espera, por lo que las teclas establecidas mediante SET KEY no están activas. INKEY() es similar a la función NEXTKEY(). A diferencia de INKEY(), NEXTKEY() lee sin extraer la tecla de la memoria intermedia del teclado. Esto es útil para comprobar la existencia de una tecla sin procesarla. INKEY() es la primitiva principal del sistema de CA-Clipper para extraer teclas de la memoria intermedia del teclado. Se utiliza para sondear el teclado o hacer una pausa en la ejecución del programa hasta que se pulse una tecla. Como ejemplo, puede utilizar INKEY() para terminar mandatos con un ámbito de lectura como LIST, LABEL FORM y REPORT FORM incluyendo una condición WHILE. Consulte el ejemplo siguiente. Si desea una lista completa de los códigos INKEY() y constantes de Inkey.ch, consulte la gu.a de Mensajes de Error y Apííndices. Ejemplos . Este ejemplo recoge una tecla del teclado y muestra el valor de su carácter seguido por el valor de INKEY(): #include "Inkey.ch" // LOCAL nCodigoInkey := 0 DO WHILE LASTKEY() != K_ESC ? "Pulse una tecla: " nCodigoInkey := INKEY(0) ?? "Car.cter:", CHR(nCodigoInkey),; "C.digo INKEY():", LTRIM(STR(nCodigoInkey)) ENDDO RETURN . Este ejemplo utiliza INKEY() para sondear la pulsaci.n de una tecla de interrupci.n durante un REPORT FORM. Si el usuario pulsa Esc durante el proceso de impresión, el proceso REPORT FORM termina: #include "Inkey.ch" // USE Ventas INDEX Vendedor NEW REPORT FORM MONTHLY FOR MONTH(FechaVentas) = ; MONTH(DATE()); WHILE INKEY() != K_ESC Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Inkey.ch.
INT() Convierte un valor numérico en un número entero ------------------------------------------------------------------------------ Sintaxis INT(<nExp>) --> nEntero Argumentos <nExp> es la expresión numérica que se va a convertir en entero. Devuelve INT() devuelve un valor numérico entero. Descripción INT() es una función numérica que convierte un valor numérico en un entero truncando (sin redondear) todos los dígitos situados a la derecha de la coma decimal. INT() es útil en operación.s en las que no es necesaria la parte decimal de un número. Ejemplos . Estos ejemplos muestran los resultados de varias llamadas a la función INT(): ? INT(100.00) // Resultado: 100 ? INT(.5) // Resultado: 0 ? INT(-100.75) // Resultado: -100 Ficheros: La biblioteca asociada es CLIPPER.LIB.
ISALPHA() Determina si el carácter inicial de una cadena de carácteres es alfabético ------------------------------------------------------------------------------ Sintaxis ISALPHA(<cCadena>) --> lBooleano Argumentos <cCadena> es la cadena de carácteres que se va a examinar. Devuelve ISALPHA() devuelve verdadero (.T.) si el primer carácter de <cCadena> es alfabético; en caso contrario devuelve falso (.F.). Descripción ISALPHA() es una función de carácteres que determina si la cadena especificada comienza con un carácter alfabético. Se consideran carácteres alfabéticos todas las letras mayúsculas o minúsculas de la A a la Z. ISALPHA() devuelve falso (.F.) si la cadena comienza con un dígito o con cualquier otro carácter. Ejemplos . Estos ejemplos muestran varios resultados de ISALPHA(): ? ISALPHA("AbcDe") // Resultado:.T. ? ISALPHA("aBcDE") // Resultado:.T. ? ISALPHA("1BCde") // Resultado:.F. ? ISALPHA(".FRED") // Resultado:.F. Ficheros: La biblioteca asociada es EXTEND.LIB.
ISCOLOR() Determina si el ordenador actual soporta color ------------------------------------------------------------------------------ Sintaxis ISCOLOR() | ISCOLOUR() --> lBooleano Devuelve ISCOLOR() devuelve verdadero (.T.) si hay una tarjeta gr.fica de color instalada; en caso contrario devuelve falso (.F.). Descripción ISCOLOR() es una función de pantalla que se puede utilizar para decidir el tipo de atributos de pantalla (color o monocromo). Recuerde que algunos adaptadores monocromos con capacidades gr.ficas devuelven verdadero (.T.). Ejemplos . Este ejemplo instala variables de atributo de color durante la ejecución: IF ISCOLOR() cBox = "BG+/B, W/N" cSays = "BG/B, W/N" cGets = "W/N, N/W" ELSE cBox = "W+" cSays = "W/N, N+/W" cGets = "W/N, N/W" ENDIF . . <sentencias> . SETCOLOR(cSays) Ficheros: La biblioteca asociada es CLIPPER.LIB.
ISDIGIT() Determina si el carácter inicial de una cadena de carácteres es un dígito ------------------------------------------------------------------------------ Sintaxis ISDIGIT(<cCadena>) --> lBooleano Argumentos <cCadena> es la cadena de carácteres que se va a examinar. Devuelve ISDIGIT() devuelve verdadero (.T.) si el primer carácter de una cadena es un dígito comprendido entre cero y nueve; en caso contrario devuelve falso (.F.). Descripción ISDIGIT() es una función de carácteres que determina si el primer carácter de una cadena es un dígito del cero al nueve. Si el primer carácter de <cCadena> es de cualquier otro tipo, ISDIGIT() devuelve falso (.F.). ISDIGIT() es útil para determinar si la cadena actual es un número antes de convertirla en un valor numérico por medio de la función VAL(). Ejemplos . Estos ejemplos muestra diferentes resultados de ISDIGIT(): ? ISDIGIT("AbcDe") // Resultado:.F. ? ISDIGIT("1abcd") // Resultado:.T. ? ISDIGIT(".12345") // Resultado:.F. Ficheros: La biblioteca asociada es EXTEND.LIB.
ISLOWER() Determina si el carácter inicial de una cadena de carácteres es una letra minúscula ------------------------------------------------------------------------------ Sintaxis ISLOWER(<cCadena>) --> lBooleano Argumentos <cCadena> es la cadena de carácteres que se va a examinar. Devuelve ISLOWER() devuelve verdadero (.T.) si el primer carácter de una cadena es una letra minúscula; es caso contrario devuelve falso (.F.). Descripción ISLOWER() es una función de carácteres que determina si el primer carácter de una cadena de carácteres es una letra minúscula. Es la función inversa de ISUPPER(), que determina si el primer carácter es una letra mayúscula. ISLOWER() y ISUPPER() están relacionadas con las funciónes LOWER() y UPPER(), que convierten las letras mayúsculas en minúsculas y viceversa. Ejemplos . Estos ejemplos muestran diferentes resultados de ISLOWER(): ? ISLOWER("aBcDe") // Resultado:.T. ? ISLOWER("AbcDe") // Resultado:.F. ? ISLOWER("1abcd") // Resultado:.F. ? ISLOWER("abcd") // Resultado:.T. Ficheros: La biblioteca asociada es CLIPPER.LIB.
ISPRINTER() Determina si el puerto LPT1 est. preparado. ------------------------------------------------------------------------------ Sintaxis ISPRINTER() --> lPreparado Devuelve ISPRINTER() devuelve verdadero (.T.) si el puerto LPT1 est. preparado; en caso contrario devuelve falso (.F.). Descripción ISPRINTER() es una función de impresora que determina si el puerto paralelo LPT1 est. en línea y preparado para imprimir. ISPRINTER() es una función dependiente del hardware, por lo que sólo act.a en sistemas cuyo BIOS es compatible con IBM. Puede comprobar ISPRINTER() para asegurarse de que la impresora est. lista antes de empezar a imprimir. No obstante, si se produce un error durante la impresi.n, se genera un error de ejecución. Ejemplos . Este ejemplo comprueba si est. preparado el puerto paralelo, realizando hasta 25 reintentos. Si el puerto paralelo est. preparado, se inicia la operación.de impresión: LOCAL nCuenta := 0, nVeces := 25, lPrep // DO WHILE nCuenta++ <= nVeces.AND. !(lPrep := ; ISPRINTER()) ENDDO // IF lPrep REPORT FORM Ventas TO PRINTER ELSE ? "La impresora no est. preparada..." BREAK ENDIF Ficheros: La biblioteca asociada es EXTEND.LIB, el módulo fuente es SOURCE\SAMPLE\EXAMPLEA.ASM.
ISUPPER() Determina si el carácter inicial de una cadena de carácteres es una letra mayúscula ------------------------------------------------------------------------------ Sintaxis ISUPPER(<cCadena>) --> lBooleano Argumentos <cCadena> es la cadena de carácteres que se examina. Devuelve ISUPPER() devuelve verdadero (.T.) si el primer carácter es una letra mayúscula; en caso contrario devuelve falso (.F.). Descripción ISUPPER() es una función de carácteres que determina si el primer carácter de una cadena es una letra mayúscula. Es la función inversa de ISLOWER(). ISUPPER() e ISLOWER() están relacionadas con las funciónes UPPER() y LOWER() que convierten letras minúsculas en mayúsculas y viceversa. Ejemplos . Este ejemplo ilustra ISUPPER() aplicada a diferentes valores: ? ISUPPER("AbCdE") // Resultado:.T. ? ISUPPER("aBCdE") // Resultado:.F. ? ISUPPER("$abcd") // Resultado:.F. ? ISUPPER("8ABCD") // Resultado:.F. Ficheros: La biblioteca asociada es CLIPPER.LIB.
L2BIN() Convierte un valor numérico de CA-Clipper en un valor entero binario de 32 bits ------------------------------------------------------------------------------ Sintaxis L2BIN(<nExp>) --> cEnteroBinario Argumentos <nExp>es el valor numérico que se va a convertir. Los números decimales se truncan. Devuelve L2BIN() devuelve una cadena de carácteres de 4 bytes formateada como un entero binario de 32 bits. Descripción L2BIN() es una función de bajo nivel que se utiliza con FWRITE() para escribir valores numéricos de CA-Clipper en un fichero binario. Esta función es similar a I2BIN(), que formatea un valor numérico de CA-Clipper en un valor binario de 16 bits. L2BIN() es la función inversa de BIN2L(). Ejemplos . Este ejemplo crea un nuevo fichero binario y escribe una serie de números en los ficheros utilizando L2BIN() para convertir el valor numérico en un número binario de 32 bits: #include "Fileio.ch" // LOCAL nNúmero, nManejador nManejador := FCREATE("Fichero", FC_NORMAL) FOR nNúmero := 1 TO 100 FWRITE(nManejador, L2BIN(nNúmero) + CHR(0)) NEXT FCLOSE(nManejador) Ficheros: La biblioteca asociada es EXTEND.LIB, el módulo fuente es SOURCE\SAMPLE\EXAMPLEA.ASM.
LASTKEY() Devuelve el valor INKEY() de la .ltima tecla extra.da de la memoria intermedia del teclado ------------------------------------------------------------------------------ Sintaxis LASTKEY() --> nC.digoInkey Devuelve LASTKEY() devuelve un número entre -39 y 386, que identifica el valor INKEY() de la .ltima tecla extra.da de la memoria intermedia del teclado. Descripción LASTKEY() es una función de teclado que informa del valor INKEY() de la .ltima tecla recogida de la memoria intermedia del teclado por la función INKEY() o por un estado de espera como ACCEPT, INPUT, READ, WAIT, ACHOICE(), DBEDIT() o MEMOEDIT(). LASTKEY() conserva su valor actual hasta que se recoge otra tecla de la memoria intermedia del teclado. LASTKEY() permite: . Determinar la tecla que termina un READ. . Determinar la tecla que provoca la salida del objeto GET actual en una función definida por el usuario, invocada por una cláusula VALID. . Identificar una tecla de excepci.n en la función de usuario de ACHOICE(), DBEDIT() o MEMOEDIT(). LASTKEY() se utiliza también con la función UPDATED() para determinar si se ha modificado la memoria intermedia de alg.n objeto Get durante un READ. LASTKEY() se relaciona con NEXTKEY() y READKEY(). NEXTKEY() lee la tecla actual pendiente en la memoria intermedia del teclado sin eliminarla de la misma. Utilice NEXTKEY() en vez de INKEY() cuando desee consultar una tecla. Si desea una lista completa de los códigos de INKEY() y constantes de INKEY.CH para cada tecla, consulte la gu.a Mensajes de Error y Apííndices. Ejemplos . Este ejemplo muestra una aplicación t.pica de LASTKEY() para comprobar la tecla con la que se sale de un READ. Si el usuario sale con una tecla distinta de Esc y se ha modificado el objeto Get, se actualiza el fichero especificado de base de datos. #include "Inkey.ch" // USE Cliente NEW MEMVAR->balance = Cliente->Balance @ 10, 10 SAY "Balance Actual" GET MEMVAR->balance READ // IF (LASTKEY() != K_ESC).AND. UPDATED() REPLACE Cliente->Balance WITH MEMVAR->balance ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB, el fichero de cabecera asociado es Inkey.ch.
LASTREC() Determina el número de registros del fichero actual (.dbf) ------------------------------------------------------------------------------ Sintaxis LASTREC() | RECCOUNT()* --> nRegistros Devuelve LASTREC() devuelve el número de registros f.sicos en el fichero actual de base de datos, en forma de valor numérico entero. Los mandatos de filtrado como SET FILTER o SET DELETED no tienen efecto sobre el valor devuelto. LASTREC() devuelve cero si no hay ningún fichero de base de datos utilizado en el área de trabajo actual. Descripción LASTREC() es una función de base de datos que determina el número de registros f.sicos existentes en el fichero actual de base de datos. LASTREC() es id.ntica a RECCOUNT(), que se incluye por razones de compatibilidad. Por defecto, LASTREC() act.a en el área de trabajo actualmente seleccionada. Para que opere sobre un área de trabajo no seleccionada, debe especificarse como parte de una expresión de alias (consulte el ejemplo siguiente). Ejemplos . Este ejemplo muestra la relaci.n entre LASTREC(), RECCOUNT() y COUNT: USE Ventas NEW ? LASTREC(), RECCOUNT() // Resultado: 84 84 // SET FILTER TO Vendedor = "1001" COUNT TO nRegistros ? nRegistros, LASTREC() // Resultado: 14 84 . Este ejemplo utiliza una expresión de alias para acceder al número de registros de un fichero de base de datos abierto en un .rea de trabajo no seleccionada. USE Ventas NEW USE Cliente NEW ? LASTREC(), Ventas->(LASTREC()) Ficheros: La biblioteca asociada es CLIPPER.LIB.
LEFT() Extrae una subcadena comenzando en el primer carácter de una cadena ------------------------------------------------------------------------------ Sintaxis LEFT(<cCadena>, <nPosiciones>) --> cSubCadena Argumentos <cCadena> es la cadena de la que se extraen los carácteres. El tama.o máximo de <cCadena> es de 65.553 (64K) bytes. <nPosiciones> es el número de carácteres que se van a extraer. Devuelve LEFT() devuelve los <nPosiciones> carácteres m.s a la izquierda de <cCadena>, como una cadena de carácteres. Si <nPosiciones> es cero o negativo, LEFT() devuelve una cadena nula (""). Si <nPosiciones> es mayor que la longitud de la cadena de carácteres, LEFT() devuelve toda la cadena. Descripción LEFT() es una función de carácteres que devuelve una subcadena de la cadena de carácteres especificada. Es id.ntica a SUBSTR(<cCadena>,1,<nPosiciones>). LEFT() es similar a RIGHT(), que devuelve una subcadena comenzando por el último carácter de la misma. LEFT(), RIGHT() y SUBSTR() se utilizan con frecuencia con las funciónes AT() y RAT() para localizar la primera y/o .ltima posición de una subcadena antes de extraerla. Ejemplos . Este mandato extrae los tres primeros carácteres empezando por la izquierda de la cadena: ? LEFT("ABCDEF", 3) // Resultado: ABC . Este ejemplo extrae una subcadena comenzando por el principio de otra cadena, hasta la primera coma: LOCAL cNombre := "Jorge, Luis" ? LEFT(cNombre, AT(",", cNombre) - 1) // Resultado: // Jorge Ficheros: La biblioteca asociada es CLIPPER.LIB.
LEN() Devuelve la longitud de una cadena de carácteres o el número de elementos de una matriz ------------------------------------------------------------------------------ Sintaxis LEN(<cCadena> | <aDestáno>) --> nPosiciones Argumentos <cCadena> es la cadena de carácteres que se va a contar. <aDestáno> es la matriz que se va a contar. Devuelve LEN() devuelve la longitud de una cadena de carácteres o el número de elementos en una matriz, como un número entero. Si la cadena de carácteres es una cadena nula ("") o la matriz est. vac.a, LEN() devuelve cero. Descripción LEN() es una función de carácteres y matrices que devuelve la longitud de una cadena de carácteres o el número de elementos en una matriz. Con una cadena de carácteres, cada byte se cuenta como uno, incluyendo un byte nulo (CHR (0)). Por contra, una cadena nula ("") se cuenta como cero. Para una matriz, LEN() devuelve el número de elementos. Si la matriz es multidimensiónal, las submatrices se cuentan como un elemento. Esto quiere decir que el valor devuelto por LEN() para una matriz anidada o multidimensiónal es simplemente la longitud de la primera dimensión. Para determinar el número de elementos en otras dimensiónes, utilice LEN() en las submatrices como se muestra en el ejemplo siguiente. Recuerde que las matrices anidadas en CA-Clipper no necesitan tener dimensiónes uniformes. Ejemplos . Estos ejemplos muestran la utilización de LEN() con varios argumentos: ? LEN("cadena de carácteres") // Resultado: 20 ? LEN("") // Resultado: 0 ? LEN(CHR(0)) // Resultado: 1 // LOCAL aPrueba[10] ? LEN(aPrueba) // Resultado: 10 . Este ejemplo crea una matriz bidimensiónal de forma literal y devuelve el número de elementos en la submatriz contenida en el primer elemento de la matriz original: LOCAL aMatriz := { {1, 2}, {1, 2}, {1, 2} } ? LEN(aMatriz) // Resultado: 3 ? LEN(aMatriz[1]) // Resultado: 2 . Este ejemplo se desplaza por una matriz multidimensiónal utilizando LEN(): LOCAL aMatriz := { {1, 2}, {1, 2}, {1, 2} } LOCAL nFilas, nCols, nPosFilas, nPosCols // nPosFilas = LEN(aMatriz) FOR nFilas = 1 TO nPosFilas nPosCols = LEN(aMatriz[nFilas]) FOR nCols = 1 TO nPosCols ? nFilas, nCols, aMatriz[nFilas][nCols] NEXT NEXT . En este ejemplo, una función devuelve una matriz de valores numéricos que describe las dimensiónes de una matriz multidimensiónal anidada. La función supone que la matriz tiene dimensiónes uniformes: FUNCTION Dimensiones( aMatriz ) LOCAL aDims := {} DO WHILE ( VALTYPE(aMatriz) == "A" ) AADD( aDims, LEN(aMatriz) ) aMatriz := aMatriz[1] ENDDO RETURN (aDims) Ficheros: La biblioteca asociada es CLIPPER.LIB.
LOG() Calcula el logaritmo natural de un valor numérico ------------------------------------------------------------------------------ Sintaxis LOG(<nExp>) --> nLogNatural Argumentos <nExp> es el valor numérico mayor que cero que desea convertir en su logaritmo natural. Devuelve LOG() devuelve el logaritmo natural como un valor numérico. Si <nExp> es menor o igual a cero, LOG() devuelve un error de desbordamiento numérico (mostrado como una fila de asteriscos). Descripción LOG() es una función numérica que calcula el logaritmo natural de un número. Es la inversa de EXP(). Losólogaritmos naturales tienen como base el número e, que es igual a 2.7183 aproximadamente. La función LOG() devuelve x en la siguiente ecuaci.n: e**x = y donde y es la expresión numérica utilizada como argumento de LOG() (es decir, LOG(y) = x). Debido al redondeo matem.tico, los valores devueltos por LOG() y EXP() pueden no corresponderse exactamente (es decir, EXP(LOG(x)) puede no ser siempre igual a x). Ejemplos . Estos ejemplos muestran los resultados de diversos usos de LOG(): ? LOG(10) // Resultado: 2.30 ? LOG(10 * 2) // Resultado: 3.00 ? EXP(LOG(1)) // Resultado: 1.00 ? LOG(2.71) // Resultado: 1.00 . Este ejemplo es una función definida por el usuario que devuelve el logaritmo en base 10: FUNCTION Log10( nNúmero ) IF nNúmero > 0 RETURN LOG(nNúmero)/LOG(10) ELSE RETURN NIL ENDIF Ficheros: La biblioteca asociada es CLIPPER.LIB.
LOWER() Convierte en minúsculasólos carácteres en mayúsculas ------------------------------------------------------------------------------ Sintaxis LOWER(<cCadena>) --> cCadenaMin.sc Argumentos <cCadena> es la cadena de carácteres que desea convertir en minúsculas. Devuelve LOWER() devuelve una copia de <cCadena> con todos los carácteres alfabéticos en letras minúsculas. Los restántes carácteres permanecen inalterados en la cadena original. Descripción LOWER() es una función de carácteres que convierte cadenas en mayúsculas y mixtas en cadenas en minúsculas. Está relacionada con UPPER() que convierte cadenas en minúsculas y mixtas en cadenas en mayúsculas. LOWER() está relacionada con las funciónes ISLOWER() e ISUPPER() que determinan si una cadena comienza con un carácter en minúscula o mayúscula. LOWER() se utiliza normalmente para formatear una cadena de carácteres para su visualización en pantalla. Puede utilizarse también para normalizar cadenas en comparaciones que no diferencian mayúsculas y minúsculas o para la indexación con INDEX. Ejemplos . Estos ejemplos muestran los resultados de diferentes usos de LOWER(): ? LOWER("CADENA") // Resultado: cadena ? LOWER("1234 CARACTERES = ") // Resultado: 1234 carácteres = Ficheros: La biblioteca asociada es CLIPPER.LIB.
LTRIM() Elimina los espacios en blanco iniciales de una cadena de carácteres ------------------------------------------------------------------------------ Sintaxis LTRIM(<cCadena>) --> cCadenaRecortada Argumentos <cCadena> es la cadena de carácteres de la que desea eliminar los espacios iniciales en blanco. Devuelve LTRIM() devuelve una copia de <cCadena> sin los espacios iniciales en blanco. Si <cCadena> es una cadena nula ("") o est. formada por espacios, LTRIM() devuelve una cadena nula (""). Descripción LTRIM() es una función de carácteres que formatea cadenas de carácteres con espacios iniciales en blanco. Estas pueden ser, por ejemplo, números que se convierten en una cadena de carácteres útilizando STR(). LTRIM() está relacionada con RTRIM(), que elimina los espacios en blanco finales, y con ALLTRIM(), que elimina los espacios en blanco tanto iniciales como finales. Las funciónes inversas de ALLTRIM(), LTRIM() y RTRIM() son PADC(), PADR() y PADL() que centran, justifican a la derecha o a la izquierda, respectivamente, la cadena de carácteres a.adiendo carácteres de relleno. Ejemplos . Estos ejemplos muestran los resultados de diferentes usos de la función LTRIM(): nNúmero = 18 ? STR(nNúmero) // Resultado: 18 ? LEN(STR(nNúmero)) // Resultado: 10 ? LTRIM(STR(nNúmero)) // Resultado: 18 ? LEN(LTRIM(STR(nNúmero))) // Resultado: 2 Ficheros: La biblioteca asociada es CLIPPER.LIB.
LUPDATE() Devuelve la fecha de la .ltima modificaci.n de un fichero (.dbf) ------------------------------------------------------------------------------ Sintaxis LUPDATE() --> fModificaci.n Devuelve LUPDATE() devuelve la fecha del último cambio realizado en el fichero de base de datos abierto en al área de trabajo actual. Si no se est. utilizando ningún fichero de base de datos, LUPDATE() devuelve una fecha en blanco. Descripción LUPDATE() es una función de base de datos que determina la fecha en la que modific. y cerr. mediante CLOSE por .ltima vez el fichero de base de datos del área de trabajo actual. Por defecto, LUPDATE() act.a en el área de trabajo actualmente seleccionada. Para que opere en un .rea de trabajo no seleccionada, debe especificarse en una expresión de alias, como se muestra en un ejemplo posterior. Ejemplos . Este ejemplo muestra que la fecha de modificaci.n de un fichero de base de datos no cambia hasta que se cierra el fichero: ? DATE() // Resultado: 09/01/90 USE Ventas NEW ? LUPDATE() // Resultado: 08/31/90 // APPEND BLANK ? LUPDATE() // Resultado: 08/31/90 CLOSE DATABASES // USE Ventas NEW ? LUPDATE() // Resultado: 09/01/90 . Este ejemplo utiliza una expresión de alias para acceder a un fichero de base de datos abierto en un área de trabajo no seleccionada: USE Ventas NEW USE Cliente NEW ? LUPDATE(), Ventas->(LUPDATE()) Ficheros: La biblioteca asociada es EXTEND.LIB.