![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
|
Sobre las funciones Pos y PosEx en Delphi
Hola,
En cierto programa con el que estoy útilmamente algo liado compuse un componente muy sencillo que permite que se pueda buscar un determinado texto (una determinada cadena) en archivos (así, para qué iba a quedarme corto, total). Es el caso que en un momento dado utilizo la función "Pos" de Delphi, que, justamente, devuelve la posición de una determinada cadena en un texto dado, objetivo fundamental del componente susomentado. Lo que me preocupa es lo siguiente: Donde "j" es una variable de tipo integer que guardará el resultado de la función "Pos"; "FTextoABuscar" es la cadena que se trata de encontrar... y "archivo" es una variable de tipo "TStringsList" mediante cuya propiedad "Text" obtenemos ya el texto contenido en un determinado archivo en el que buscar la cadena de marras. Mi preocupación pasa porque el texto en donde buscar puede ser considerable, teniendo en cuenta que el componente "buscador" que he tomado por solución no es muy inteligente (cómo iba a serlo) y no discrimina archivos de menos de 5 MB, por ejemplo, y permite buscar en todo tipo de archivos, aun cuando en realidad no sepa qué hacer con algunos de ellos, o para qué los quiere, si no va a saber procesarlos correctamente. Yo creo que se me entiende: ¿Hay alguna forma mejor y más razonable, eficaz, indicada, pertinente, en fin, no que usar la función "Pos" teniendo en cuenta lo que digo, que los archivos pueden ser considerables y, por ende, el texto en el que va a tener que operar dicha función puede ser también considerable, incluso una barbaridad, a mi entender? A lo mejor es que lo que yo entiendo por barbaridad no lo es tanto. O a lo mejor los tiros van por utilizar la función "PosEx" de Delphi. No les quiero aburrir, pero esta función cuenta con un parámetro más, que, de nombre "OffSet" a mí me parece algo espacial, ¿entienden? Como que pudiera resultar mejor, pero tal vez me equivoque, porque "tantum locus est". Además de que la ayuda de Delphi para las funciones mencionadas es algo así como "y hasta aquí puedo leer..." y me quedo con un palmo de narices. Termino ya, pero, no quiero dejar de decir algo. ¡Que me preocupa todo lo que he contado, que lo he hecho para ver qué me aconsejan o qué me dicen, pero, en todo caso, el componente no funciona del todo mal, es bastante rápido buscando archivos y texto en ellos, podría incluso decirse que uno está más o menos contento con el resultado! Puesto que comparado con programas de la talla de "Search and Replace" ni remotamente se parecen, claro está, pero los tiempos de búsqueda van ahí, ahí... que no se diferencian en mucho en "benchmark" caseros. Por cierto, adjunto el archivo ".pas" por si quieren echar un vistazo a este "TBuscadorTextoArchivos" que es el culpable de que halla escrito esto. Además de que ha sido un placer, dirigiéndose a quien va dirigido. * Nota: Pueden ver el "componente" en funcionamiento en XEditor ![]() * Otra nota: Gracias de antemano y disculpen todo este rollo. Actualización: he actualizado el archivo adjunto para incluir un mensaje y aun algo más para el usuario en caso de producirse cierta excepción utilizando el componente. Lo noto aquí para que quien lo descargara antes vea que he preferido hacerlo de este otro modo, aprovechando la revisión del componente que he hecho para tratar el tema aquí. Última edición por dec fecha: 25-07-2005 a las 23:47:43. Razón: (Actualizar el archivo adjunto) |
|
|
|