Contenido
La instrucción `Seek` en VBA se usa principalmente en conjunto con operaciones de archivo para cambiar la posición actual del puntero de lectura/escritura en un archivo abierto con las funciones `Open` o `OpenText`. Puede ser útil cuando quieres empezar a leer o escribir en un punto específico de un archivo en lugar de hacerlo desde el principio o continuando desde la posición actual.
`Seek` se utiliza con archivos abiertos en modo Acceso Aleatorio (Random), Binario (Binary), Secuencial de Entrada o Salida (Input/Output). Aquí te muestro cómo usar la instrucción `Seek` en diversos contextos:
Uso Básico de Seek
Dim FileNumber As Integer
Dim FilePath As String
Dim Data As String
' Define la ruta del archivo. Asegúrate de cambiar esto por una ruta válida en tu sistema.
FilePath = "C:miArchivo.txt"
' Obtiene el siguiente número de archivo disponible.
FileNumber = FreeFile()
' Abre el archivo en modo Binario.
Open FilePath For Binary As #FileNumber
' Mover el puntero al byte deseado (por ejemplo, al tercer byte).
Seek #FileNumber, 3
' Lee una cadena del archivo a partir de la posición actual del puntero.
Data = Input(5, #FileNumber) ' Lee los siguientes 5 bytes
' Cerrar el archivo.
Close #FileNumber
Ejemplo en el Modo Acceso Aleatorio
En el modo Acceso Aleatorio, `Seek` se usa para mover el puntero al registro que deseas leer o escribir. Cada registro tiene un tamaño fijo definido por la estructura de datos que estás utilizando. Aquí hay un ejemplo básico:
Type Employee
ID As Integer
Name As String * 20
Position As String * 20
End Type
Dim emp As Employee
Dim FileNumber As Integer
Dim FilePath As String
FilePath = "C:Empleados.dat"
FileNumber = FreeFile()
Open FilePath For Random As #FileNumber Len = Len(emp)
' Mover al tercer registro
Seek #FileNumber, 3
' Leer el tercer registro
Get #FileNumber, , emp
' Cambiar algún valor del registro
emp.Name = "Actualizar Nombre"
' Moverse nuevamente al tercer registro para actualizarlo
Seek #FileNumber, 3
' Escribir el registro actualizado
Put #FileNumber, , emp
Close #FileNumber
En este script, `Seek` se utiliza para mover el puntero a la posición del tercer registro antes de leer (con `Get`) y luego actualizar (con `Put`) el contenido del archivo.
Seek con Archivos de Texto
Cuando trabajas con archivos de texto abiertos en los modos Secuencial de Entrada (`Input`) o Salida (`Output`), el uso de `Seek` es más limitado, porque estos modos son principalmente para la lectura y escritura secuenciales de texto. En estos casos, normalmente no usarías `Seek`.
`Seek` es más común y útil con archivos abiertos en modos Binario o Acceso Aleatorio cuando necesitas un control más detallado sobre la posición de lectura y escritura dentro de un archivo.