Comodines para búsquedas
Comodines para búsquedas
Buenos días,
Tengo una macro programada para que realice búsquedas de archivos en varias carpetas, los copie en otra carpeta de destino, y los renombre.
El nombre de los archivos lo paso por una hoja de Calc, pero las extensiones no las sé seguro, hastá que no haya encontrado al susodicho archivo.
¿Sabéis si existe alguna forma de que pueda realizar la búsqueda de los archivos sin necesidad de pasarle la extensión, o dando por válida cualquier extensión con un comodín?
Muchas gracias
Tengo una macro programada para que realice búsquedas de archivos en varias carpetas, los copie en otra carpeta de destino, y los renombre.
El nombre de los archivos lo paso por una hoja de Calc, pero las extensiones no las sé seguro, hastá que no haya encontrado al susodicho archivo.
¿Sabéis si existe alguna forma de que pueda realizar la búsqueda de los archivos sin necesidad de pasarle la extensión, o dando por válida cualquier extensión con un comodín?
Muchas gracias
Trabajando bajo:
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
Re: Comodines para búsquedas
Sin ver la macro, al menos en lo que respecta a la forma que tienes de hacer la búsqueda, no creo que podamos ayudarte
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Re: Comodines para búsquedas
Bueno, la macro es un poco larga como para ponerla aquí, y el archivo tiene datos confidenciales, pero lo que puedo poner es un ejemplo:
Espero que esto ayude, como digo es solo un pequeño ejemplo, ya que la macro completa es mucho más compleja, pero a fin de cuentas, es en esto en lo que tengo dificultades.
Gracias
Código: Seleccionar todo
Dim Archivo As String
Archivo = "\\Servidor\Carpeta\ArchivoSinExtension"
NuevaRuta = "\\Servidor\OtraCarpeta\"
If FileExists(Archivo) Then 'Aquí es donde quisiera poder comporbar si el archivo existe
FileCopy Archivo, NuevaRuta 'independientemente de la extension que tenga, es decir solo
End If 'buscando por el nombre, o con un comodín para la extensión
Gracias
Trabajando bajo:
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
Re: Comodines para búsquedas
Supongo que crear una matriz con las extensiones posibles/probables y hacer un bucle For-Next o DoWhile es una posibilidad que ya has desechado ¿o no?
?
?
Código: Seleccionar todo
MatrixExt = ("jpg", "jpeg", "png", "xcf", "svg", "tif", "gif", "odg", "odp", "ods", "odp"...)
For i=0 to LBound(MatrixExt)
Archivo= Archivo & MatrixExt(i)
If FileExists(Archivo) Then 'Aquí es donde quisiera poder comporbar si el archivo existe
FileCopy Archivo, NuevaRuta 'independientemente de la extension que tenga, es decir solo
End If 'buscando por el nombre, o con un comodín para la extensión
Exit For
Next iTodo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Re: Comodines para búsquedas
Gracias por la respuesta
Si le deseché por que los archivos que busco tienen una variedad de extensiones muy grande, ya que son archivos que otro programa genera y que pueden variar mucho. Estamos hablando de más de 300 extensiones distintas, por lo que realizarle un bucle de más de 300 vueltas para cada archivo a buscar, ralentizaría mucho el proceso.
Gracias de nuevo
Si le deseché por que los archivos que busco tienen una variedad de extensiones muy grande, ya que son archivos que otro programa genera y que pueden variar mucho. Estamos hablando de más de 300 extensiones distintas, por lo que realizarle un bucle de más de 300 vueltas para cada archivo a buscar, ralentizaría mucho el proceso.
Gracias de nuevo
Trabajando bajo:
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
Re: Comodines para búsquedas
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Re: Comodines para búsquedas
Gracias por la respuesta
La función dir no me sería válida(al menos hasta donde yo sé), ya que los archivos los busco en unas 100 carpetas distintas (nunca puedo saber en cual de ellas va a estar), y cada una de ellas puede contener desde 0 hasta miles de archivos. Por lo que necesitaría de nuevo unos bucles demasiado largos.
Es por eso, que uso la función dir para sacar las rutas de todas las carpetas donde voy a realizar la búsqueda, y despues averiguo si el archivo que necesito está dentro con FileExists.
Gracias de nuevo
La función dir no me sería válida(al menos hasta donde yo sé), ya que los archivos los busco en unas 100 carpetas distintas (nunca puedo saber en cual de ellas va a estar), y cada una de ellas puede contener desde 0 hasta miles de archivos. Por lo que necesitaría de nuevo unos bucles demasiado largos.
Es por eso, que uso la función dir para sacar las rutas de todas las carpetas donde voy a realizar la búsqueda, y despues averiguo si el archivo que necesito está dentro con FileExists.
Gracias de nuevo
Trabajando bajo:
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
Re: Comodines para búsquedas
Lo siento, pero no veo el problema.
FileExist no admite el uso de comodines. Como mínimo, tienes que probar todas las opciones posibles creando la ruta-nombre-extensión exacta para determinar si existe o no, y copiarlo
DIR si premite el uso de comodines. Y te devuelve el nombre-extensión de cada archivo.
Si tienes 1000 archivos por carpeta, tardará como mucho lo mismo, pero no más, DIR que FileExists.
Y no necesitas hacer ningún bucle complicado.
FileExist no admite el uso de comodines. Como mínimo, tienes que probar todas las opciones posibles creando la ruta-nombre-extensión exacta para determinar si existe o no, y copiarlo
DIR si premite el uso de comodines. Y te devuelve el nombre-extensión de cada archivo.
Si tienes 1000 archivos por carpeta, tardará como mucho lo mismo, pero no más, DIR que FileExists.
Y no necesitas hacer ningún bucle complicado.
Código: Seleccionar todo
Sub Main()
CopiaArchivos( "C:\Program Files\OpenOffice 4\", "C:\Backup\", "readme.*")
End Sub
Sub CopiaArchivos( cOrigen, cDestino, cFiltro)
Dim cArchivo As String
if right(cOrigen,1)<>"\" then cOrigen = cOrigen & "\"
if right(cDestino,1)<>"\" then cDestino= cDestino & "\"
cArchivo = Dir(cOrigen & cFiltro, 0)
Do While cArchivo>""
filecopy cOrigen & cArchivo, cDestino & cArchivo
cArchivo=Dir
Loop
MsgBox "Proceso finalizado"
End Sub+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Re: Comodines para búsquedas
Gracias por la respuesta
Quizá es que yo no estoy entendiendo bien tu solución, pero mediante el código que indicas, realizo un bucle para copiar todos los archivos. Yo lo que necesito es saber si un archivo está dentro de una de las carpetas y, en ese caso, copiarlo. No necesito copiar todos los demás archivos.
Es por eso que creo que Dir me alargaría mucho los bucles, ya que tendría que pasar por todos los archivos de las carpetas comprobando si coinciden o no con el que yo busco, y después copiarlo. FileExists me dice sin necesidad de bucles si existe el archivo o no.
De todas formas, por lo que estoy viendo, no parece que haya ninguna forma de hacerlo mediante esta función, pero si se os ocurre algo más, se agradece.
Gracias de nuevo
Quizá es que yo no estoy entendiendo bien tu solución, pero mediante el código que indicas, realizo un bucle para copiar todos los archivos. Yo lo que necesito es saber si un archivo está dentro de una de las carpetas y, en ese caso, copiarlo. No necesito copiar todos los demás archivos.
Es por eso que creo que Dir me alargaría mucho los bucles, ya que tendría que pasar por todos los archivos de las carpetas comprobando si coinciden o no con el que yo busco, y después copiarlo. FileExists me dice sin necesidad de bucles si existe el archivo o no.
De todas formas, por lo que estoy viendo, no parece que haya ninguna forma de hacerlo mediante esta función, pero si se os ocurre algo más, se agradece.
Gracias de nuevo
Trabajando bajo:
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
Re: Comodines para búsquedas
Si un programa genera y guarda información en tal cantida de carpetas, y no se sabe donde queda cierto archivo, mmmm!!!, veo un gran problema en este programa...ProfSteam escribió:los archivos los busco en unas 100 carpetas distintas
pero.. se, que a veces se tiene que trabajar con lo que hay...
dices que haces la busqueda en una 100 carpetas distintas, ¿estas carpetas tienen una raíz común o están todas separadas?, ¿requieres hacer busqueda recursiva o solo directamente en la carpeta?, si no tienes la extensión, ¿si tienes el nombre "exacto" del archivo a buscar?
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
Re: Comodines para búsquedas
Gracias por la respuesta
Si, la verdad es que las aplicaciones de las que disponemos no son una maravilla... pero como tu dices, se trabaja con lo que hay...
Las carpetas tienen una raiz común, es por eso que uso Dir para listar todas las carpetas que hay en la raiz, y despues busco el archivo en cada una de las subcarpetas de esa raiz.
Los nombres exactos los tengo siempre, eso si, y además nunca se repiten (los nombres de los archivos son siempre un código de unos 12 dígitos, que son generados automáticamente por el programa que crea el archivo).
Puedo ser un poco más especifico: los archivos son audios grabados de llamadas telefónicas, dependiendo del servicio que emita o reciba la llamada, se genera un archivo con esa grabación, es por eso que hay miles de archivos y más de 100 carpetas. Para identificar de qué servicio es la grabación, el programa que las crea, les pone como extensión una clave que identifica el servicio.
En mi caso, solo me interesa obtener ciertas grabaciones. El problema está en que el programa que genera los archivos falla mas que una escopeta de feria, y cuando no lo tiene claro, le pone la extensión que le da la gana y lo mete en la carpeta que le da la gana, pero el nombre del archivo siempre está bien.
Es por eso que necesito buscar en todas las carpetas con cualquier extensión posible, pero sin listar todos los archivos que contienen las carpetas. De ahí el uso de FileExists, que no necesita bucles, solo que le vaya dando las rutas y me dice si está o no.
Espero haber aclarado alguna duda. Muchas gracias
Si, la verdad es que las aplicaciones de las que disponemos no son una maravilla... pero como tu dices, se trabaja con lo que hay...
Las carpetas tienen una raiz común, es por eso que uso Dir para listar todas las carpetas que hay en la raiz, y despues busco el archivo en cada una de las subcarpetas de esa raiz.
Los nombres exactos los tengo siempre, eso si, y además nunca se repiten (los nombres de los archivos son siempre un código de unos 12 dígitos, que son generados automáticamente por el programa que crea el archivo).
Puedo ser un poco más especifico: los archivos son audios grabados de llamadas telefónicas, dependiendo del servicio que emita o reciba la llamada, se genera un archivo con esa grabación, es por eso que hay miles de archivos y más de 100 carpetas. Para identificar de qué servicio es la grabación, el programa que las crea, les pone como extensión una clave que identifica el servicio.
En mi caso, solo me interesa obtener ciertas grabaciones. El problema está en que el programa que genera los archivos falla mas que una escopeta de feria, y cuando no lo tiene claro, le pone la extensión que le da la gana y lo mete en la carpeta que le da la gana, pero el nombre del archivo siempre está bien.
Es por eso que necesito buscar en todas las carpetas con cualquier extensión posible, pero sin listar todos los archivos que contienen las carpetas. De ahí el uso de FileExists, que no necesita bucles, solo que le vaya dando las rutas y me dice si está o no.
Espero haber aclarado alguna duda. Muchas gracias
Trabajando bajo:
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
Re: Comodines para búsquedas
La solución que tienes copia sólo los archivos que cumplen con el comodín a la carpeta destino.
Si lo pruebas lo verás.
Es justo lo que pediste, y no hay otra forma.
Pero eres libre de utilizarlo, o no.
Saludos
Si lo pruebas lo verás.
Es justo lo que pediste, y no hay otra forma.
Pero eres libre de utilizarlo, o no.
Saludos
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Re: Comodines para búsquedas
A ver, a ver; que a lo mejor no he entendido nada (y eso que lo has explicado bien)
Sabemos qué buscar: los 12 primeros dígitos del nombre (porque la extensión al parecer es arbitraria por aquello de la escopeta de feria)
Sabemos dónde empezar a buscar: la raíz de la que cuelgan todas las carpetas.
...
¿Porqué no recorrer el directorio; comparar y copiar si/hasta que haya coincidendia de los 12? (o sea, lo que propone SLV-es Editado: con el que mientras tanto, se ha cruzado mi comentario)
Sabemos qué buscar: los 12 primeros dígitos del nombre (porque la extensión al parecer es arbitraria por aquello de la escopeta de feria)
Sabemos dónde empezar a buscar: la raíz de la que cuelgan todas las carpetas.
...
¿Porqué no recorrer el directorio; comparar y copiar si/hasta que haya coincidendia de los 12? (o sea, lo que propone SLV-es Editado: con el que mientras tanto, se ha cruzado mi comentario)
Todo es mejorable, estamos dispuestos a mejorar. ¿Yo? ... poco a poco.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Nunca hay acritud en mis comentarios, si lo pareciera, seguro que me he expresado mal.
Re: Comodines para búsquedas
Gracias por la respuesta
Gracias por el esfuerzo, pero como comenté, la solución no me es válida ya que tengo que seguir recorriendo los archivos para compararlos, por lo que siguen siendo bucles demasiado largos. Si tengo suerte, los archivos los encontrará rápidamente en la primera carpeta, pero si no es el caso y resulta que los archivos estan en la última carpeta, habrá realizado un total de más de 10.000 comprobaciones inútiles por cada archivo que necesite encontrar (todo esto, a no ser que yo no haya entendido bien algo...).
De todas formas, gracias de nuevo
Gracias por el esfuerzo, pero como comenté, la solución no me es válida ya que tengo que seguir recorriendo los archivos para compararlos, por lo que siguen siendo bucles demasiado largos. Si tengo suerte, los archivos los encontrará rápidamente en la primera carpeta, pero si no es el caso y resulta que los archivos estan en la última carpeta, habrá realizado un total de más de 10.000 comprobaciones inútiles por cada archivo que necesite encontrar (todo esto, a no ser que yo no haya entendido bien algo...).
De todas formas, gracias de nuevo
Trabajando bajo:
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
OpenOffice 4.2.2 - Dise??o de macros
OpenOffice 3.2 - Ejecuci??n de macros
Windows XP
Re: Comodines para búsquedas
Pues creo que lo que no se ha entendido es que para localizar la existencia de un archivo en 10.000 carpetas, no queda otra que buscar el archivo en las 10.000 carpetas; sí que puedes detener el proceso si lo encuentra en la carpeta 300 o 3000, pero no hay otra.
A menos que:
- realices un inventario inicial de todos los archivos recorriendo todas las carpetas y guardando la información en un array (lo que puede saturar la memoria) o mejor almacenarlos en una hoja de cálculo o en una tabla de base de datos, y una vez realizado ese inventario, buscar en él los archivos. De esta forma sólo tienes que recorrer una vez las carpetas. Este proceso puede ser más rápido y eficiente si es que necesitas recorrer varias veces los 10.000 directorios, pero no es más rápido si sólo tienes que recorrerlo una vez.
- encuentres algo en la API de Windows que busque en todas las carpetas dentro de una carpeta (cosa que desconozco si existe) y escribas una macro desde AOO que llame a la función de la API de Windows; por supuesto, sólo funcionará en sistemas Windows.
Al menos, a mi entender, no hay más opciones.
A menos que:
- realices un inventario inicial de todos los archivos recorriendo todas las carpetas y guardando la información en un array (lo que puede saturar la memoria) o mejor almacenarlos en una hoja de cálculo o en una tabla de base de datos, y una vez realizado ese inventario, buscar en él los archivos. De esta forma sólo tienes que recorrer una vez las carpetas. Este proceso puede ser más rápido y eficiente si es que necesitas recorrer varias veces los 10.000 directorios, pero no es más rápido si sólo tienes que recorrerlo una vez.
- encuentres algo en la API de Windows que busque en todas las carpetas dentro de una carpeta (cosa que desconozco si existe) y escribas una macro desde AOO que llame a la función de la API de Windows; por supuesto, sólo funcionará en sistemas Windows.
Al menos, a mi entender, no hay más opciones.
+info en la web "no oficial" dedicada a OpenOffice en Español
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
AOO 4.1.2 y LibO 4.4.6 en W10 y en Lliurex
No respondo mensajes privados sobre AOO, por favor, utiliza el foro para tus preguntas
Re: Comodines para búsquedas
la raíz del sistema de carpetas donde hay que buscar ¿es local o de red?, ¿que sistema operativo tiene?...
Una solución alternativa es tener un controlador de eventos por sistema de archivos, me explico con un ejemplo que tengo trabajando, si yo tengo el siguiente árbol:
En cualquiera de ellas puede caer (crearse) archivos XML que tengo que enviar por internet a un webservices, en cuanto se crea un nuevo archivo en cualquiera de estas carpetas, se desencadena un evento, halgo así como CREATE FILE, el cual se captura y se procesa pues se tiene el nombre exacto y completo del archivo que lo desencadena, envío el archivo y al regreso lo muevo a otra carpeta, con este método, no usas ciclos ni busquedas, claro esta, si por alguna razón no se desencadena el evento, debes tener una alternativa para correr el proceso de otra manera...
Esto lo tengo trabajando en Linux, supongo que funcionará en Windows...
Saludos
Una solución alternativa es tener un controlador de eventos por sistema de archivos, me explico con un ejemplo que tengo trabajando, si yo tengo el siguiente árbol:
Código: Seleccionar todo
test
├── folder1
├── folder2
│ ├── subfolder1
│ └── subfolder2
└── folder3
Esto lo tengo trabajando en Linux, supongo que funcionará en Windows...
Saludos
______________________________________________
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro
"Todo cuanto no podemos dar nos posee". - André Gide
LibreOffice 6.2 | ArchLinux | Gnome3
No respondo preguntas privadas, por favor, usa el foro