#Programa que lee
un archivo y extrae las direcciones de correo
#electronico de
el
#funcion que abre
el archivo fuente y el archivo destino
#********************************************************************
sub
Abrir_Archivo_Fuente {
print "Digite la ruta y el nombre del
archivo a procesar...: ";
$nombre_archivo1=<STDIN>;
chop $nombre_archivo1;
-e $nombre_archivo1 or $error=1;
if ($error==1) {
print "Error al abrir el archivo
$nombre_archivo1...!\n";
<STDIN>; #pausa
return 0; #devuelve 0 si hay error
}
else {
print "El archivo $nombre_archivo1
sera procesado...!\n";
<STDIN>; #pausa
open(ARCHIVO_ENTRADA,
"<$nombre_archivo1");
return 1; #devuelve 1 si no hay error
}
}
#funcion que lee
el archivo y guarda los datos en una cadena
#********************************************************************
sub Leer_Datos {
while($linea = <ARCHIVO_ENTRADA>) {
chop $linea; #elimina el fin de linea
$texto = $texto.$linea; #guarda todas
las lineas en texto
}
chop $texto; #elimina el fin de linea
}
#funcion que
separa los mensajes y los asuntos de cada mensaje
#********************************************************************
sub
Separa_Mensajes {
$cuenta = ($texto=~s/From: /From: /g);
#cuenta las veces que aparece From:
@mensajes = split("From: ",
$texto); #divide el texto cada vez que aparece From:
}
#funcion que
recupera la informacion solicitada
#********************************************************************
sub
Recupera_Informacion {
$nombre = '([ \w]+)'; #patron del nombre
$direccion = '( <\w+@[\.\w]+>)';
#patron de la direccion
$asunto = 'Subject:.*'; #patron del asunto
$ciclo = '([12I{1,2}])'; #patron del ciclo
(1 2 I II)
$sem = '\-\w{3,8}\-'; #patron que reconoce
Sem o Semestre
$ano = '(\d{2,4})'; #patron que reconoce el
aņo
$patron =
"\"$nombre\"$direccion.*$asunto$ciclo$sem$ano.*"; #los
anteriores juntos
$informacion =
"http://www.ecci.ac.cr/~ci1322/"; #sustitucion
for ($i=1; $i<=$cuenta; $i++) {
@mensajes[$i]=~s/$patron/\1\2\n$informacion\4-\3\n/g;
#reemplaza
print @mensajes[$i];
print
"\n";
}
}
#funcion que crea un archivo de texto con la informacion
obtenida
#********************************************************************
sub Crear_Archivo_Destino {
print "Digite
la ruta y el nombre del archivo a crear...: ";
$nombre_archivo2 =
<STDIN>;
chop
$nombre_archivo2;
-e
$nombre_archivo2 or $error2=1;
if ($error2==0) {
print
"Error, el archivo $nombre_archivo2 ya existe...!\n";
<STDIN>;
#pausa
return 0;
#devuelve 0 si hay error
}
else {
print "El
archivo $nombre_archivo2 sera creado...!\n";
<STDIN>;
#pausa
open(ARCHIVO_SALIDA, ">$nombre_archivo2");
return 1;
#devuelve 1 si no hay error
}
}
#funcion que graba los datos obtenidos en el archivo creado
#********************************************************************
sub Grabar_Datos {
for ($i=1;
$i<=$cuenta; $i++) {
print
ARCHIVO_SALIDA "@mensajes[$i]\n";
}
}
#Programa Principal
#********************************************************************
#!usr/bin/perl
if (Abrir_Archivo_Fuente == 1) {
Leer_Datos;
Separa_Mensajes;
Recupera_Informacion;
print "La
informacion fue obtenida con exito...!\n\n";
close(ARCHIVO_ENTRADA);
}
if (Crear_Archivo_Destino == 1) {
Grabar_Datos;
print
"Archivo creado con exito...!";
close(ARCHIVO_SALIDA);
}