Instrução Get

Lê dados de um arquivo de disco aberto em uma variável.

Sintaxe

Get [ # ] filenumber, [ recnumber ], varname

A sintaxe da instrução Get tem estas partes:

Sair Descrição
númerodoarquivo Obrigatório. Qualquer número de arquivo válido.
RecNumber Opcional. Variante (longa). Número de registro (arquivos de modo aleatório ) ou número de byte (arquivos de modo binário ) no qual a leitura começa.
nomedavariável Obrigatório. Nome da variável válido no qual os dados são lidos.

Comentários

Os dados lidos com Get geralmente são gravados em um arquivo com Put. O primeiro registro ou byte em um arquivo está na posição 1, o segundo registro ou byte está na posição 2 e assim por diante. Se você omitir renumber, o próximo registro ou byte após a última instruçãoGet ou Put (ou apontado pela última função Seek) será lido. Você deve incluir vírgulas delimitadoras, por exemplo:

Get #4,,FileBuffer 

Para arquivos abertos no modo Aleatório , as seguintes regras se aplicam:

  • Se o comprimento dos dados que estão sendo lidos for menor que o comprimento especificado na cláusula Len da instrução Open , Get lerá os registros subsequentes nos limites de comprimento de registro. O espaço entre o final de um registro e o início do próximo registro é preenchido com o conteúdo existente do buffer de arquivo. Como a quantidade de dados de preenchimento não pode ser determinada com certeza, geralmente é uma boa ideia fazer com que o comprimento do registro corresponda ao comprimento dos dados que estão sendo lidos.

  • Se a variável que está sendo lida for uma cadeia de caracteres de comprimento variável, Get lerá um descritor de 2 bytes contendo o comprimento da cadeia de caracteres e, em seguida, lerá os dados que entrarão na variável. Portanto, o comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maior que o comprimento real da cadeia de caracteres.

  • Se a variável que está sendo lida for uma Variant do tipo numérico, Get lerá 2 bytes identificando o VarType da Variant e, em seguida, os dados que vão para a variável. Por exemplo, ao ler uma Variant de VarType 3, Get lê 6 bytes: 2 bytes identificando a Variant como VarType 3 (Long) e 4 bytes contendo os dados Long . O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maior do que o número real de bytes necessários para armazenar a variável.

    Observação

    Use a instrução Get para ler uma matrizVariant do disco, mas você não pode usar Get para ler uma Variant escalar contendo uma matriz. Você também não pode usar o Get para ler objetos do disco.

  • Se a variável que está sendo lida for uma Variant de VarType 8 (String), Get lerá 2 bytes identificando o VarType, 2 bytes indicando o comprimento da cadeia de caracteres e, em seguida, lerá os dados da cadeia de caracteres. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser pelo menos 4 bytes maior que o comprimento real da cadeia de caracteres.

  • Se a variável que está sendo lida for uma matriz dinâmica, Get lerá um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual à soma de todos os bytes necessários para ler os dados da matriz e o descritor da matriz. Por exemplo, a declaração de matriz a seguir requer 118 bytes quando a matriz é gravada em disco.

      Dim MyArray(1 To 5,1 To 10) As Integer 
    

    Os 118 bytes são distribuídos da seguinte forma: 18 bytes para o descritor (2 + 8 * 2) e 100 bytes para os dados (5 * 10 * 2).

  • Se a variável que está sendo lida for uma matriz de tamanho fixo, Get lerá apenas os dados. Nenhum descritor é lido.

  • Se a variável que está sendo lida for qualquer outro tipo de variável (não uma cadeia de caracteres de comprimento variável ou uma Variant), Get lerá apenas os dados da variável. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual ao comprimento dos dados que estão sendo lidos.

  • Get lê elementos de tipos definidos pelo usuário como se cada um estivesse sendo lido individualmente, exceto que não há preenchimento entre os elementos. No disco, uma matriz dinâmica em um tipo definido pelo usuário (gravada com Put) é prefixada por um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registro especificado pela cláusula Len na instrução Open deve ser maior ou igual à soma de todos os bytes necessários para ler os elementos individuais, incluindo quaisquer matrizes e seus descritores.

Para arquivos abertos no modo binário , todas as regras aleatórias se aplicam, exceto:

  • A cláusula Len na instrução Open não tem efeito. Get lê todas as variáveis do disco de forma contígua; ou seja, sem preenchimento entre os registros.

  • Para qualquer matriz que não seja uma matriz em um tipo definido pelo usuário, Get lê apenas os dados. Nenhum descritor é lido.

  • Get lê cadeias de caracteres de comprimento variável que não são elementos de tipos definidos pelo usuário sem esperar o descritor de comprimento de 2 bytes. O número de bytes lidos é igual ao número de caracteres que já estão na cadeia de caracteres. Por exemplo, as instruções a seguir leem 10 bytes do arquivo número 1:

      VarString = String(10," ") 
      Get #1,,VarString 
    
    

Exemplo

Este exemplo usa a instrução Get para ler dados de um arquivo em uma variável. Este exemplo pressupõe que um arquivo que contém cinco registros do tipo definido pelo usuário é um arquivo que TESTFILE contém cinco registros do tipo Recorddefinido pelo usuário.

Type Record ' Define user-defined type. 
 ID As Integer 
 Name As String * 20 
End Type 
 
Dim MyRecord As Record, Position ' Declare variables. 
' Open sample file for random access. 
Open "TESTFILE" For Random As #1 Len = Len(MyRecord) 
' Read the sample file using the Get statement. 
Position = 3 ' Define record number. 
Get #1, Position, MyRecord ' Read third record. 
Close #1 ' Close file. 

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.