Compartilhar via


Instrução Get

Lê dados de um ficheiro de disco aberto numa variável.

Sintaxe

Get [ # ] filenumber, [ recnumber ], varname

A sintaxe da instrução Get tem as seguintes partes:

Sair Descrição
númerodoarquivo Obrigatório. Qualquer número de arquivo válido.
renumeração Opcional. Variante (Longo). Número de registo (ficheiros de modo aleatório ) ou número de byte (ficheiros 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

Normalmente, os dados lidos com Get são escritos num ficheiro com Put. O primeiro registo ou byte num ficheiro está na posição 1, o segundo registo ou byte está na posição 2 e assim sucessivamente. Se omitir renumeração, o registo ou byte seguinte após a última instruçãoGet ou Put (ou apontado para pela última função Seek) é lido. Tem de incluir vírgulas delimitador, por exemplo:

Get #4,,FileBuffer 

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

  • Se o comprimento dos dados que estão a ser lidos for inferior ao comprimento especificado na cláusula Len da instrução Open , Obter lê os registos subsequentes em limites de comprimento de registo. O espaço entre o fim de um registo e o início do registo seguinte é acolchoado com o conteúdo existente da memória intermédia de ficheiros. Uma vez que a quantidade de dados de preenchimento não pode ser determinada com certeza, é geralmente boa ideia que o comprimento do registo corresponda ao comprimento dos dados que estão a ser lidos.

  • Se a variável em que está a ser lida for uma cadeia de comprimento variável, Obter lê um descritor de dois bytes que contém o comprimento da cadeia e, em seguida, lê os dados que vão para a variável. Por conseguinte, o comprimento do registo especificado pela cláusula Len na instrução Open tem de ser, pelo menos, 2 bytes maior do que o comprimento real da cadeia.

  • Se a variável em que está a ser lida for uma Variante do tipo numérico, obtenha 2 bytes de leitura que identifiquem o VarType da Variante e, em seguida, os dados que vão para a variável. Por exemplo, ao ler uma Variante de VarType 3, Obtenha leituras de 6 bytes: 2 bytes que identificam a Variante como VarType 3 (Longo) e 4 bytes que contêm os dados Longos . O comprimento do registo especificado pela cláusula Len na instrução Open tem de ser, pelo menos, 2 bytes superior ao número real de bytes necessários para armazenar a variável.

    Observação

    Utilize a instrução Get para ler uma matrizVariante a partir do disco, mas não pode utilizar Obter para ler uma Variante escalar que contenha uma matriz. Também não pode utilizar Obter para ler objetos a partir do disco.

  • Se a variável em que está a ser lida for uma Variante de VarType 8 (Cadeia), Obtenha leituras de 2 bytes que identifiquem o VarType, 2 bytes que indicam o comprimento da cadeia e, em seguida, lê os dados da cadeia. O comprimento do registo especificado pela cláusula Len na instrução Open tem de ser, pelo menos, 4 bytes superior ao comprimento real da cadeia.

  • Se a variável em que está a ser lida for uma matriz dinâmica, Obter lê um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registo especificado pela cláusula Len na instrução Open tem de ser maior ou igual à soma de todos os bytes necessários para ler os dados da matriz e o descritor de matriz. Por exemplo, a seguinte declaração de matriz requer 118 bytes quando a matriz é escrita no 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á a ser lida for uma matriz de tamanho fixo, Obter lê apenas os dados. Não é lido nenhum descritor.

  • Se a variável em que está a ser lida for qualquer outro tipo de variável (não uma cadeia de comprimento variável ou uma Variante), Obter lê apenas os dados da variável. O comprimento do registo especificado pela cláusula Len na instrução Open tem de ser maior ou igual ao comprimento dos dados que estão a ser lidos.

  • Obtenha elementos de leitura de tipos definidos pelo utilizador como se cada um estivesse a ser lido individualmente, exceto que não existe preenchimento entre elementos. No disco, uma matriz dinâmica num tipo definido pelo utilizador (escrita com Put) tem o prefixo de um descritor cujo comprimento é igual a 2 mais 8 vezes o número de dimensões, ou seja, 2 + 8 * NumberOfDimensions. O comprimento do registo especificado pela cláusula Len na instrução Open tem de ser maior ou igual à soma de todos os bytes necessários para ler os elementos individuais, incluindo quaisquer matrizes e respetivos descritores.

Para ficheiros abertos no modo Binário , aplicam-se todas as regras Aleatórias , exceto:

  • A cláusula Len na instrução Open não tem efeito. Obter leituras de todas as variáveis do disco contíguamente; ou seja, sem preenchimento entre registos.

  • Para qualquer matriz que não seja uma matriz num tipo definido pelo utilizador, Obter lê apenas os dados. Não é lido nenhum descritor.

  • Obtenha cadeias de comprimento variável de leitura que não sejam elementos de tipos definidos pelo utilizador sem esperar o descritor de comprimento de 2 bytes. O número de bytes lidos é igual ao número de carateres já existentes na cadeia. Por exemplo, as seguintes instruções leem 10 bytes do ficheiro número 1:

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

Exemplo

Este exemplo utiliza a instrução Get para ler dados de um ficheiro numa variável. Este exemplo pressupõe que se trata de um ficheiro que TESTFILE contém cinco registos do tipo definido pelo utilizador é um ficheiro que contém cinco registos do tipo Recorddefinido pelo utilizador .

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.