Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Grava dados de uma variável em um arquivo de disco.
Sintaxe
Put [ # ] filenumber, [ recnumber ], varname
A sintaxe da instrução Put 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 gravação começa. |
| nomedavariável | Obrigatório. Nome da variável que contém os dados a serem gravados em disco. |
Comentários
Os dados gravados com Put geralmente são lidos de um arquivo com Get.
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ção Get ou Put , ou apontado pela última função Seek , será gravado. Você deve incluir vírgulas delimitadoras, por exemplo:
Put #4,,FileBuffer
Para arquivos abertos no modo Aleatório , as seguintes regras se aplicam:
Se o comprimento dos dados que estão sendo gravados for menor que o comprimento especificado na cláusula Len da instrução Open , Put gravará 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 é 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 gravados. Se o comprimento dos dados que estão sendo gravados for maior que o comprimento especificado na cláusula Len da instrução Open , ocorrerá um erro.
Se a variável que está sendo gravada for uma cadeia de caracteres de comprimento variável, Put gravará um descritor de 2 bytes contendo o comprimento da cadeia de caracteres e, em seguida, a variável. 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 gravada for uma Variant de um tipo numérico, Put gravará 2 bytes identificando o VarType da Variant e, em seguida, gravará a variável. Por exemplo, ao escrever uma Variant de VarType 3, Put grava 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 Put para gravar uma matrizVariant no disco, mas você não pode usar Put para gravar uma Variant escalar contendo uma matriz no disco. Você também não pode usar Put para gravar objetos no disco.
Se a variável que está sendo gravada for uma Variant de VarType 8 (String), Put gravará 2 bytes identificando o VarType, 2 bytes indicando o comprimento da cadeia de caracteres e, em seguida, gravará 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 gravada for uma matriz dinâmica, Put gravará 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 gravar 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 IntegerOs 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 gravada for uma matriz de tamanho fixo, Put gravará apenas os dados. Nenhum descritor é gravado em disco.
Se a variável que está sendo gravada for qualquer outro tipo de variável (não uma cadeia de caracteres de comprimento variável ou uma Variant), Put gravará 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 gravados.
Put grava elementos de tipos definidos pelo usuário como se cada um fosse escrito individualmente, exceto que não há preenchimento entre os elementos. No disco, uma matriz dinâmica em um tipo definido pelo usuário escrito 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 gravar 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. Put grava todas as variáveis no 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, Put grava apenas os dados. Nenhum descritor está escrito.
Put grava cadeias de caracteres de comprimento variável que não são elementos de tipos definidos pelo usuário sem o descritor de comprimento de 2 bytes. O número de bytes gravados é igual ao número de caracteres na cadeia de caracteres. Por exemplo, as instruções a seguir gravam 10 bytes no arquivo número 1:
VarString$ = String$(10," ") Put #1,,VarString$
Exemplo
Este exemplo usa a instrução Put para gravar dados em um arquivo. Cinco registros do tipo definido pelo usuário são gravados no arquivo.
Type Record ' Define user-defined type.
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record, RecordNumber ' Declare variables.
' Open file for random access.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
For RecordNumber = 1 To 5 ' Loop 5 times.
MyRecord.ID = RecordNumber ' Define ID.
MyRecord.Name = "My Name" & RecordNumber ' Create a string.
Put #1, RecordNumber, MyRecord ' Write record to file.
Next RecordNumber
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.