Opened 20 years ago
Last modified 13 years ago
#297 closed defect
Error en la función TextMatch — at Version 4
Reported by: | fdelamuela | Owned by: | Víctor de Buen Remiro |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | Text | Version: | head |
Severity: | normal | Keywords: | |
Cc: |
Description (last modified by )
La función TextMatch de TOL no funciona bien:
Real TextMatch("farola","*o*a"); da FALSO, de hecho da falso a partir de
tener en el patrón dos caracteres y algún asterisco (por lo menos en todos
los casos en los que lo he probado).
Change History (4)
comment:1 Changed 18 years ago by
Owner: | changed from danirus to Víctor de Buen Remiro |
---|
comment:2 Changed 18 years ago by
Resolution: | → duplicate |
---|---|
Status: | new → closed |
comment:3 Changed 14 years ago by
Component: | Math → Text |
---|---|
Resolution: | duplicate |
Status: | closed → reopened |
No entiendo por qué este bug está cerrado, si el problema persiste:
Real TextMatch("farola", "*o*a"); //> False
El tique #49 (también cerrado) recoge el deseo de tener una función como ésta. Pero si está implementada ya, o se corrije o se quita. Y si no se quita, al menos debería llevar un warning diciendo que no te fíes o allá tú.
Adjunto una variante (como se hacía en #49 basada en SQL) pero basada en Tcl, de modo que sólo es válida si Tcl está presente (tolsh o tolbase):
Real TextMatch_Tcl(Text text, Text pattern, Real case) { Text text.tcl = "{"<<Replace(Replace(Replace(text, "\\", "\\\\"), "{", "\\{"), "}", "\\}") << "}"; Text pattern.tcl = "{"<<Replace(Replace(Replace(pattern, "\\", "\\\\"), "{", "\\{"), "}", "\\}") << "}"; Text caseText = If(case, "", "-nocase "); Eval(Tcl_Eval("string match "<<caseText<<pattern.tcl<<" "<<text.tcl)[1]) }; Real TextMatch("farola", "*o*a"); //-> False Real TextMatch_Tcl("farola","*o*a", 1); //-> True
comment:4 Changed 14 years ago by
Description: | modified (diff) |
---|
Esta es una función que yo no hice y que soy incapaz de descifrar.
Todo lo que puedo hacer es meter TextMatch_Tcl en la StdLib si está TCL activo y luego cortocircuitar TextMatch para que la llame si existe.
Ante todo perdón por la tardanza en la respuesta. Se nos había traspapelado este bug.
La función TextMatch es pobre pero honrada. Lo que hace es exactamente lo que dice que va a hacer. Sería bueno que existiese una verdadera función de reconocimiento de expresiones regulares pero eso ya estaba pedido en el bug 49 así que lo pongo como duplicado a la espera de tiempo para su desarrollo.
Real TextMatch(Text cadena, Text modelo [, Real modo = 0 ])
Devuelve verdadero si el modelo o patrón es equiparable con una cadena dada. Trabaja o no de modo sensible a mayúsculas y minúsculas. Si no es especificado dicho modo, se sobreentiende el caso no sensible.El carácter comodín * puede equipararse a cualquier combinación de uno o más caracteres. El carácter comodín * único puede usarse al comienzo o al final del modelo.
Ejemplos:
* This bug has been marked as a duplicate of bug 49 *