Buscando Nombres De Archivos Por Coincidencias


Ir a la página 1, 2  Siguiente

Objetivo: 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
Objetivo: 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
Objetivo: Re: Buscando Nombres De Archivos Por Coincidencias
Citar:
y sin base de datos ni na!.


Es lo que tiene

Perfil MP  
Objetivo: 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
Objetivo: 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.

Perfil MP  
Objetivo: 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

Objetivo: 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
Perfil MP  
Objetivo: 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...

Perfil MP  
Objetivo: 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.

Objetivo: 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

Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4359s (PHP: -75% SQL: 175%)
Consultas SQL: 49 - Debug off - GZIP Activado