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 protected]" Print #nFic, "" Print #nFic, "[Alumnos]" Print #nFic, "Cantidad=2" Print #nFic, "Nombre_01=Pepito" Print #nFic, "[email protected]" Print #nFic, "Nombre_02=Juanita" Print #nFic, "[email protected]" 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 protected]" Print #nFic, "" Print #nFic, "[Alumnos]" Print #nFic, "Cantidad=2" Print #nFic, "Nombre_01=Pepito" Print #nFic, "[email protected]" Print #nFic, "Nombre_02=Juanita" Print #nFic, "[email protected]" 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