Put (instrucción)

Escribe datos desde una variable en un archivo de disco.

Sintaxis

Put [ # ] filenumber, [ recnumber ], varname

La sintaxis de la instrucción Put tiene estas partes:

Parte Descripción
númeroArchivo Obligatorio. Cualquier número de archivo válido.
recnumber Opcional. Variant (Long). Número de registro (archivos de modo Random ) o número de byte (archivos de modo Binary) en el que comienza la escritura.
varname Obligatorio. Nombre de la variable que contiene los datos que se van a escribir en el disco.

Comentarios

Los datos escritos con Put suelen leerse desde un archivo con Get.

El primer registro o byte de un archivo se encuentra en la posición 1, el segundo registro o byte se encuentra en la posición 2, etc. Si omite recnumber, se escribe el siguiente registro o byte después de la última instrucción Get o Put , o al que apunta la última función Seek . Debe incluir comas de delimitación, por ejemplo:

Put #4,,FileBuffer 

Para los archivos abiertos en el modo Random, se aplican las siguientes reglas:

  • Si la longitud de los datos que se escriben es menor que la longitud especificada en la cláusula Len de la instrucción Open , Put escribe registros posteriores en los límites de longitud de registro. El espacio comprendido entre el final de un registro y el comienzo del siguiente se rellena con el contenido existente del búfer de archivos. Dado que la cantidad de datos no se puede determinar con ninguna certeza, suele ser buena idea que la longitud de registro coincida con la longitud de los datos que se están escribiendo. Si la longitud de los datos que se está escribiendo es mayor que la longitud especificada en la cláusula Len de la instrucción Open, se produce un error.

  • Si la variable que se está escribiendo en una cadena de longitud de variable, Put escribe un descriptor de 2 bytes que contiene la longitud de la cadena y, a continuación, la variable. La longitud de registro especificada en la cláusula Len de la instrucción Open debe tener al menos 2 bytes más que la longitud real de la cadena.

  • Si la variable que se está escribiendo es una Variant de un tipo numérico, Put escribe 2 bytes que identifican el VarType de la Variant y, a continuación, escribe la variable. Por ejemplo, al escribir una Variant de VarType 3, Put escribe 6 bytes: 2 bytes que identifican la Variant como VarType 3 (Long) y 4 bytes que contienen los datos Long. La longitud de registro especificada por la cláusula Len de la instrucción Open debe tener al menos 2 bytes más que el número real de bytes necesario para almacenar la variable.

    Nota:

    Use la instrucción Put para escribir una matrizVariant en el disco, pero no puede usar Put para escribir una variant escalar que contenga una matriz en el disco. Tampoco puede usar Put para escribir objetos en disco.

  • Si la variable que está escribiendo es una Variant de VarType 8 (String), Put escribe 2 bytes que identifican el VarType, 2 bytes que indican la longitud de la cadena y, a continuación, escribe los datos de la cadena. La longitud de registro especificada en la cláusula Len de la instrucción Open debe tener al menos 4 bytes más que la longitud real de la cadena.

  • Si la variable que se está escribiendo es una matriz dinámica, Put escribe un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NúmeroDeDimensiones. La longitud del registro especificado por la cláusula Len en la instrucción Open debe ser mayor o igual a la suma de todos los bytes requeridos para escribir los datos de matriz y el descriptor de matriz. Por ejemplo, la siguiente declaración de matriz requiere 118 bytes cuando la matriz se escribe en el disco.

    Dim MyArray(1 To 5,1 To 10) As Integer 
    
    
  • Los 118 bytes se distribuyen de la siguiente manera: 18 bytes para el descriptor (2 + 8 * 2) y 100 bytes para los datos (5 * 10 * 2).

  • Si la variable que se está escribiendo es una matriz de tamaño fijo, Put solo escribe los datos. No se escribe ningún descriptor en el disco.

  • Si la variable que se está escribiendo es cualquier otro tipo de variable (no una cadena de longitud variable o una Variant), Put escribe solo los datos de variable. La longitud de registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la longitud de los datos que se están escribiendo.

  • Put escribe elementos de tipos definidos por el usuario como si cada uno se escribiese individualmente, salvo que no hay ningún relleno entre los elementos. En el disco, a una matriz dinámica de un tipo definido por el usuario escrito con Put se le incluye como prefijo un descriptor cuya longitud es igual a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NúmeroDeDimensiones. La longitud de registro especificada por la cláusula Len de la instrucción Open debe ser mayor o igual que la suma de todos los bytes requeridos para escribir los elementos individuales, incluidas las matrices y sus descriptores.

Para los archivos abiertos en el modo Binary, se aplican todas las reglas Random, excepto:

  • La cláusula Len de la instrucción Open no tiene efecto. Put escribe todas las variables en el disco de manera contigua; es decir, sin relleno entre registros.

  • Para cualquier matriz distinta de una matriz en un tipo definido por el usuario, Put solo escribe los datos. No se escribe ningún descriptor.

  • Put escribe las cadenas de longitud variable que no son elementos de tipos definidos por el usuario sin el descriptor de longitud de 2 bytes. El número de bytes escritos es igual al número de caracteres en la cadena. Por ejemplo, las siguientes instrucciones escriben 10 bytes en el número de archivo 1:

      VarString$ = String$(10," ") 
      Put #1,,VarString$ 
    
    

Ejemplo:

Este ejemplo usa la instrucción Put para escribir datos en un archivo. Cinco registros del tipo definido por el usuario se escriben en el archivo.

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. 

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.