16 de abril de 2008

Búsquedas de archivos y texto con Filer.dll

El componente Filer.dll que se incluye desde las primeras versiones de Visual FoxPro nos brinda un motor de búsqueda de archivos y de texto.

Este componente DLL no tiene una interfaz de usuario. Se puede crear una instancia del objeto Filer en un programa, y buscar archivos y textos sin la intervención del usuario.

Una vez instanciado, se especifican las condiciones de búsqueda de archivos y/o texto, y se ejecuta el método Find(). Este método retorna un objeto colección con sus propiedades, que permiten obtener información de los archivos que cumplen las condiciones de la búsqueda; y métodos que permiten editar o eliminar estos archivos.

Ejemplos

1. Búsqueda del archivo "Customer.dbf":
LOCAL loFiler AS 'Filer.FileUtil'

*-- Creo el objeto
loFiler = CREATEOBJECT('Filer.FileUtil')
*-- Indico la ruta
loFiler.SearchPath = HOME(1)
*-- Indico el archivo o mascara (Ej: *.dbf)
loFiler.FileExpression = 'Customer.dbf'
*-- Indico que busque en subcarpetas
loFiler.SubFolder = 1
*-- Busco...
loFiler.Find(0)

IF loFiler.Files.Count > 0
  ? TRANSFORM(loFiler.Files.Count) + ' archivo/s encontrado/s'
  ?
  FOR lnCant = 1 TO loFiler.Files.Count
    WITH loFiler.Files.Item(lnCant)
      ? 'Archivo ' + TRANSFORM(lnCant)
      ? 'Ruta: ' + .Path
      ? 'Nombre: ' + .Name
      ? 'Tamaño: ' + TRANSFORM(.Size)
      ? 'Creado: ' + TRANSFORM(DATETIME(1899,12,30) + .DateTime * 86400)
      ? 'Modificado: ' + TRANSFORM(DATETIME(1899,12,30) + .LastWriteTime * 86400)
      ? 'Ultimo acceso: ' + TRANSFORM(DATETIME(1899,12,30) + .LastAccessTime * 86400)
      ?
    ENDWITH
  ENDFOR
ELSE
  ? 'El archivo no se encontró.'
ENDIF
loFiler = NULL
2. Búsqueda del texto "Microsoft" en archivos "*.TXT":
LOCAL loFiler AS 'Filer.FileUtil'

*-- Creo el objeto
loFiler = CREATEOBJECT('Filer.FileUtil')
*-- Indico la ruta
loFiler.SearchPath = HOME(1)
*-- Indico el archivo o mascara (Ej: *.dbf)
loFiler.FileExpression = '*.TXT'
*-- Indico que NO busque en subcarpetas
loFiler.SubFolder = 0
*-- Indico el texto a buscar
loFiler.SearchText1 = "Microsoft"
*-- Busco...
loFiler.Find(0)

IF loFiler.Files.Count > 0
  FOR lnCant = 1 TO loFiler.Files.Count
   *-- Edito el archivo
   loFiler.Files.Item(lnCant).Edit
  ENDFOR
ELSE
  MESSAGEBOX('No se encontró el texto en ningún archivo.',64,'Aviso')
ENDIF
loFiler = NULL

Notas adicionales

1. Visual FoxPro incluye un formulario de ejemplo, donde se muestra una interfaz de usuario para Filer.dll. Para ver este formulario, ejecute:
DO FORM (HOME(1) + 'Tools\Filer\Filer.scx')
Al ejecutar el formulario Filer.scx se agrega el elemento Filer al menú de Herramientas (Tools) de Visual FoxPro, que permanece por toda la sesión de VFP.
2. Las propiedades de fechas y horas (DateTime, LastWriteTime y LastAccessTime), retornan un valor numérico, donde la parte entera es la cantidad de días transcurridos desde el 30 de diciembre de 1899; y la parte fraccionaria es la fracción del día que determina la hora.

3. Todos los archivos que se encuentran en la carpeta \Tools\Filer del directorio de instalación de Visual FoxPro pueden ser distribuidos con nuestras aplicaciones.

4. Puede ver información mas detallada de todas las propiedades y métodos del objeto Filer, en la ayuda de VFP, bajo el tema Filer.dll.

Luis María Guayán

1 comentario :

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.