Instrução Get

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

Sintaxe

Obter [ # ] filenumber, [ recnumber ], varname

A sintaxe Obter instrução tem estas partes:

Sair Descrição
númerodoarquivo Obrigatório. Qualquer número de arquivo válido.
renumeração Opcional. Variant (Long). Número de registro (arquivos de modo aleatório ) ou número de bytes (arquivos de modo binário ) no qual a leitura começa.
nomedavariável Obrigatório. Nome de 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 o renumeração, 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 de 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 do que o comprimento especificado na cláusula Len da instrução Open , Obter lerá registros subsequentes em limites de comprimento de registro. O espaço entre o final de um registro e o início do próximo registro é acolchoado 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 em que está sendo lida for uma cadeia de caracteres de comprimento variável, Get lerá um descritor de 2 bytes que contém o comprimento da cadeia de caracteres e lerá os dados que vão para a variável. Portanto, o comprimento de registro especificado pela cláusula Len na instrução Open deve ser pelo menos 2 bytes maiores que o comprimento real da cadeia de caracteres.

  • Se a variável que está sendo lida for uma Variant do tipo numérico, get lê 2 bytes identificando o VarType da Variant e, em seguida, os dados que vão para a variável. Por exemplo, ao ler uma Variante do VarType 3, Get lê 6 bytes: 2 bytes identificando a Variant como VarType 3 (Long) e 4 bytes que contêm 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 Variante escalar contendo uma matriz. Você também não pode usar o Get to read objects from disk.

  • Se a variável que está sendo lida for uma Variant de VarType 8 (String), Get lê 2 bytes identificando o VarType, 2 bytes indicando o comprimento da cadeia de caracteres e, em seguida, lê 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 seguinte declaração de matriz 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 maneira: 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), Obter 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.

  • Obtenha elementos de leitura de tipos definidos pelo usuário como se cada um estivesse sendo lido individualmente, exceto que não há preenchimento entre elementos. No disco, uma matriz dinâmica em um tipo definido pelo usuário (escrita 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. Obter leituras de todas as variáveis do disco de forma contígua; ou seja, sem preenchimento entre registros.

  • Para qualquer matriz diferente de uma matriz em um tipo definido pelo usuário, Get lê apenas os dados. Nenhum descritor é lido.

  • Obtenha leituras de 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 já na cadeia de caracteres. Por exemplo, as seguintes instruções 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 TESTFILE contém cinco registros do tipo definido pelo usuário é um arquivo que 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.