¿Qué tal?
Vayamos pues por partes. ¿Conoces las estructuras de datos? Primero debes crear una con los datos que necesites:
Código:
Private Type TypeAlumno
aluid As String * 5
alumatricula As String * 20
aluapepat As String * 30
aluapemat As String * 30
alunombre As String * 30
semdesc As String * 6
aluplan As String * 5
alugrupo As String * 1
End Type
En principio puedes guardar datos de cualquier tipo ahí dentro, que esto que vamos a seguir viendo debería funcionar.
Una vez que lo tengas, necesitas abrir el archivo y coger todos los datos que contenga. Como la función es facilita, te la dejo aquí para que te bases en ella:
Código:
Private Sub LeeDatos(ByVal FicheroAlumnos As String)
Dim FileNum As Long
Dim DatosAlumno As TypeAlumno
FileNum = FreeFile
Open FicheroAlumnos For Random As FileNum
Do While Not EOF(FileNum)
Get FileNum, , DatosAlumno
With DatosAlumno
' Haz cosas aquí con los datos leídos en la estructura
' Se machacan en cada iteración, así que
' no esperes a tenerlos todos... o
' implementa alguna forma de guardarlos
' en memoria =]
Call MsgBox(.aluid & vbCrLf & _
.alumatricula & vbCrLf & _
.aluapemat & vbCrLf & _
.aluapepat & vbCrLf & _
.alunombre & vbCrLf & _
.semdesc & vbCrLf & _
.aluplan & vbCrLf & _
.alugrupo)
End With
Loop
Close FileNum
End Sub
Por partes:
- Sólo puedes tener un número determinado de ficheros abiertos a la vez, así que la variable FileNum va a almacenar el primer número de fichero que esté libre. Normalmente la gente pone directamente cosas como "Open
noseque nosecuantos As
#1", y eso está bien si vas deprisa y tal, pero no es la mejor elección porque si trabajas con varios ficheros a la vez, puedes encontrarte con que tu programa intenta abrir dos o más simultáneamente con el número 1, y eso es malo.
FreeFile es tu amigo, úsalo
-
Open acepta más parámetros (mira la ayuda), pero estos son los mínimos que necesitas.
-
EOF te indica si estás intentando leer el final del fichero (devuelve
True en ese caso), por lo que nos viene bien cuando no sabemos cuántos registros vamos a leer, como me imagino que será el caso.
- Y por último,
Get carga datos del fichero en la variable que le digas, que en nuestro caso es una estructura, con sus campos y sus cosas (bueno, con sus campos nada más

). En este ejemplo te viene muy bien porque supongo que las estructuras que vas a leer siempre van a tener el mismo tamaño, por lo que no necesitas nada más. De hecho, si ejecutas en el evento Load (o en el Sub Main, o donde quieras) algo como:
Código:
Call LeeDatos(<ruta hasta el fichero "alumnos.dat">)
Te aparecerá un mensaje por cada línea leída, y en cada variable de la estructura estará su valor correcto.
Importante: es
vital que los datos se guarden tal cual los defines en la estructura, con el mismo orden y tamaño. Haz una prueba y cambia el tamaño de una cualquiera de las variables de la estructura, o cambia su orden y verás a qué me refiero (no se estropeará nada, pero verás que no recoges lo que esperas).
También es importante que tengas en cuenta que este ejemplo sólo vale si en la estructura sólo existen tipos de datos de tamaño fijo. Por ejemplo, una cadena definida sólo como "
As String" (sin "
* <tamaño>"), requiere, y de hecho guardaría, algún byte más en el fichero, con lo que la función de arriba no funcionaría si dicho fichero no contiene esa información. No creo que ahora tengas que preocuparte por esto, pero tenlo en cuenta para el día de mañana
La parte de la lectura de las materias te la dejo a tí