Ler a partir do arquivo de dados

Lê dados de um arquivo de dados aberto.

Opções 

  • ID do arquivo é uma expressão numérica que especifica a ID do arquivo de um arquivo de dados aberto. Consulte Etapa de script Abrir arquivo de dados.
  • Valor especifica o número de bytes a ser lido caso Ler como seja UTF-8 ou Bytes. Para UTF-16, Valor é o número de unidades do código Unicode a ser lido. Se Valor não for especificado (definido como nada), o arquivo todo será lido.
  • Destino é o campo ou a variável para armazenar a leitura de dados do arquivo.
  • Ler como especifica a codificação de caracteres do arquivo.
    • UTF-16 é a codificação de caracteres Unicode (UTF-16 little endian) de 16 bits padrão do FileMaker.
    • UTF-8 é a codificação de caracteres Unicode de 8 bits.
    • Bytes pressupõe que não há codificação de caracteres específica, mas que é feita a leitura de um byte por vez. Se o destino for uma variável ou um campo de container, a leitura de dados de um arquivo será armazenada como dados de container com o mesmo nome de arquivo que o arquivo especificado.

Compatibilidade 

Produto Compatível
FileMaker Pro Sim
FileMaker Go Sim
FileMaker WebDirect Não
FileMaker Server Sim
FileMaker Cloud Sim
FileMaker Data API Não
Publicação na Web personalizada Sim

Originada na versão 

18.0

Descrição 

A etapa de script lê dados especificados por Valor, começando na posição atual de leitura-gravação, ou lê o arquivo inteiro caso Valor não seja especificado. Consulte Definir posição do arquivo de dados.

O valor máximo de dados que esta etapa de script pode ler no momento é 64 MB. Se o arquivo for maior que 64 MB, você poderá realizar esta etapa de script muitas vezes, lendo um valor que não seja maior que 64 MB por vez.

Notas 

  • O desempenho é melhor ao ler não mais que 64 KB.
  • Ao ler o texto Unicode de uma porção de um arquivo, somente uma parte de um caractere poderá ser lida caso o caractere consista em várias unidades de código. Se você quiser ler o texto de um arquivo UTF-8 ou UTF-16, pode ser mais seguro ler o arquivo todo de uma vez, a não ser que você tenha certeza do número de pontos de código por caractere.

Exemplo 1 

Lê o conteúdo de um arquivo aberto com um ID de arquivo de 2 e armazena os dados em uma variável.

Copiar
Ler a partir do arquivo de dados [ ID do arquivo: 2 ; Quantidade (bytes): ; Destino: $variable ; Ler como: Bytes ]

Exemplo 2 

Verifica se um arquivo chamado change.log existe na pasta Documentos. Se existir, lê as primeiras 100 unidades de código UTF-8 no campo de texto Utilitários::Entrada de log.

Copiar
Definir variável [ $file ; Valor: Get ( DocumentsPath ) & "change.log" ]
Obter arquivo existente [ "$file" ; Destino: $fileExists ]
If [ not $fileExists ]
    Sair do script [ Resultado do texto: ]
End If
Abrir arquivo de dados [ "$file" ; Destino: $fileID ]
Ler a partir do arquivo de dados [ ID do arquivo: $fileID ; Quantidade (bytes): 100 ; Destino: Utilitários::Entrada de log ; Ler como: UTF-8 ]
Fechar arquivo de dados [ ID do arquivo: $fileID ]

Exemplo 3 

Se o arquivo large.log existir e for grande, lê o arquivo 64 MB por vez em uma variável até que todo o arquivo seja lido. Se o arquivo for menor, lê todo o arquivo em uma operação de leitura. Os dados são lidos em uma variável para melhorar o desempenho e depois armazenados em um campo.

Copiar
Definir captura de erro [ Ativado ]
Definir variável [ $k_FileMissingError ; Valor: 100 ] 
Definir variável [ $k_EndOfFileError ; Valor: 10 ]
Definir variável [ $k_64KB ; Valor: 64 * 1024 ]
Definir variável [ $k_64MB ; Valor: 64 * 1024 * 1024 ]
Definir variável [ $file ; Valor: "large.log" ]
Obter arquivo existente [ "$file" ; Destino : $fileExists ]
If [ $fileExists = 0 ]
    Sair do script [ Resultado: $k_FileMissingError ]
End If

Abrir arquivo de dados [ "$file" ; Destino: $fileID ] 

#Se o arquivo tiver sido aberto corretamente, lê o conteúdo.
If [ Get ( LastError ) = 0 ]
    Obter tamanho de arquivo [ "$file" ; Destino: $fileSize ]

    #Se o tamanho do arquivo for maior que 64 KB, lê 64 MB por vez.
    If [ $fileSize > $k_64KB ]

        Loop
            #Lê até 64 MB e armazena-os em uma variável.
            Ler a partir do arquivo de dados [ ID do arquivo: $fileID ; Quantidade (bytes): $k_64MB ; Destino: $dataChunk ; Ler como: UTF-8 ]
            Definir variável [ $readError; Valor:Get ( LastError ) ]

            #Se a operação de leitura tiver sido bem-sucedida ou se o final do arquivo tiver sido atingido, concatene a leitura de dados nessa passagem ($dataChunk) com a leitura de dados anterior ($fileContents).
            If [ ( $readError = 0 ) ou ( $readError = $k_EndOfFileError ) ]
                Definir variável [ $fileContents ; Valor: $fileContents & $dataChunk ]
            End If

            #Sai do loop se a operação de leitura falhar ou se o final do arquivo tiver sido atingido.
            Exit Loop If [ $readError ]
        End Loop

    Else
        #Se o arquivo não for maior que 64 KB, lê todo ele de uma vez.
        Ler a partir do arquivo de dados [ ID do arquivo: $fileID ; Destino: $fileContents ; Ler como: UTF-8 ]
    End If

    #Fecha o arquivo de dados e armazena o conteúdo em um campo.
    Fechar arquivo de dados [ ID do arquivo: $fileID ]
    Definir campo [ Tabela::Dados ; $fileContents ]

End If