Curso Básico de Programación
en Visual Basic

Soluciones de la entrega Veinte.
Fecha: 24/Jun/98

 

Estas son las soluciones de los ejercicios de la entrega veinte, si quieres ver el contenido de la susodicha entrega, pulsa en este link y te llevará a la entrega 20.

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=mensaje@elguille.info"
    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=mensaje@elguille.info"
    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.
Guillermo


 

entrega anterior

Ir al índice principal del Guille