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 Record
definido 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.