• Publicidad

Solicitud de fechas por consola

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

Solicitud de fechas por consola

Notapor scout » 2009-11-08 20:57 @914

Mi consulta es: ¿cómo se les ocurriría solicitar al usuario fecha inicial y final en un script que ejecuta por línea de comandos...?

Se me ocurrió utilizar variables de día, mes y año e ir solicitándolas en distintas líneas, pero queda medio feo... y me gustaría algo que se complete en la misma línea de ser posible y evite errores como poner 31 días cuando el mes tiene 30 y esas cosillas...; esto último es un lujo, pero bueno, lo consulto igual...
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Publicidad

Re: Solicitud de fechas por consola

Notapor explorer » 2009-11-08 21:47 @949

Yo le presentaría algo así:

Introduzca la fecha inicial [AAAA/MM/DD]:

Así, el usuario sabe (si es algo listo y está acostumbrado a manejar programas en consola) que debe introducir la fecha en el formato año/mes/día.

Luego, lo introducido lo paso por DateTime::Format::Strptime y si el resultado es un objeto, es que nos ha dado una fecha válida.

Al menos, es lo que yo haría. Pero en Perl... hay muchas otras formas. ¿Alguien más da su opinión?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Solicitud de fechas por consola

Notapor scout » 2009-11-09 18:54 @829

Que sí, es lógica la respuesta... pero veo que al probar el ejemplo me da el siguiente error:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Can't locate DateTime/Format/Strptime.pm in @INC (@INC contains: C:/Perl/lib C:/
Perl/site/lib .) at c:\perl\fechas.pl line 1.
BEGIN failed--compilation aborted at c:\perl\fechas.pl line 1.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Cómo se instala el módulo éste? Porque en PPM no lo encuentro por ningún lado... ¿o me estoy pasando algo por alto...?
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Re: Solicitud de fechas por consola

Notapor explorer » 2009-11-09 19:41 @862

En el repositorio de trouchelle.com sí que está.

En la guía de uso de PPM explico cómo adjuntar ese repositorio.
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Solicitud de fechas por consola

Notapor scout » 2009-11-18 19:33 @856

Ya está instalado, pero no le encuentro comienzo... El usuario ingresaría 3 variables.

¿Cómo funciona ese módulo?

Mil disculpas pero estoy oxidado, el Perl es un poco nuevo para mi y de guinda me interesa hacerlo por consola...

Estoy buscando en varios idiomas algún ejemplo pero no encuentro, como me pasó en los otros casos que sí pude salir adelante... please si tienes algún ejemplo se los agradecería... ya que aparte de copiar y pegar me interesa entender cómo funciona el tema fechas...

Ya tengo leído los dos tutoriales de este sitio y quedo claro la base pero no cómo trabajarlo en un caso de consola...
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Re: Solicitud de fechas por consola

Notapor explorer » 2009-11-18 19:57 @873

Trabajar con consola no es muy distinto de trabajar con ficheros. La diferencia es que no suele ser necesario abrir el fichero de entrada, porque STDIN ya está abierto cuando se arranca el programa, lo mismo que el fichero de salida, STDOUT.

Así que para leer de consola, solo hay que hacer
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
print 'Introduzca la fecha inicial [AAAA/MM/DD]: ';
my $fecha_inicial = <>;
chomp $fecha_inicial;  # quitamos el carácter de fin de línea
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


En cuanto a qué se puede hacer con el módulo, pues por estos foros ya lo hemos comentados en unas cuantas ocasiones.
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Solicitud de fechas por consola

Notapor scout » 2009-11-19 08:11 @383

Va quedando fenomenal. Les paso el código por si les sirve a alguno. Solo me falta personalizar los mensajes de errores en caso de que pongan mal la fecha... En CPAN lo dice pero no logro adaptarlo al código... ¿Alguno sabe cómo introducir estos métodos?

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
errmsg
If the on_error behavior of the object is 'undef', error messages with this method so you can work out why things went wrong.
This code emulates a $DateTime::Format::Strptime with the on_error parameter equal to 'croak':  $Strp-pattern($pattern) or die $DateTime::Format::Strptime::errmsg>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Código bueno...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use strict;
  2. use warnings;
  3. use diagnostics;
  4. use DateTime::Format::Strptime;
  5. my $Strp = new DateTime::Format::Strptime(pattern=>'%Y-%m-%d');
  6. print 'Introduzca la fecha inicial [AAAA-MM-DD]: ';
  7. my $fechainicial = <>;
  8. chomp $fechainicial;  # quitamos el carácter de fin de línea
  9. my $dt_fecha1 = $Strp->parse_datetime( $fechainicial );
  10. print " \n";
  11. print " Usted seleccionó la siguiente fecha inicial : $fechainicial \n";
  12. print " \n";
  13. print 'Introduzca la fecha final [AAAA-MM-DD]: ';
  14. my $fechafinal = <>;
  15. print " \n";
  16. chomp $fechafinal;  # quitamos el carácter de fin de línea
  17. my $dt_fecha2 = $Strp->parse_datetime( $fechafinal );
  18. print " \n";
  19. print "Usted seleccionó la siguiente fecha final : $fechafinal \n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618

Re: Solicitud de fechas por consola

Notapor explorer » 2009-11-19 08:42 @404

No creo que necesites definir métodos de información de errores... te valdría con informar al usuario y repetir la entrada de datos...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $dt_fecha1;
do {
    print 'Introduzca la fecha inicial [AAAA-MM-DD]: ';
    my $fechainicial = <>;
    chomp $fechainicial;

    $dt_fecha1 = $Strp->parse_datetime( $fechainicial );

    if  ( ! $dt_fecha1 ) {
        warn "ERROR: No ha introducido una fecha correcta.\n";
    }
} while ( ! $dt_fecha1 );

# Trabajar a partir de aquí con $dt_fecha1
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: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Solicitud de fechas por consola

Notapor scout » 2009-11-19 12:14 @551

uuuhh lo del do while es imperdonable... se demuestra lo oxidado que voy...
Lo del warn() no lo sabía...
Muchas gracias...
scout
Perlero nuevo
Perlero nuevo
 
Mensajes: 228
Registrado: 2009-10-28 13:50 @618


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 21 invitados