Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Buscando Nombres De Archivos Por Coincidencias
Autor Mensaje
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 02 Marzo 2015, 21:22; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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!.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Martes, 03 Marzo 2015, 12:13; editado 3 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Martes, 03 Marzo 2015, 22:17; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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 usuarioEnviar mensaje privado 
Volver arribaPágina inferior
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.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Nombres De Archivos Con Espacios[Solucionado] Sebas General 4 Viernes, 06 Abril 2012, 11:35 Ver último mensaje
jguardon
No hay nuevos mensajes Buscar Coincidencias En Una Palabra Shell Retos de programación 9 Jueves, 23 Octobre 2014, 00:08 Ver último mensaje
Shell
No hay nuevos mensajes Buscando Coincidencias En Una Palabra Shell General 14 Lunes, 17 Noviembre 2014, 17:41 Ver último mensaje
vuott
No hay nuevos mensajes Cambiar Los Nombres De Los Archivos De Min... Shell Shell Scripting 1 Jueves, 16 Julio 2015, 12:43 Ver último mensaje
Shell
 

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


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron