Curso Básico de Programación
en Visual Basic

Entrega Catorce: 14/Feb/98
por Guillermo "guille" Som

Desde aquí puedes enlazar con las entregas anteriores.
La Primera, la Segunda, la Tercera, la Cuarta, la Quinta, la Quinta++, la Sexta, la Séptima, la Octava, la Novena, la Décima, la Undécima, la Doce, la Trece

 

No ha sido al día siguiente, pero tampoco ha pasado un mes, así que espero que no te quejes demasiado.

Voy a continuar con el tema del DIR$, para ello vamos a hacer un programilla que nos muestre todos los ficheros que coincidan con la especificación indicada... ¿recuerdas lo de los comodines? Pues en eso nos vamos a enfocar ahora, es decir, servirá para que te muestre todos los ficheros BAS de un directorio o lo que quieras...
Para ello vamos a usar un control que hasta ahora sólo lo hemos visto, pero sin entrar en detalles sobre él: el ListBox.
También vamos a usar el DIR$ de otra forma... una de las varias disponibles...

Crea un nuevo proyecto, añade un ListBox, un Label, un TextBox y un CommandButton, el aspecto sería más o menos así:

Haz dobleclick en el Command1 y escribe:

Private Sub Command1_Click()
    Dim sTmp As String

    On Local Error Resume Next

    sTmp = Dir$(Text1.Text)
    If Err = 0 Then
        Do While Len(sTmp)      'Repetir mientras haya ficheros
            List1.AddItem sTmp  'Lo añadimos a la lista
            sTmp = Dir$         'Asignar el siguiente fichero
        Loop
    End If
    Err = 0
End Sub

Ejecuta el programa y escribe *.* en el TextBox, pulsa en el botón y te mostrará en el listbox todos los archivos del directorio actual.

Vamos a ver que es lo que hace el código:

sTmp = Dir$(Text1.Text)
Con esto, guardamos en sTmp el primer fichero que coincida con lo que hemos escrito en el Text1.

If Err = 0 Then
Si no se produce un error...

Do While Len(sTmp)
...se entra en el bucle, pero sólo si el contenido de sTmp no es una cadena vacía. Recuerda que DIR$ devuelve una cadena vacía si no se ha encontrado un fichero que coincida con lo indicado...

List1.AddItem sTmp
Esto añade al ListBox un nuevo elemento con el contenido de sTmp

sTmp = Dir$
Fíjate que DIR$ se usa sin indicarle nada más, úsalo de esta forma si quieres que siga comprobando si hay más ficheros que coincidan con la especificación indicada la vez anterior que se le pasó un parámetro. Si el contenido del TextBox tenía algún signo comodín, Dir$ devolverá el siguiente fichero que coincida, en caso de que no queden más ficheros "coincidentes", devolverá una cadena vacía.

Loop
Repite el bucle si se cumple la condición que pusimos después de DO WHILE, es decir: continuará si la longitud, número de caracteres, de sTmp NO ES CERO.

Prueba, sin cerrar el programa, con varias cosas, por ejemplo: *.vbp, *.bas, etc.

¿Que pasa?
Si estás indicando varias cosas que buscar, y las encuentra, te darás cuenta que el listbox se va llenando... es decir, además de lo nuevo, que estará al final, sigue lo anterior...

¿Cómo solucionarlo?
Borrando el contenido del listbox.

Para borrar el contenido del listbox, usa esto:
List1.Clear

¿Dónde debo ponerlo?
En nuestro ejemplo, yo lo pondría justo después del On Local Error..., o antes, da igual, ya que lo que se pretende es que se borre al hacer CLICK en el botón.
Por supuesto no lo pongas dentro del DO...LOOP, ya que no serviría para lo que queremos... puesto que se borraría continuamente... Sí, ya sé que no eres tan torpe como para hacerlo, pero...

Un detalle que puede que sea simple, pero que en nuestro ejemplo nos ahorraría pulsaciones. Si al pulsar INTRO se simulara el CLICK del botón, nos ahorraría el tener que "desplazarnos" a ese botón para que muestre lo que ha encontrado y si queremos seguir mostrando más cosas, el tener que desplazarnos nuevamente al TextBox.

Para conseguir esto, todo lo que tenemos que hacer, es indicarle al VB que el botón sea un botón "por defecto".
Muestra el form, y pulsa una vez en el botón, te mostrará la ventana de propiedades de este control, busca la propiedad DEFAULT y márcala como TRUE, verás que el botón ahora está remarcado con un borde negro.

Ejecuta de nuevo el programa, escribe cualquier cosa en el TEXT1 y pulsa INTRO, ahora te mostrará los ficheros hallados, pero el cursor permanece en el TextBox, listo para poder escribir una nueva especificación...

Ahora vamos a los ejercicios:

1.- Modifica el ejemplo para que en lugar de guardar los ficheros hallados en un listbox, lo haga en un array.
2.- Una vez hecho esto, añade al listbox todos los ficheros hallados... mejor dicho, para que no hagas trampas, añade al listbox el contenido del array, es decir todos y cada uno de los ficheros previamente asignados.
3.- Añade otro botón al form y al pulsar en él, que guarde en un fichero, (por ejemplo: hallados.txt), todos los ficheros hallados, es decir los que estén en el array.

Creo que con esto, ya tienes para entretenerte un rato.
Como pista, ya sabes el tipo de pistas que doy..., te diré que la asignación al array, puedes hacerla de dos formas:
UNA: Usando un número máximo de ficheros a asignar.
DOS: Usando un número variable, es decir que se añadan sólo la cantidad de ficheros hallados.

Y si haces los ejercicios de las dos formas posibles, mejor aún.

Si ves que te atrancas y no sabes por dónde hincarle el diente, aunque sea postizo, échale un vistazo a la entrega ocho y a la entrega doce, en ellas encontrarás la solución a estos ejercicios... bueno, la solución, lo que se dice la solución: no, pero si unas verdaderas auto-pistas para poder solucionarlos.

Y como soy un poco "diablillo", no te voy a poner un link a las soluciones... al menos hasta que ponga la siguiente entrega, así que... ¡a rabiar unos días!
Es que algunas veces... ¡Soy malo!

Pues nada, a esperar... que de seguro será poco, pero mientras tanto...

Y recuerda que espero tu comentario, no me preguntes si lo estás haciendo bien o no, que de eso se encargará la página con las soluciones, sólo pregúntame algo que no hayas entendido..., de esta entrega, claro, no de otra cosa que no está en el curso... que casi de seguro estará en otra de las secciones que hay en mis páginas...

 

Nos vemos.
Guillermo


 
entrega anterior ir al índice siguiente entrega

Ir al índice principal del Guille