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.