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