domingo, 14 de octubre de 2007

Consola al rescate

Realizando un mecanismo de seguridad para un sistema que estoy desarrollando actualmente, me surge la necesidad de obtener todos los formularios que son lanzados por la pantalla principal del sistema (Donde este el menú de la aplicación). Decidido a no hacerlo a mano, dado que heran más de 60 formularios así recurri a la consola para que me ayudará.

Lo primero que hice fue obtener las líneas donde se mostraban los formularios para obtener el nombre de la clase del mismo, dado que yo llamo a todos los formularios con el prefijo frm esto no fue muy difícil.

$ cat Principal2.cs |grep 'new frm'
LaunchForm.launch(new frmProductos(),this);
LaunchForm.launch(new frmVentas(),this);
LaunchForm.launch(new frmCompras(),this);
LaunchForm.launch(new frmClientes(),this);
LaunchForm.launch(new frmProveedores(),this);

.....

El problema ahora es obtener la parte frmXXX, para ello utilizo awk y sed, con awk elimino la primera parte.

$cat Principal2.cs |grep 'new frm'|awk {'print $2'}
frmProductos(),this);
frmVentas(),this);
frmCompras(),this);
frmClientes(),this);
....

Ahora con sed eliminamos la segunda parte

$cat Principal2.cs |grep 'new frm'|awk {'print $2'}|sed 's/'\(\),this\)\;'/''/g'
frmProductos
frmVentas
frmCompras
frmClientes
frmProveedores
....

Listo, ya tengo lo que quería, por ultimo necestio añadir un número para el id y guardarlo en un archivo para subirlo a una tabla en la base de datos. Añadimos un cat -n para que cuente las lineas y por último volvemos a editar el flujo para que separe el id del formulario con una coma.

$cat Principal2.cs |grep 'new frm'|awk {'print $2'}|sed 's/'\(\),this\)\;'/''/g'|cat -n |awk {'print $1","$2'}
1,frmProductos
2,frmVentas
3,frmCompras
4,frmClientes
.....

Por ultimo redireccionamos la salida a un archivo y listo.

Bastante sencillo no les parece?, mucho más sencillo que editarlo a mano como hacemos la mayoría de las veces.

PD: Tarde más en escribir este Post que en hacer la linea de comando. Igualmente lo escribí con el tiempo que me ahorre editando el archivo :P

Recomiendo leer los comandos sed, awk, cat