Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Buscando Nombres De Archivos Por Coincidencias

Buscando Nombres De Archivos Por Coincidencias
Artículo
Responder citando    Descargar mensaje  
Mensaje Buscando Nombres De Archivos Por Coincidencias 
 
Hola!.

Después de estar un poco estudiando Python. Me acordé de un modulo que usa para el manejo del sistema.
Y encontré un método para listar archivos. De esto salio la idea de este ejemplo.

La idea principal es, buscar un nombre de archivo que incluyen ciertas palabras.
Imaginar lo que sería, si esta condición se cumple y si esta también y esta...una linea algo larga de condicionales.  

El movimiento se demuestra andando. Así que ni corto ni perezoso:

Tengo una lista de juegos de Spectrum y quería encontrar que archivos cumplían con:
- Una compañía concreta
- Estuviera en español
- Se haya producido en un año concreto

El ejemplo lo hice en consola, por ahora.

Public Sub Main()

Dim condiciones As String[] = ["US Gold", "(es)", "1988"]
Dim ruta_archivos As String = "~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/"
Dim fichero As String
Dim condicion As String
Dim cuenta_condiciones As Integer

For Each fichero In RDir(ruta_archivos, "*.tzx", gb.File).Sort()
  cuenta_condiciones = 0
  'Convertimos el nombre del archivo a minúscula para igualdad
  fichero = Lower(fichero)
  ' Comprobamos que se cumple todas las condiciones
  For Each condicion In condiciones
    If InStr(fichero, Lower(condicion)) <> 0 Then
      cuenta_condiciones += 1  
    Endif
  Next
  'Si se cumplen todas las condiciones mostramos el nombre del archivo
  If cuenta_condiciones = condiciones.Length Then Print ruta_archivos & fichero
Next

End
 


Y con eso obtuve este pequeño listado:

Citar:

~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/b/beach head (1988)(dro soft - us gold)(es).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/b/bruce lee (1988)(dro soft - us gold)(es).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/c/charlie chaplin (1988)(erbe - us gold)(es).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/r/raid over moscow (1988)(dro soft - us gold)(es).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/r/road blasters (1988)(erbe - us gold)(es)(side a).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/r/road blasters (1988)(erbe - us gold)(es)(side b).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/r/rolling thunder (1988)(erbe - us gold)(es).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/t/turbo outrun (1988)(erbe - us gold)(es)(side a).tzx
~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/t/turbo outrun (1988)(erbe - us gold)(es)(side b).tzx


Así que con un array y las condiciones en el, solucione el problema de usar una linea larga de condicionales.

Ahora mis compañero me dirán, aprende base de datos, que ya te va tocando.  
Era un ejemplo. Y funciona!.  

Saludos



 
última edición por Shell el Lunes, 02 Marzo 2015, 21:22; editado 1 vez 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 02 Marzo 2015, 21:21 ]
 


Buscando Nombres De Archivos Por Coincidencias
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Ejem, ejem..

Si me voy al lugar donde tengo el directorio de los juegos..

ls -R | grep -i "US Gold" | grep -i "(es)" | grep 1988
 


Hace lo mismo.  

Claaaaro, pero no es gambas

Ozu!, cuanto hay que estudiar! y sin base de datos ni na!.



 
última edición por Shell el Martes, 03 Marzo 2015, 12:13; editado 3 veces 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Lunes, 02 Marzo 2015, 21:49 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Citar:
y sin base de datos ni na!.


Es lo que tiene   



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Martes, 03 Marzo 2015, 11:24 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Hice una mezcla de gambas y Shell y obtuve esto:

'find ~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/ -iname *.tzx | grep -i "US Gold" | grep -i "(es)" | grep 1988

Public Sub Main()

Dim condiciones As String[] = ["US Gold", "(es)", "1988"]
Dim condicion As String, linea_comando, salida As String
Dim ruta_archivos As String = "~/Documentos/Ordenadores/Spectrum/Coleccion/Tzx/"

linea_comando = "find " & ruta_archivos & " -iname *.tzx"
For Each condicion In condiciones
  linea_comando &= " | grep -i " & Chr(34) & condicion & Chr(34)
Next

'Direccionamos el contenido de la linea de comandos a la variable salida
Shell linea_comando To salida
Print salida

End
 


Saludos



 
última edición por Shell el Martes, 03 Marzo 2015, 22:17; editado 1 vez 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Martes, 03 Marzo 2015, 22:15 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
La Shell solita hace eso y más. Aquí, por ejemplo te descomprime todos los archivos .rar y te borra todos los archivos .htm de manera recursiva en el árbol de directorios desde la carpeta donde lo ejecutes:

Shell "find . -name \*.rar | while read f; do unrar e "$f"; rm *.htm; done" wait
 


Extraído de un programa que hice de copias de seguridad hace tiempo.

Saludos.



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Miercoles, 04 Marzo 2015, 09:58 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Shordi:

Cierto, el Shell de Unix es muy potente.
El problema que tuve con ese ejemplo era que tenía que repetir  cada sentencia:

| grep -i ....
 


Por cada condición que necesitase buscar.
Creando una linea de comandos, concatenando las instrucción "grep -i" y la condición.
Toda esta linea la crea el bucle For Each.

| grep -i "US Gold" | grep -i "(es)" | grep 1988
 


( Vaya, se coló la palabra PIPE ).  

Una de las preguntas que nos podemos hacer es, si queremos hacerlo en gambas o hacerlo en Shell.
Con Shell se abrevia, naturalmente. Nosotros no sabemos todo el código que hay detrás de cada instrucción del Shell.
Aprendemos a usarlas sin preocuparnos de su código interno. ( Otro lenguaje más que hay que aprender, mas tiempo, etc..)

Por otro lado estamos reinventando la rueda al hacerlo en gambas. Aunque como programador de gambas.
¿ No te hubiera gustado crearlo en lenguaje gambas ? ( Ciento y la madre de instrucciones ).
En tu caso se entiende, no puedes perder tanto tiempo y te exigen un rendimiento en el trabajo.

Para el que aprende está bien poder hacerlo en gambas. Pero esto es como todo.
A medida que vas conociendo la programación y nuevas técnicas, buscaras entre rapidez, facilidad, rendimiento y no olvidemos la limpieza del código y su comprensión.

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Miercoles, 04 Marzo 2015, 10:50 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Citar:
Por otro lado estamos reinventando la rueda al hacerlo en gambas


Eso me pasa muy a menudo pero aprendí hace tiempo a utilizar todas las herramientas que estén a mi disposición... siempre que no interfieran en mi planteamiento. Un ejemplo:
Cuando se me planteó la necesidad de una aplicación que manejase un montón de documentos, o bien pdf o bien de LibreOffice, etc. mi primera intención fué utilizar Filezilla, que es el mejor cliente FTP que conozco. Pero, dadas las características de la aplicación que manejaba, eso me complicaba extraordinariamente el mantenimiento de la aplicación (No todos los usuarios tienen derecho a ver los mismos documentos. FTP soluciona eso creando un usuario en el servidor por cada usuario que se conecta, lo cual complica el asunto de añadir usuarios, etc.) y su manejo (al intentar subir o bajar un fichero hay que hacer una llamada externa a Filezilla y paralizar la aplicación mientras, para chequear después que sí se ha subido o que se ha abortado, etc. etc.)

¿Solución? me hice mi propio cliente de FTP, el programa gbFtp es un extracto de él, que hacía todo eso de manera automática, y perfecto. Me costó reinventar la rueda, pero me divertí mucho en el proceso y aprendí un montón sobre un montón de cosas en el camino.

Eso sí, si Filezilla me hubiese servido, lo hubiese usado sin contemplaciones ni remordimientos.

Saludos



 
última edición por shordi el Miercoles, 04 Marzo 2015, 11:42; editado 1 vez 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Miercoles, 04 Marzo 2015, 11:40 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Una cuestión más sobre apoyarse en herramientas externas: Las actualizaciones y cambios en tales herramientas (o su obsolescencia) pueden hacer tu programa inútil con el paso del tiempo y las versiones.
Una vez hice un manejador de pdf echo en gambas2 que no era sino un front-end gráfico para una librería llamada pdftk, si no recuerdo mal, que unía pdf, separa hojas, extraía imágenes, añadía marcas de agua, etc.

A los pocos meses se declaró obsoleta la mentada librería y al cabo de dos o tres años desapareció de los repositorios de las principales distribuciones. Mi programa a la basura, claro. Aunque han surgido desde entonces otras librerías que hacen cosas parecidas, no me he vuelto a animar a hacerlo otra vez.

Batallitas...



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Miercoles, 04 Marzo 2015, 11:46 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Citar:
para una librería llamada pdftk,

Me suena un programa llamado asi "pdfk" y haberlo usado en algunas de mis aplicaciones... en Debian , se puede descargar sin problemas.



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Miercoles, 04 Marzo 2015, 14:28 ]
Responder citando    Descargar mensaje  
Mensaje Re: Buscando Nombres De Archivos Por Coincidencias 
 
Shordi:

Obsolescencia, desde luego es un palo para el profesional, no queda otro remedio que actualizar esa aplicación.
En mi caso, primero lo hice con gambas, luego vi que se podía hacer desde Shell y por ultimo una mezcla de los dos.
Y así hasta mejorar lo que hecho, buscando alternativas en  Shell, actualmente.

En el caso de gambas si es una programación general, no tendría por que quedarse obsoleto.
Mientras gambas exista, claro.

Si la herramienta es muy importante para el programador, no tiene otra que actualizar.

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Miercoles, 04 Marzo 2015, 14:46 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron