• Publicidad

Fechas y correo electrónico

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Modificación de prácticas

Notapor explorer » 2010-01-25 03:43 @196

Lo primero, recordarles a los dos que se pueden reeditar los mensajes de cada uno pulsando en el botón de Editar Mensaje que aparece en cada mensaje. Así, no es necesario ir encadenando mensajes con distinta información. Se edita el último mensaje y se añade lo nuevo.

Segundo, por más mensajes que manden no se les va a atender más rápido.

Tercero, es muy feo pedir ayudas para hacer prácticas de clase. Eso ya indica que ustedes no serán programadores de Perl en el futuro :(

Cuarto, si quieren ayuda, deben dar información. Por ejemplo: ¿de qué formato de fecha estamos hablando? ¿ISO 8601 u otro formato? ¿qué método tienen para enviar un correo electrónico, es decir, disponen del programa sendmail, o hay que usar un servidor de correo externo con autenticación, o usar una pasarela SMTP... o basta con usar el módulo Email::Send? Y, en ese caso, ¿a qué servidor se deben conectar?

Para alehuelva: no necesitas expresiones regulares para extraer la información del fichero. Si están unidos los campos con ':' pues los separas con la función split().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Modificación de prácticas

Notapor explorer » 2010-01-25 03:53 @204

Bueno, pues de la misma manera que los datos del fichero están unidos por ':' y se pueden separar con split(), pues la fecha tiene los distintos campos unidos por '/', así que también se pueden separar con split().

Vayan publicando código y les vamos guiando.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Modificación de prácticas

Notapor alehuelva » 2010-01-25 04:11 @216

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (INFO, "<birthday.txt");
open SALIDA, ">salida";
while (<INFO>) {
   chomp ($_);
   ($name, $parent, $date, $mail) = split(/:/, $_, 4);
   if ($date =localtime()) {    ##Aqui no se como comparar la fecha
        print SALIDA "TO: $mail\n
                      Dear $name, my $parent, happy birthday!"
;  

 }
 close INFO;
 close SALIDA;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Muchas gracias de antemano.
alehuelva
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-01-24 21:48 @950

Re: Modificación de prácticas

Notapor EXTRADIBARIUS » 2010-01-25 04:32 @230

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. ########### Variables
  4. #
  5. # Put your email address here.
  6. #
  7. $Mail_Address = '[email protected]';
  8.  
  9. ########### Files
  10. #
  11. # Specify the file where the birthdays are listed.
  12. #
  13. $Birthday_File = '/path/to/the/birthday/file';
  14.  
  15. ###########
  16. # Do not change anything below this line unless you know what you're doin'
  17.  
  18. $Tmp_File = '/tmp/.crontmp';
  19.  
  20. open (NAMES, "<$Birthday_File") || die "Can't open $Birthday_File!";
  21. open (TMP, ">$Tmp_File") || die "Can't open $Tmp_File";
  22.  
  23. print "Looking for scheduled tasks in crontab file...\n";
  24. @Task_List = `crontab -l`;
  25.  
  26. foreach $Task (@Task_List) {
  27.         if($Task !~ /birthday|^#/) {
  28.                 print "Found non-birthday task:\n$Task","Copying to new crontab file...";
  29.                 print TMP "$Task";
  30.                 print "Done.\n"
  31.         }
  32. }
  33.  
  34. print "Reading file $Birthday_File\n";
  35. print TMP "#birthdays\n";
  36. while (<NAMES>) {
  37.         ($Date, $Name) = split (':', $_);
  38.         ($Day, $Month) = ( $Date =~ /(\d{2})\.(\d{2})/ );
  39.         chop $Name;
  40.         print "Adding  $Day", ".", $Month, ". as $Name", "'s birthday...";
  41.         print TMP "0 8 ", $Day, " ", $Month, " * ";
  42.         print TMP "echo Today is $Name", "\\'s birthday | mail $Mail_Address\n";
  43.         print "Done.\n"
  44. }
  45. print TMP "#birthdays_end\n";
  46. close NAMES;
  47. close TMP;
  48. print "Updating crontab ...";
  49. `crontab $Tmp_File`;
  50. print "Done.\n";
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
EXTRADIBARIUS
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2010-01-18 07:03 @335

Re: Modificación de prácticas

Notapor explorer » 2010-01-25 05:02 @251

localtime() devuelve un montón de valores. Si solo queremos el día, mes y año, pues tenemos varias posibilidades:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my (undef,undef,undef,$dia,$mes,$anno) = localtime();
$mes++;        # ajuste a valores 1-12
$anno += 1900; # ajuste a valores de cuatro dígitos
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Ahora ya pueden componer la fecha de hoy:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$hoy = "$dia/$mes/$anno";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y ya pueden compararlo con la fecha leída del fichero, con 'eq' para comparar cadenas de caracteres.

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~> perl -le 'my (undef,undef,undef,$dia,$mes,$anno) = localtime(); $mes++; $anno += 1900; $hoy = "$dia/$mes/$anno"; print $hoy'
25/1/2010
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Comparación fecha

Notapor alehuelva » 2010-01-25 05:03 @252

¿Alguien podría decirme cómo comparar una fecha dd/mm/yyyy con el día actual?

Gracias.

Explorer citó:

localtime() devuelve un montón de valores. Si solo queremos el día, mes y año, pues tenemos varias posibilidades:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my (undef,undef,undef,$dia,$mes,$anno) = localtime();
$mes++;        # ajuste a valores 1-12
$anno += 1900; # ajuste a valores de cuatro dígitos
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ahora ya pueden componer la fecha de hoy:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$hoy = "$dia/$mes/$anno";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y ya pueden compararlo con la fecha leída del fichero, con 'eq' para comparar cadenas de caracteres.

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
explorer@joaquin:~> perl -le 'my (undef,undef,undef,$dia,$mes,$anno) = localtime(); $mes++; $anno += 1900; $hoy = "$dia/$mes/$anno"; print $hoy'
25/1/2010
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Espero que les sirva a todos.
alehuelva
Perlero nuevo
Perlero nuevo
 
Mensajes: 6
Registrado: 2010-01-24 21:48 @950

Re: Fechas y correo electrónico

Notapor explorer » 2010-01-25 06:01 @292

Pues con 'eq', ya te lo han dicho...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ($date eq $hoy) {
    # ...
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados