Leer desde el archivo de datos

Lee datos desde un archivo de datos abierto.

Opciones 

  • ID de archivo es una expresión numérica que especifica el ID del archivo de un archivo de datos abierto. Consulte paso de guión Abrir archivo de datos.
  • Cantidad especifica el número de bytes que leer si Leer como es UTF-8 o Bytes. Para UTF-16, Cantidad es el número de unidades de código Unicode que leer. Si la Cantidad no está especificada (establecida en nada), se lee el archivo completo.
  • Destino es el campo o la variable para almacenar los datos leídos del archivo.
  • Leer como especifica la codificación de caracteres del archivo.
    • UTF-16 es la codificación de caracteres Unicode de 16 bits (UTF-16 little endian) predeterminada de FileMaker.
    • UTF-8 es una codificación de caracteres Unicode de 8 bits.
    • Bytes no asume ninguna codificación de caracteres específica, sino que lee un byte cada vez. Si el destino es una variable o un campo contenedor, los datos leídos del archivo se almacenan como datos de contenedor con el mismo nombre de archivo que el archivo especificado.

Compatibilidad 

Producto Compatible
FileMaker Pro
FileMaker Go
FileMaker WebDirect No
FileMaker Server
FileMaker Cloud
FileMaker Data API No
Publicación en la Web personalizada

Se origina en 

18.0

Descripción 

Este paso de guion lee los datos especificados por Cantidad empezando en la posición actual de lectura/escritura, o lee el archivo completo si no se especifica la Cantidad. Consulte Establecer posición del archivo de datos.

La cantidad máxima de datos que puede leer a la vez este paso de guion es de 64 MB. Si un archivo tiene más de 64 MB, puede realizar este paso de guion varias veces, leyendo una cantidad que no supere los 64 MB cada vez.

Notas 

  • El rendimiento es mejor cuando no se lee más de 64 KB.
  • Al leer texto Unicode de una parte de un archivo, solo se puede leer parte de un carácter si dicho carácter consiste en varias unidades de código. Si espera leer texto de un archivo UTF-8 o UTF-16, puede ser más seguro leer todo el archivo a la vez, a menos que esté seguro del número de puntos de código por carácter.

Ejemplo 1 

Lee el contenido de un archivo abierto con un ID de archivo de 2 y almacena los datos en una variable.

Copiar
Leer desde archivo de datos [ ID de archivo: 2 ; Cantidad (bytes): ; Destino: $variable ; Leer como: Bytes ]

Ejemplo 2 

Comprueba si en la carpeta de Documentos existe un archivo llamado change.log. Si no existe, lee las primeras 100 unidades de código UTF-8 del campo de texto Utilidades::Entradas de registro.

Copiar
Establecer variable [ $file ; Valor: Get ( DocumentsPath ) & "change.log" ]
Obtener archivo existente [ "$file" ; Destino: $fileExists ]
If [ not $fileExists ]
    Salir del guión [ Resultado de texto: ]
End If
Abrir archivo de datos [ "$file" ; Destino: $fileID ]
Leer desde archivo de datos [ ID de archivo: $fileID ; Cantidad (bytes): 100 ; Destino: Utilidades::Entrada de registro ; Leer como: UTF-8 ]
Cerrar Archivo de datos [ID de archivo: $fileID ]

Ejemplo 3 

Si existe el archivo large.log y es grande, lee el archivo de 64 MB a la vez en una variable hasta que se lea el archivo completo. Si el archivo es más pequeño, lee todo el archivo en una operación de lectura. Los datos se leen en una variable para obtener un mejor rendimiento para, después, almacenarse en un archivo.

Copiar
Establecer captura de errores [ Activo ]
Establecer variable [ $k_FileMissingError ; Valor: 100 ] 
Establecer variable [ $k_EndOfFileError ; Valor: 10 ]
Establecer variable [ $k_64KB ; Valor: 64 * 1024 ]
Establecer variable [ $k_64MB ; Valor: 64 * 1024 * 1024 ]
Establecer variable [ $file; Valor: "large.log" ]
Obtener archivo existente [ "$file" ; Destino : $fileExists ]
If [ $fileExists = 0 ]
    Salir del guion [ Resultado: $k_FileMissingError ]
End If

Abrir archivo de datos [ "$file" ; Destino: $fileID ] 

#Si el archivo se abre correctamente, leer el contenido.
If [ Get ( LastError ) = 0 ]
    Obtener tamaño de archivo [ "$file" ; Destino: $tamañoArchivo ]

    #Si el tamaño de archivo es superior a 64 KB, leerlo 64 MB a la vez.
    If [ $tamañoArchivo > $k_64KB ]

        Loop
            #Leer hasta 64 MB y almacenarlo en una variable.
            Leer desde archivo de datos [ ID de archivo: $fileID ; Cantidad (bytes): $k_64MB ; Destino: $dataChunk ; Leer como: UTF-8 ]
            Establecer variable [ $leerError; Valor:Get ( LastError ) ]

            #Si la operación de lectura tiene éxito o si se alcanza el final del archivo, concatenar los datos leídos en este pase ($dataChunk) con los datos leídos anteriormente ($fileContents).
            Si [ ( $leerError = 0 ) o ( $leerError = $k_EndOfFileError ) ]
                Establecer variable [ $fileContents ; Value: $fileContents & $dataChunk ]
            End If

            #Salir del bucle si la operación de lectura falla o si se llega al final del archivo.
            Exit Loop If [ $leerError ] ]
        End Loop

    Else
        #Si el archivo no es superior a 64 KB, leerlo todo de una vez.
        Leer desde archivo de datos [ ID de archivo: $fileID ; Destino: $fileContents ; Leer como: UTF-8 ]
    End If

    #Cerrar el archivo de datos y almacenar el contenido en un campo.
    Cerrar Archivo de datos [ID de archivo: $fileID ]
    Establecer campo [ Tabla::Datos ; $fileContents ]

End If