Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-09-2014
Avatar de n3mohack
n3mohack n3mohack is offline
Miembro
 
Registrado: may 2004
Ubicación: Chile-Stgo-Huechuraba
Posts: 41
Poder: 0
n3mohack Va por buen camino
Busqueda en texto por "máscara"...

Buenas.. seguro con el título no he dicho mucho así que acá va la explicación..

Necesito implementar una función de búsqueda de un patrón de texto en otro texto, si, para eso puedo utilizar por ej. PosEx.
El tema es que el patrón de búsqueda lo define el usuario en base a "máscaras", ej.

Patrón definido por el usuario: 99/99/9999

Al buscar por ese patrón-máscara en un texto X, debería retornar todas las cadenas que coincidan con el formato que en este caso es del tipo fecha, ej. 12/09/2014, la línea donde se encuentra y en que posición (estas 2 últimas las podría obtener luego con PosEx en el peor de los casos).

dudo que exista una función que cumpla ese objetivo.. con mucha suerte un componente.

Favor sus sugerencias...
Gracias de antemano.
__________________
Si es Chileno.. es bueno.
Responder Con Cita
  #2  
Antiguo 12-09-2014
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Tal vez las expresiones regulares solventen tu problema.
Dos excelentes artículos de cómo funcionan puedes encontrarlos aquí. Échales un vistazo y haz alguna prueba a ver si solventan en problema que planteas.

Expresiones regulares, Novedad en XE. Parte1 y Parte2.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 12-09-2014
Avatar de n3mohack
n3mohack n3mohack is offline
Miembro
 
Registrado: may 2004
Ubicación: Chile-Stgo-Huechuraba
Posts: 41
Poder: 0
n3mohack Va por buen camino
Talking

Cita:
Empezado por Neftali Ver Mensaje
Tal vez las expresiones regulares solventen tu problema.
Dos excelentes artículos de cómo funcionan puedes encontrarlos aquí. Échales un vistazo y haz alguna prueba a ver si solventan en problema que planteas.

Expresiones regulares, Novedad en XE. Parte1 y Parte2.
Se me fue comentar algo muuuuuy importante... estoy trabajando en Delphi 7.
__________________
Si es Chileno.. es bueno.
Responder Con Cita
  #4  
Antiguo 13-09-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
n3mohack,

Cita:
Empezado por n3mohack
...Necesito implementar una función de búsqueda de un patrón de texto en otro texto...Patrón definido por el usuario: 99/99/9999...estoy trabajando en Delphi 7...


Cita:
Empezado por Neftali
...Tal vez las expresiones regulares solventen tu problema...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, RegExpr;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Busca fechas en el formato dd/mm/yyyy por medio de expresiones regulares
procedure TForm1.Button1Click(Sender: TObject);
var
   RE : TRegExpr;
   ArrayDates : Array[0..5] of String;
   i : Integer;
   MsgApp : String;
   MaskDate : String;

begin

   MaskDate := '99/99/9999';

   ArrayDates[0] := '01/07/2014';
   ArrayDates[1] := '01/07/14';
   ArrayDates[2] := '1/7/14';
   ArrayDates[3] := '01/07/2014 es la fecha de prueba';
   ArrayDates[4] := 'La fecha 01/07/2014 es la fecha de prueba';
   ArrayDates[5] := 'La fecha de prueba es 01/07/2014';

   RE := TRegExpr.Create;

   RE.Expression := '[[0-9]{2}/[0-9]{2}/[0-9]{4}';

   for i := Low(ArrayDates) to High(ArrayDates) do
   begin
      if RE.Exec(ArrayDates[i]) then
      begin
         MsgApp := Format('Formato de Fecha %s Encontrado en : %s',[MaskDate,ArrayDates[i]]);
         MessageDlg(MsgApp,mtInformation,[mbOK],0);
      end
      else
      begin
         MsgApp := Format('No encontrado Formato de Fecha %s en : %s',[MaskDate,ArrayDates[i]]);
         MessageDlg(MsgApp,mtInformation,[mbOK],0);
      end;

   end;

   RE.Free;

end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, permite buscar fechas con el formato 'dd/mm/yyyy' en un string por medio de expresiones regulares, a través de la librería : TRegExpr - Freeware Delphi Regular Expressions Library.

La librería TRegExpr - Freeware Delphi Regular Expressions Library (Español e Ingles) esta disponible en : TRegExpr - Delphi Regular Expressions Library.rar

Nota: Para usar la librería solo se debe incluir la ruta de sus unidades en : Tools->Environment Options->Library->Library path.

Revisa esta información:
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 13-09-2014 a las 02:34:18.
Responder Con Cita
  #5  
Antiguo 15-09-2014
Avatar de n3mohack
n3mohack n3mohack is offline
Miembro
 
Registrado: may 2004
Ubicación: Chile-Stgo-Huechuraba
Posts: 41
Poder: 0
n3mohack Va por buen camino
Cita:
Empezado por nlsgarcia Ver Mensaje
n3mohack,







Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, RegExpr;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// Busca fechas en el formato dd/mm/yyyy por medio de expresiones regulares
procedure TForm1.Button1Click(Sender: TObject);
var
   RE : TRegExpr;
   ArrayDates : Array[0..5] of String;
   i : Integer;
   MsgApp : String;
   MaskDate : String;

begin

   MaskDate := '99/99/9999';

   ArrayDates[0] := '01/07/2014';
   ArrayDates[1] := '01/07/14';
   ArrayDates[2] := '1/7/14';
   ArrayDates[3] := '01/07/2014 es la fecha de prueba';
   ArrayDates[4] := 'La fecha 01/07/2014 es la fecha de prueba';
   ArrayDates[5] := 'La fecha de prueba es 01/07/2014';

   RE := TRegExpr.Create;

   RE.Expression := '[[0-9]{2}/[0-9]{2}/[0-9]{4}';

   for i := Low(ArrayDates) to High(ArrayDates) do
   begin
      if RE.Exec(ArrayDates[i]) then
      begin
         MsgApp := Format('Formato de Fecha %s Encontrado en : %s',[MaskDate,ArrayDates[i]]);
         MessageDlg(MsgApp,mtInformation,[mbOK],0);
      end
      else
      begin
         MsgApp := Format('No encontrado Formato de Fecha %s en : %s',[MaskDate,ArrayDates[i]]);
         MessageDlg(MsgApp,mtInformation,[mbOK],0);
      end;

   end;

   RE.Free;

end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, permite buscar fechas con el formato 'dd/mm/yyyy' en un string por medio de expresiones regulares, a través de la librería : TRegExpr - Freeware Delphi Regular Expressions Library.

La librería TRegExpr - Freeware Delphi Regular Expressions Library (Español e Ingles) esta disponible en : TRegExpr - Delphi Regular Expressions Library.rar

Nota: Para usar la librería solo se debe incluir la ruta de sus unidades en : Tools->Environment Options->Library->Library path.

Revisa esta información:


Espero sea útil

Nelson.
Muchas gracias lo voy a revisar...
__________________
Si es Chileno.. es bueno.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usar TServerSocket y TClientSocket para enviar "streams" más o menos "grandes" dec Internet 9 04-08-2015 16:11:50
El programa se queda "colgado" mientras copia y luego "despierta" NeWsP OOP 5 10-03-2010 22:05:40
Rutas de búsqueda de "include" y "require". Ñuño Martínez PHP 2 11-06-2008 17:29:15
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Máscara para "%" Tolón Varios 4 30-01-2007 21:00:38


La franja horaria es GMT +2. Ahora son las 16:41:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi