Árvore de páginas

Sintaxis

 

FREAD( <expresión numérica 1>, @<variable carácter>, <expresión numérica 2> )

 

 

Propósito

 

Lee caracteres de un archivo binario, almacenándolos en una variable de memoria tipo carácter y suministrando el número de bytes leídos.

 

 

Argumentos

 

< expresión numérica >

 

Define el número de manejo que identifica el archivo que se leerá. Este número se obtiene por medio de las funciones FOPEN() o FCREATE().

 

< variable carácter>

 

Define el nombre de una variable carácter existente e iniciada, pasada por referencia por medio del prefijo @, para utilizarla como un buffer de lectura. El tamaño de esta variable debe ser, como mínimo, el mismo definido por la expresión numérica 2. Cada carácter leído a partir del archivo especificado se almacenará en esta variable.

 

< expresión numérica 2>

 

Define el número de bytes que se leerán y almacenarán en el buffer, que se inicia en la ubicación actual del puntero de archivos. El valor suministrado por la función FREAD(), cuando la operación de lectura tenga éxito, debe ser igual al valor de la expresión numérica 2. Un valor menor o cero indica que se encontró el final del archivo o simplemente ocurrió algún error de lectura.

 

 

Utilización

 

El FREAD() lee cualquier tipo de carácter contenido en el archivo, incluso caracteres de control, carácter nulo (“”) o caracteres con código ASCII superior al CHR(127).

 

Para posicionar nuevamente el puntero de archivos binarios sin hacer una lectura, se debe utilizar la función FSEEK().

 

 

Sugerencias

 

Las funciones FREADSTR() y FSEEK() están vinculados a la función FREAD(). La función FREADSTR() lee un determinado número de bytes de un archivo binario hasta que se encuentre el carácter CHR(0). La función FSEEK() sólo mueve el apuntador de archivo, sin efectuar ninguna lectura.

 

Cuando ocurra un error de lectura del archivo, la función FREAD() suministrará el valor 0. En este caso la función FERROR() se puede utilizar para determinar el tipo de error ocurrido. Por ejemplo, si FREAD() suministra el valor cero y FERROR() suministra el valor 6, significa que el número especificado para identificar el archivo no es válido. Consulte la función FERROR() para verificar la lista de errores.

 

 

Ejemplos

 

El siguiente ejemplo lee un bloque de caracteres con 128 bytes del archivo Teste.txt.

 

LOCAL nBloco := 128

LOCAL cBuffer := SPACE(512)

LOCAL cArq     := FOPEN(“Teste.txt”)     // Abre el archivo binario

LOCAL nBytes := 0

 

IF FERROR <> 0

          MsgAlert(“Error al acceder al archivo nº “ + STR(FERROR()))

 

          RETURN

ELSE
          nBytes := FREAD(cArq, @cBuffer, nBloco)      // Lee los bytes

 

          IF nBytes <> nBloco

                    MsgAlert(“Error de lectura nº “ + STR(FERROR()))

 

                    RETURN

          ELSE

                    MsgAlert(nBytes)     // Muestra los bytes leídos

          ENDIF

ENDIF

  • Sem rótulos

1 comentário

  1. Debe ser aclarado que la lectura binaria de los bytes con valor por encima del ASCII 127, es con formato ANSI, por lo que un archivo de entrada codificado en UTF-8, UCS-2 en Little o big endian a ser leído el carácter Ñ por ejemplo n UTF-8, se traducirá en ANSI como ô aunque el tamaño de buffer de lectura se mantenga con el mismo tamaño indicado en el 3er parámetro, al ejecutarse una nueva lectura de FREAD() considerará el valor ANSI del carácter Ñ como ô y si se mantiene el mismo tamaño de buffer, tendrá 1 carácter de desplazamiento hacia adelante provocando por ejemplo, que en el siguiente valor de buffer de lectura devuelto contenga el carácter especial LF de la línea previa.