Las expresiones regulares no son mi fuerte
Necesitaba hacer una expresión regular que me permitiera cambiar de las sintaxis
Call(Objeto,&ParametroIN, ......, &ParametroOUT)
a
&ParametroOUT = Objeto.udp(&ParametroIN,......)
La expresión regular mas sencilla que encontré (con la invalorable ayuda de Nicolás) , que funciona bien en los casos que los probé es:
(\s+)?(call\(({0})([\s\b]*)(,(.*)(,[\s\b]*)(&([a-z0-9\-]+))|,(.*)(&([a-z0-9\-]+)))[\s\b]*\)|(({0})(.call) ?\(((.*)(,[\s\b]*)(&([a-z0-9\-]+))|(.*)(&([a-z0-9\-] +)))[\s\b]*\)))
donde debo remplazar {0} por el nombre del objeto.
Luego debe remplazar en el código con la expresión super amigable:
$1$8$11$19$22 = $3$14.udp($6$17)
La potencia de las expresiones regulares es asombrosa, pero también es asombroso lo complejas que pueden quedar con casos bastantes sencillos.
PD: La próxima version de KBDoctor, tendrá una opción que identifica los programas que tienen todos los parámetros IN, menos el ultimo OUT y cambia todas las invocaciones al formato UDP. Esto hace el código mas claro y que GeneXus detecte algunos errores al especificar.
UPDATE: Tuve que actualizarla a
(\s+)?(call\([\s\b]*({0})([\s\b]*)(,(.*)(,[\s\b]*)(&([a-z0-9\-]+))|,(.*)(&([a-z0-9\-]+)))[\s\b]*\)|(({0})(.call) ?\(((.*)(,[\s\b]*)(&([a-z0-9\-]+))|(.*)(&([a-z0-9\-] +)))[\s\b]*\)))
Call(Objeto,&ParametroIN, ......, &ParametroOUT)
a
&ParametroOUT = Objeto.udp(&ParametroIN,......)
La expresión regular mas sencilla que encontré (con la invalorable ayuda de Nicolás) , que funciona bien en los casos que los probé es:
(\s+)?(call\(({0})([\s\b]*)(,(.*)(,[\s\b]*)(&([a-z0-9\-]+))|,(.*)(&([a-z0-9\-]+)))[\s\b]*\)|(({0})(.call) ?\(((.*)(,[\s\b]*)(&([a-z0-9\-]+))|(.*)(&([a-z0-9\-] +)))[\s\b]*\)))
donde debo remplazar {0} por el nombre del objeto.
Luego debe remplazar en el código con la expresión super amigable:
$1$8$11$19$22 = $3$14.udp($6$17)
La potencia de las expresiones regulares es asombrosa, pero también es asombroso lo complejas que pueden quedar con casos bastantes sencillos.
PD: La próxima version de KBDoctor, tendrá una opción que identifica los programas que tienen todos los parámetros IN, menos el ultimo OUT y cambia todas las invocaciones al formato UDP. Esto hace el código mas claro y que GeneXus detecte algunos errores al especificar.
UPDATE: Tuve que actualizarla a
(\s+)?(call\([\s\b]*({0})([\s\b]*)(,(.*)(,[\s\b]*)(&([a-z0-9\-]+))|,(.*)(&([a-z0-9\-]+)))[\s\b]*\)|(({0})(.call) ?\(((.*)(,[\s\b]*)(&([a-z0-9\-]+))|(.*)(&([a-z0-9\-] +)))[\s\b]*\)))
Comentarios
Publicar un comentario
1) Lee el post
2) Poné tu opinión sobre el mismo.
Todos los comentarios serán leidos y la mayoría son publicados.