Ver Mensaje Individual
  #15  
Antiguo 12-08-2010
aarmalo aarmalo is offline
Miembro
 
Registrado: mar 2005
Ubicación: México
Posts: 46
Reputación: 0
aarmalo Va por buen camino
Bueno en python y otros lenguajes existe algo que se llama expresiones regulares, probablemente puedas usar python detrás y sea el que te analice lo que escribiste en el memo, algo así rápido y simple para mostrar lo que te digo, sería:

Código:
import re

buf="Estudio de Globulos en Sangre bla bla bla...\n\n?1 Globulos Rojos = ####\n?2 Globulos Blancos = ####\n\n\n?3 = $1(?1-?2)\n\nResultados = ?3 mlg/g\n?4 = $2(?3-?2)\nOtro resultado ?4 mlg/g"

expresion=("\?([1-9]\s)[^=]")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var
expresion=("\?([1-9].)=(.*?)\n")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var
lo ejecutamos


python prb.py
['1 ', '2 ', '3 ', '4 '] <---Lista las variables
[('3 ', ' $1(?1-?2)'), ('4 ', ' $2(?3-?2)')] <-- Me dice que la variable 3 se va a cargar con la operación representada por ?1-?2 y 4 con la operación ?3-?2

Tienes la función replace, para cuando quieras sustituir las variables con su respectivo valor, en su defecto también puedes hacer uso de las expresiones regulares para reemplazar, es algo muy simple pero extremadamente potente

que tan sólo sería buf.replace("?1","3.141592......")

por ejemplo:
Código:
import re

var1=4.35
var2=2.5
buf="Estudio de Globulos en Sangre bla bla bla...\n\n?1 Globulos Rojos = ####\n?2 Globulos Blancos = ####\n?3 = (?1-?2)\n\nResultados = ?3 mlg/g\n?4 = (?3-?2)\nOtro resultado ?4 mlg/g"
print buf
expresion=("\?([1-9]\s)[^=]")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var
expresion=("\?([1-9].)= (.*?)\n")
r=re.compile(expresion,re.S)
var=r.findall(buf)
print var
funcion=var[0][1]
funcion=funcion.replace("?1",str(var1))
funcion=funcion.replace("?2",str(var2))
var3=eval(funcion)
print '?3 '
print var3
funcion=var[1][1]
funcion=funcion.replace("?3",str(var3))
funcion=funcion.replace("?2",str(var2))
var4=eval(funcion)
print '?4 '
print var4
bb='?'+var[0][0]+'= '+var[0][1]
buf=buf.replace(bb,'')
bb='?'+var[1][0]+'= '+var[1][1]
buf=buf.replace(bb,'')
buf=buf.replace("?1",str(var1))
buf=buf.replace("?2",str(var2))
buf=buf.replace("?3",str(var3))
buf=buf.replace("?4",str(var4))
print buf
En la salida de este programa tendrías:

Código:
 python prb.py
Estudio de Globulos en Sangre bla bla bla...

?1 Globulos Rojos = ####
?2 Globulos Blancos = ####
?3 = (?1-?2)

Resultados = ?3 mlg/g
?4 = (?3-?2)
Otro resultado ?4 mlg/g
['1 ', '2 ', '3 ', '4 ']
[('3 ', '(?1-?2)'), ('4 ', '(?3-?2)')]
?3 
1.85
?4 
-0.65
Estudio de Globulos en Sangre bla bla bla...

4.35 Globulos Rojos = ####
2.5 Globulos Blancos = ####


Resultados = 1.85 mlg/g

Otro resultado -0.65 mlg/g
Ya es cuestión de echarle imaginación y hacerlo tan complejo como lo quieras hacer. Igual te puedes evitar mucho de esto teniendo una tabla de dos columnas donde la primer columna sean los nombres de las variables e la segunda su valor, de lado derecho o izquierdo de la tabla tener el Memo donde escriban el reporte, así se evitarían poner las formulas dentro de Memo, que despues tendrías que quitar a la hora de la impresión.

Si no te gusta la idea de la tabla bien podría ser sustituida por otro Memo donde ellos sólo escriban

Código:
var1=4
var2=5
var3=var1-var2
var4=var3-var1
etc....
y en el otro Memo

Código:
Reporte bla bla bla

var1 Globulos rojos
var2 Globulos blancos

Resultado var3 mlg/g

Otro resultado var4 mlg/g
También puede dar la opción de abrir una plantilla, la cual, ya sea con el otro memo o la tabla tendría listo las variables para que sólo las llenemos con su valor, por ejemplo que aparezca en el Memo o en la Tabla

var1=
var2=
var3=var1-var2
var4=var3-var1

Jejeje hay una infinidad de soluciones para resolver un problema

Si quieres usar completamente delphi, me imagino que en el foro debe de existir mas información sobre las expresiones regulares en delphi

Buscando rapidamente en internet encontré el siguiente enlace
http://www.latiumsoftware.com/es/articles/00009.php <--TRegExpr

Tal vez te sirva
__________________
No todo es lo que parece y lo que parece no es todo.
Responder Con Cita