Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2016-08

alternativa a TFPExpressionParser

3 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Rafael Bidegain

hola a todos.

Tengo que hacer una utilidad para hacer búsquedas sobre archivos de texto. El problema es que el usuario necesita buscar algunas veces con 1 condición otras con dos o tres condiciones. y no siempre sobre el mismo campo.

La solución con TFPExpressionParser no me desagrada, pero estoy buscando eficiencia ya que intuyo que en no mucho tiempo el usuario me va a pedir que el proceso se haga automáticamente sobre un grupo de archivos.(ahora abre un archivo con un TOpendialog, los parámetros de búsqueda se cargan en un TStringGrid)

cada archivo tiene 40.000 registros.

por el momento los conectores lógicos son todos and y lo resuelvo así
     fparser := TFPExpressionParser.Create(nil);
     identifier1 := fparser.Identifiers.AddIntegerVariable('x1',0);
     identifier1 := fparser.Identifiers.AddIntegerVariable('x2',0);
     fparser.Expression := '';
     if trim(StringGrid1.Cells[1,1])  '' then //ctacte
     begin
          fparser.Expression := '(x1=0)';
     end;
          if length(fparser.Expression) > 0 then
             fparser.Expression := fparser.Expression + ' and (x2=0)'
          else
             fparser.Expression := '(x2=0)';

gracias!

Rafael Bidegain Ya que los cuerdos no hablan, hablará el loco. (The Fool, Padraic Pearse) # yo quiero educación libre. ¡YA! ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20160820/13002dd0/attachment.html>

Reply by email

Jesus Reyes A.
to Rafael Bidegain
Rafael Bidegain wrote 39 lines
hola a todos. Tengo que hacer una utilidad para hacer búsquedas sobre archivos de texto. El problema es que el usuario necesita buscar algunas veces con 1 condición otras con dos o tres condiciones. y no siempre sobre el >mismo campo. La solución con TFPExpressionParser no me desagrada, pero estoy buscando eficiencia ya que intuyo que en no mucho tiempo el usuario me >va a pedir que el proceso se haga automáticamente sobre un grupo de archivos.(ahora abre un archivo con un TOpendialog, los parámetros >de búsqueda se cargan en un TStringGrid) cada archivo tiene 40.000 registros. por el momento los conectores lógicos son todos and y lo resuelvo así fparser := TFPExpressionParser.Create(nil); identifier1 := fparser.Identifiers.AddIntegerVariable('x1',0); identifier1 := fparser.Identifiers.AddIntegerVariable('x2',0); fparser.Expression := ''; if trim(StringGrid1.Cells[1,1]) '' then //ctacte begin fparser.Expression := '(x1=0)'; end; if length(fparser.Expression) > 0 then fparser.Expression := fparser.Expression + ' and (x2=0)' else fparser.Expression := '(x2=0)'; gracias! --Rafael Bidegain Ya que los cuerdos no hablan, hablará el loco. (The Fool, Padraic Pearse) # yo quiero educación libre. ¡YA!

No entiendo bien si tu pregunta es con respecto de la manera de crear una expresión de una manera mas eficiente o si de un método de hacer la búsqueda en si mas eficiente.

Opto por lo segundo, y aunque parece que tus búsquedas son mas especializadas, en este enlace hablan al respecto de busquedas de texto utilizando el algoritmo Boyer-Moore, fue el primer resultado que encontré quizás existan mas.
http://forum.lazarus.freepascal.org/index.php/topic,23136.0.html

Jesus Reyes A.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20160825/0b12d84d/attachment.html>

Reply by email

Martin Gomez
to Jesus Reyes A.

Yo lo haría armando una linea de comando para el utilitario "grep" y parseando el resultado.

2016-08-25 14:15 GMT-03:00 Jesus Reyes A. <jesusrmx en gmail.com>:

Show quoted text 61 lines
On Sat, 20 Aug 2016 12:19:50 -0500, Rafael Bidegain <r.bidegain en gmail.com> wrote: hola a todos. Tengo que hacer una utilidad para hacer búsquedas sobre archivos de texto. El problema es que el usuario necesita buscar algunas veces con 1 condición otras con dos o tres condiciones. y no siempre sobre el mismo campo. La solución con TFPExpressionParser no me desagrada, pero estoy buscando eficiencia ya que intuyo que en no mucho tiempo el usuario me va a pedir que el proceso se haga automáticamente sobre un grupo de archivos.(ahora abre un archivo con un TOpendialog, los parámetros de búsqueda se cargan en un TStringGrid) cada archivo tiene 40.000 registros. por el momento los conectores lógicos son todos and y lo resuelvo así fparser := TFPExpressionParser.Create(nil); identifier1 := fparser.Identifiers.AddIntegerVariable('x1',0); identifier1 := fparser.Identifiers.AddIntegerVariable('x2',0); fparser.Expression := ''; if trim(StringGrid1.Cells[1,1]) '' then //ctacte begin fparser.Expression := '(x1=0)'; end; if length(fparser.Expression) > 0 then fparser.Expression := fparser.Expression + ' and (x2=0)' else fparser.Expression := '(x2=0)'; gracias! -- Rafael Bidegain Ya que los cuerdos no hablan, hablará el loco. (The Fool, Padraic Pearse) # yo quiero educación libre. ¡YA! No entiendo bien si tu pregunta es con respecto de la manera de crear una expresión de una manera mas eficiente o si de un método de hacer la búsqueda en si mas eficiente. Opto por lo segundo, y aunque parece que tus búsquedas son mas especializadas, en este enlace hablan al respecto de busquedas de texto utilizando el algoritmo Boyer-Moore, fue el primer resultado que encontré quizás existan mas. http://forum.lazarus.freepascal.org/index.php/ topic,23136.0.html Jesus Reyes A. _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus-ide.org http://lists.lazarus-ide.org/listinfo/lazarus-es
​ Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program. ​ ​ *Linus Torvalds* ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20160827/726c514c/attachment.html>

Reply by email