|
Curso básico
de programación en Visual Basic
Lección
20
Solución,
for to next
|
Realizamos
programas para la gestión de empresas. Empresas medianas y
pequeñas. Programas de contabilidad, cartera de pedidos
clientes proveedores, facturación control de albaranes,
tesorería cartera de cobros y pagos y estadísticas.
Nuestro
agradecimiento a todos los que por unas causas o por otras
visitan nuestra web. Gestión de empresas PYMES. Curso de
programación de Visual Basic.
|
El primero:
'
'Ejemplos del curso básico, ejemplo de Seek (26/May/98)
'
'Solución a los ejercicios de la entrega 20
'
Option Explicit
Private Type tContenidos
Clave As String
Contenido As String
End Type
Private Type tSecciones
Nombre As String
NumClaves As Integer
Contenidos() As tContenidos
End Type
Private aSecciones() As tSecciones
Private nSecciones As Integer
Private sFic As String
Private Sub cmdLeerContenido_Click()
'Leemos el contenido de la sección seleccionada en el list
Dim sCadena As String
Dim nItem As Long
Dim i As Integer
nItem = List1.ListIndex
If nItem >= 0 Then
'borramos el contenido del Text1
Text1 = ""
With aSecciones(nItem + 1)
For i = 1 To .NumClaves
sCadena = .Contenidos(i).Clave & "=" & .Contenidos(i).Contenido
Text1 = Text1 & sCadena & vbCrLf
Next
End With
End If
End Sub
Private Sub cmdLeerSecciones_Click()
Dim nFic As Integer
Dim sCadena As String
Dim Posicion As Long
Dim nClaves As Integer
Dim i As Integer
'Borramos el contenido del ListBox
List1.Clear
'Leemos las secciones disponibles
nFic = FreeFile
Open sFic For Input As nFic
Do While Not EOF(nFic)
Line Input #nFic, sCadena
'Si es una sección
If Left$(sCadena, 1) = "[" Then
nClaves = 0
'incrementamos el número de secciones
nSecciones = nSecciones + 1
'redimensionamos el array
ReDim Preserve aSecciones(nSecciones)
'asignamos los valores al array
aSecciones(nSecciones).Nombre = sCadena
'añadimos esta sección a la lista
List1.AddItem sCadena
'ahora leemos el contenido del fichero hasta encontrar [
Do While Not EOF(nFic)
Line Input #nFic, sCadena
If Left$(sCadena, 1) = "[" Then
'nada más que leer
'restablecemos la posición anterior
Seek nFic, Posicion
Exit Do
Else
Posicion = Seek(nFic)
'Posición del signo igual
i = InStr(sCadena, "=")
If i Then
nClaves = nClaves + 1
ReDim Preserve aSecciones(nSecciones).Contenidos(nClaves)
With aSecciones(nSecciones)
.NumClaves = nClaves
'La clave estará antes del signo igual
.Contenidos(nClaves).Clave = Trim$(Left$(sCadena, i - 1))
'el contenido de la clave después del signo
.Contenidos(nClaves).Contenido = Mid$(sCadena, i + 1)
End With
End If
End If
Loop
End If
Loop
Close nFic
If nSecciones Then
'seleccionamos el primer item del listbox
List1.ListIndex = 0
'habilitamos el botón
cmdLeerContenido.Enabled = True
Else
MsgBox "No hay secciones en el fichero: " & sFic
End If
End Sub
Private Sub Form_Load()
Dim nFic As Integer
'deshabilitar el botón de leer contenidos
cmdLeerContenido.Enabled = False
Text1 = ""
List1.Clear
'Creamos el fichero de ejemplo
sFic = "basico_20.ini"
nFic = FreeFile
Open sFic For Output As nFic
Print #nFic, "[elProfe]"
Print #nFic, "Nombre=Guillermo"
Print #nFic, "email=guille@costasol.net"
Print #nFic, ""
Print #nFic, "[Alumnos]"
Print #nFic, "Cantidad=2"
Print #nFic, "Nombre_01=Pepito"
Print #nFic, "email_01=pepito@servidor.com"
Print #nFic, "Nombre_02=Juanita"
Print #nFic, "email_02=juani@servidora.net"
Print #nFic, ""
Print #nFic, "[Fecha]"
Print #nFic, "Fichero creado el día=26/May/1998"
Close
cmdLeerSecciones_Click
End Sub
Private Sub List1_DblClick()
cmdLeerContenido_Click
End Sub
El segundo:
'
'Ejemplos del curso básico, ejemplo de Seek (26/May/98)
'
'Solución a los ejercicios de la entrega 20
'
Option Explicit
Private Type tSecciones
Nombre As String
NumClaves As Integer
Contenidos() As Long
End Type
Private aSecciones() As tSecciones
Private nSecciones As Integer
Private sFic As String
Private Sub cmdLeerContenido_Click()
'Leemos el contenido de la sección seleccionada en el list
Dim nFic As Integer
Dim sCadena As String
Dim nItem As Long
Dim i As Integer
nItem = List1.ListIndex
If nItem >= 0 Then
nFic = FreeFile
Open sFic For Input As nFic
'borramos el contenido del Text1
Text1 = ""
With aSecciones(nItem + 1)
For i = 1 To .NumClaves
'Nos posicionamos en el sitio que nos interesa
Seek nFic, aSecciones(nItem + 1).Contenidos(i)
Line Input #nFic, sCadena
Text1 = Text1 & sCadena & vbCrLf
Next
End With
Close nFic
End If
End Sub
Private Sub cmdLeerSecciones_Click()
Dim nFic As Integer
Dim sCadena As String
Dim Posicion As Long
Dim nClaves As Integer
Dim i As Integer
'Borramos el contenido del ListBox
List1.Clear
'Leemos las secciones disponibles
nFic = FreeFile
Open sFic For Input As nFic
Do While Not EOF(nFic)
Line Input #nFic, sCadena
'Si es una sección
If Left$(sCadena, 1) = "[" Then
nClaves = 0
'incrementamos el número de secciones
nSecciones = nSecciones + 1
'redimensionamos el array
ReDim Preserve aSecciones(nSecciones)
'asignamos los valores al array
aSecciones(nSecciones).Nombre = sCadena
'añadimos esta sección a la lista
List1.AddItem sCadena
'ahora leemos el contenido del fichero hasta encontrar [
Do While Not EOF(nFic)
'En las claves nos interesa saber la posición
'antes de empezar a leerlas
Posicion = Seek(nFic)
Line Input #nFic, sCadena
If Left$(sCadena, 1) = "[" Then
'nada más que leer
'restablecemos la posición anterior
Seek nFic, Posicion
Exit Do
Else
i = InStr(sCadena, "=")
'Si es una clave tendrá el signo igual
If i Then
nClaves = nClaves + 1
ReDim Preserve aSecciones(nSecciones).Contenidos(nClaves)
With aSecciones(nSecciones)
.NumClaves = nClaves
.Contenidos(nClaves) = Posicion
End With
End If
End If
Loop
End If
Loop
Close nFic
If nSecciones Then
'seleccionamos el primer item del listbox
List1.ListIndex = 0
'habilitamos el botón
cmdLeerContenido.Enabled = True
Else
MsgBox "No hay secciones en el fichero: " & sFic
End If
End Sub
Private Sub Form_Load()
Dim nFic As Integer
'deshabilitar el botón de leer contenidos
cmdLeerContenido.Enabled = False
Text1 = ""
List1.Clear
'Creamos el fichero de ejemplo
sFic = "basico_20.ini"
nFic = FreeFile
Open sFic For Output As nFic
Print #nFic, "[elProfe]"
Print #nFic, "Nombre=Guillermo"
Print #nFic, "email=guille@costasol.net"
Print #nFic, ""
Print #nFic, "[Alumnos]"
Print #nFic, "Cantidad=2"
Print #nFic, "Nombre_01=Pepito"
Print #nFic, "email_01=pepito@servidor.com"
Print #nFic, "Nombre_02=Juanita"
Print #nFic, "email_02=juani@servidora.net"
Print #nFic, ""
Print #nFic, "[Fecha]"
Print #nFic, "Fichero creado el día=26/May/1998"
Close
cmdLeerSecciones_Click
End Sub
Private Sub List1_DblClick()
cmdLeerContenido_Click
End Sub
Espero que con los comentarios y si
fuera necesario un repasillo a la entrega veinte, no tendrán
demasiada complicación para entender el listado.
Nos vemos.
|
|