#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);

}

1