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 SubEspero 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