Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Buscar en los archivos de los proyectos que contienen internamente una palabra
#1

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 Big Grin , como para saber que es eso con ese nombre. Tongue

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í. Rolleyes

GAMBAS
  1. Public Sub EncontrarCadenaRecursivamenteEnArchivosDeUnDirectorio(ruta As String, palabra As String, Optional separador As String = ":") As String[]
  2.  
  3.   Dim archivo As String
  4.   Dim partesdeunaruta As String[]
  5.   Dim slista As String
  6.   Dim arepes As New String[]
  7.   Dim asinrepes As New String[]
  8.   Dim pos As Integer
  9.  
  10.   Shell "grep" & " -ir " & palabra & " " & ruta To slista
  11.  
  12.   For Each archivo In Split(slista, "\n")
  13.     pos = InStr(archivo, separador)
  14.     If pos > 0 Then arepes.Add(Left(archivo, pos - 1))
  15.   Next
  16.  
  17.   For Each archivo In arepes
  18.     partesdeunaruta = Split(archivo, "/", "'", True)    
  19.     If Not asinrepes.Exist(partesdeunaruta[partesdeunaruta.Max - 2]) Then asinrepes.Add(partesdeunaruta[partesdeunaruta.Max - 2])    
  20.   Next
  21.  
  22.   Return asinrepes.Sort()
  23.  



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. Smile

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.

GAMBAS
  1. Public Sub btnBuscar_Click()
  2.  
  3.   Dim lista As New String[]
  4.   Dim nombre As String
  5.   Dim ruta As String = "ruta_a_tus_proyectos_Gambas"
  6.  
  7.   TextArea1.text = ""
  8.  
  9.   lista = EncontrarCadenaRecursivamenteEnArchivosDeUnDirectorio(ruta, "Paint")
  10.  
  11.   For Each nombre In lista
  12.     TextArea1.Text &= nombre & gb.NewLine  
  13.   Next
  14.  



Moraleja: Pon un buen nombre a tus proyectos y usa las dos cajas de texto.

Soy requerido en la cocina...

Saludos


Archivos adjuntos
.gz BuscarCoincidencias2-0.0.1.tar.gz Tamaño: 12.11 KB  Descargas: 1

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#2

¿Ayudará esto?

InFile

[Imagen: InFile.png]
[-] Los siguientes 3 usuarios dicen gracias a cogier por este post:
  • alberto-moyano, Shell, tincho
    ¡Gracias!
#3

¿Has probado los comandos "grep -r ..." y "rgrep"

Saludos

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • Shell
    ¡Gracias!
#4

(05-12-2022, 20:59)Shordi escribió:  ¿Has probado los comandos "grep -r ..." y "rgrep"

Si, vuelco la salida en una cadena.  Con rgrep no he probado.
 
(05-12-2022, 18:37)cogier escribió:  ¿Ayudará esto?

Este si. Wink

Vaya, si que le dedicaste código. Desde luego te esmeraste creándolo.
Gracias.

Saludos

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)