|
Página 1 de 2
|
Buscando Nombres De Archivos Por Coincidencias
Autor |
Mensaje |
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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
|
#1 Lunes, 02 Marzo 2015, 21:21 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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
|
#2 Lunes, 02 Marzo 2015, 21:49 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Buscando Nombres De Archivos Por Coincidencias
Citar: y sin base de datos ni na!.
Es lo que tiene
|
#3 Martes, 03 Marzo 2015, 11:24 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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
|
#4 Martes, 03 Marzo 2015, 22:15 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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.
|
#5 Miercoles, 04 Marzo 2015, 09:58 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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:
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"
|
#6 Miercoles, 04 Marzo 2015, 10:50 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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
|
#7 Miercoles, 04 Marzo 2015, 11:40 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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...
|
#8 Miercoles, 04 Marzo 2015, 11:46 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
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.
|
#9 Miercoles, 04 Marzo 2015, 14:28 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
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"
|
#10 Miercoles, 04 Marzo 2015, 14:46 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|