Compartir a través de


Instrucción Get

Lee datos de un archivo de disco abierto en una variable.

Sintaxis

Get [ # ] filenumber, [ recnumber ], varname

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

Parte Descripción
númeroArchivo Obligatorio. Cualquier número de archivo válido.
recnumber Opcional. Valor Variant (Long). Número de registro (archivos de modo Random) o número de bytes (archivos de modo Binary) en el que comienza la lectura.
varname Obligatorio. Nombre de variable válido en el que se leen los datos.

Comentarios

Los datos leídos con Get normalmente se escriben en un archivo con Put. 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 lee el siguiente registro o byte que sigue a la última instrucciónGet o Put (o señalada por la última función Seek). Debe incluir comas de delimitación, por ejemplo:

Get #4,,FileBuffer 

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

  • Si la longitud de los datos que se leen es menor que la longitud especificada en la cláusula Len de la instrucción Open , Get lee los registros posteriores en los límites de longitud de registro. El espacio entre el final de un registro y el principio del siguiente registro se rellena con el contenido existente del búfer de archivo. Puesto que no se puede determinar con seguridad la cantidad de datos que se va a rellenar, es normalmente recomendable hacer que la longitud de registro coincida con la longitud de los datos que se van a leer.

  • Si la variable en la que se va realizar la lectura es una cadena de longitud variable, Get lee un descriptor de 2 bytes que contiene la longitud de cadena y, a continuación, lee los datos que se incluyen en la variable. Por lo tanto, la longitud de registro que especifica la cláusula Len en la instrucción Open debe ser al menos 2 bytes superior a la longitud real de la cadena.

  • Si la variable en la que se va a realizar la lectura es un valor Variant de tipo numérico, Get lee 2 bytes que identifican el VarType del valor Variant y, a continuación, los datos que se incluyen en la variable. Por ejemplo, cuando se lee un valor Variant de VarType 3, Get lee 6 bytes: 2 bytes que identifican el valor Variant como VarType 3 (Long) y 4 bytes que contienen datos Long. La longitud de registro que especifica la cláusula Len en la instrucción Open debe ser al menos 2 bytes superior al número real de bytes necesario para almacenar la variable.

    Nota:

    Use la instrucción Get para leer una matrizVariant desde el disco, pero no puede usar Get para leer una variant escalar que contiene una matriz. No puede usar Get para leer objetos del disco.

  • Si la variable en la que se va a realizar la lectura es un valor Variant de VarType 8 (String), Get lee 2 bytes que identifican VarType, 2 bytes que indican la longitud de la cadena y, a continuación, lee los datos de cadena. La longitud de registro que especifica la cláusula Len en la instrucción Open debe ser al menos 4 bytes superior a la longitud real de la cadena.

  • Si la variable en la que se va a realizar la lectura es una matriz dinámica, Get lee un descriptor cuya longitud sea igual a 2 más 8 veces el número de dimensiones, es decir, 2 + 8 * NúmeroDeDimensiones. La longitud de registro que especifica la cláusula Len en la instrucción Open debe ser superior o igual a la suma de todos los bytes necesarios para leer 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 en la que se va a realizar la lectura es una matriz de tamaño fijo, Get lee solo los datos. No se lee el descriptor.

  • Si la variable en la que se va a realizar la lectura es cualquier otro tipo de variable (no una cadena de longitud variable ni un valor Variant), Get lee solo los datos variables. La longitud de registro que especifica la cláusula Len en la instrucción Open debe ser superior o igual a la longitud de los datos que se van a leer.

  • Get lee elementos de tipos definidos por el usuario como si se leyeran de forma individual, pero no hay relleno entre elementos. En el disco, una matriz dinámica en un tipo definido por el usuario (escrito con Put) está precedida por 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 que especifica la cláusula Len en la instrucción Open debe ser superior o igual a la suma de todos los bytes necesarios para leer los elementos individuales, incluidas las matrices y los descriptores.

En archivos abiertos en modo Binary, se aplican todas las reglas de Random, excepto:

  • La cláusula Len de la instrucción Open no tiene ningún efecto. Get lee todas las variables del disco de forma contigua; es decir, sin rellenos entre registros.

  • En las matrices que no sean matrices en un tipo definido por el usuario, Get lee solo los datos. No se lee el descriptor.

  • Get lee cadenas de longitud variable que no son elementos de los tipos definidos por el usuario sin esperar el descriptor de longitud de 2 bytes. El número de bytes leídos es igual al número de caracteres que ya se encuentra en la cadena. Por ejemplo, las siguientes instrucciones leen 10 bytes del número de archivo 1:

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

Ejemplo

En este ejemplo se usa una instrucción Get para leer datos de un archivo en una variable. En este ejemplo se supone que TESTFILE es un archivo que contiene cinco registros del tipo definido por el usuario Record.

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. 

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.