miércoles, mayo 23, 2007

Hola otra vez

Hace tiempo que no escribía, pero bueno, que se le va a hacer...

Hoy en el trabajo he tenido que utilizar el ya veterano lenguaje PERL.
Realmente es como una navaja multiusos que te permite solucionar de una forma bastante rápida los problemas.
Normalmente se utiliza para trabajos demasiado pesados para hacerlos a mano.
Por algo es el lenguaje del camello (es el animal que lo simboliza).

¿Qué había que hacer?
Se trata de una migración de datos de un servidor a otro diferente. Al ser el sistema operativo diferente resulta que hay que exportar cada directorio.
1-Una persona me pasa un fichero con 2.000 directorios.
2-Tengo que ejecutar 3 comandos SAS (SAS es un software muy utilizado en banca, compañías de seguros, estadística, etc.) con cada uno de los 2.000 directorios. Un trabajo pesadísimo si hay que hacerlo a mano.

Los comandos SAS son los siguientes:

Para el primer directorio:
Libname lib1 ‘directorio1’;
Proc cport lib=lib1 file=’C:\lib1.cpo’;
Run;


Para el segundo directorio:
Libname lib2 ‘directorio2’;
Proc cport lib=lib2 file=’C:\lib2.cpo’;
Run;

Y así sucesivamente para los 2.000 directorios.

¿Solución? Programita Perl que me genera automáticamente las 6.000 líneas:


print "Generacion de script SAS\n\n";

open(FICHENTRADA, "<entrada.txt")die "No se puede abrir el fichero de entrada: $!";

open(FICHSALIDA, ">script.sas")die "No se puede abrir el fichero de salida: $!";



$num=0;

while(<FICHENTRADA>){

chomp($_);

s/^\s*(.*\S)\s*$/$1/;

print FICHSALIDA "libname LIB" . $num . " '" . $_ . "';\n";

print FICHSALIDA "proc cport lib=" . "LIB" . $num . " file='\\\\servidor\\d\$\\sas\\LIB" . $num . ".cpo';\n";

print FICHSALIDA "run;\n";

$num ++;

}



close(FICHENTRADA);

close(FICHSALIDA);