Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busqueda en texto por "máscara"... (https://www.clubdelphi.com/foros/showthread.php?t=86658)

n3mohack 12-09-2014 15:04:44

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.

Neftali [Germán.Estévez] 12-09-2014 15:48:52

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.

n3mohack 12-09-2014 19:22:12

Cita:

Empezado por Neftali (Mensaje 481276)
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.

nlsgarcia 13-09-2014 02:14:22

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...

:rolleyes:

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.

n3mohack 15-09-2014 19:39:47

Cita:

Empezado por nlsgarcia (Mensaje 481360)
n3mohack,


:rolleyes:


^\||/

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...


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

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