Buenas!.
Hace un tiempo creé un ejemplo y no había forma de recordar su nombre. ( Rebuscado que soy a veces ).
Imaginar le puse "distancias" como nombre
, como para saber que es eso con ese nombre.
Como era un proyecto gráfico la solución más simple era encontrar la palabra "Paint" dentro de muchos archivos y proyectos de Gambas.
Como no sé si es posible hacerlo con Gambas directamente, me apoyé en el comando
grep de bash.
Cuando uso la instrucción grep, este me devuelve el nombre de la ruta, ":" y donde se encuentra, ejemplo:
Cita: /home/miusuario/Programacion/PracticasGambas/PracticaTemporal/EjemploMultipleTemporal/.src/Cuadrado.class: Paint.LineWidth = 2
Con eso sabemos que el separador es ":"
¿ Qué nos podemos encontrar ?. Que la palabra Paint se repita muchas veces "por ejemplo" en el archivo Cuadrado.class
Entonces voy descalificando nombres de archivos repetidos para que solo me lo muestre una vez.
Esa es la función principal. No he usado reloj para que el usuario se enfade. (Cuando el proceso tarda y no sabemos que se ha colgado la aplicación). Es que no se lo añadí.
Código:
Public Sub EncontrarCadenaRecursivamenteEnArchivosDeUnDirectorio(ruta As String, palabra As String, Optional separador As String = ":") As String[]
Dim archivo As String
Dim partesdeunaruta As String[]
Dim slista As String
Dim arepes As New String[]
Dim asinrepes As New String[]
Dim pos As Integer
Shell "grep" & " -ir " & palabra & " " & ruta To slista
For Each archivo In Split(slista, "\n")
pos = InStr(archivo, separador)
If pos > 0 Then arepes.Add(Left(archivo, pos - 1))
Next
For Each archivo In arepes
partesdeunaruta = Split(archivo, "/", "'", True)
If Not asinrepes.Exist(partesdeunaruta[partesdeunaruta.Max - 2]) Then asinrepes.Add(partesdeunaruta[partesdeunaruta.Max - 2])
Next
Return asinrepes.Sort()
End
Me he centrado en buscar solo archivos que contengan "Paint".
Y esto es el código del botón que llama a esa función.
Como son cosas de probar rápido he usado un Textarea.
El nombre del proyecto por defecto lo encuentro, dos pasos más atrás de la ruta completa comenzando por la derecha.
El array partesdeunaruta contiene cada elemento una parte de la ruta como dice su nombre. Con este averiguo el nombre del proyecto.
Todo muy simple.
Código:
Public Sub btnBuscar_Click()
Dim lista As New String[]
Dim nombre As String
Dim ruta As String = "ruta_a_tus_proyectos_Gambas"
TextArea1.text = ""
lista = EncontrarCadenaRecursivamenteEnArchivosDeUnDirectorio(ruta, "Paint")
For Each nombre In lista
TextArea1.Text &= nombre & gb.NewLine
Next
End
Moraleja: Pon un buen nombre a tus proyectos y usa las dos cajas de texto.
Soy requerido en la cocina...
Saludos