• Publicidad

Truncar un número entero

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

Truncar un número entero

Notapor reLlene » 2012-09-19 13:14 @593

Consigo truncar al número pero sólo me deja los primeros caracteres y no los últimos como lo estoy queriendo hacer.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. printf '<%.2s>', "2012"
  2. # output
  3. # 20
  4.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

:x

Vuelvo a repetir: mi intención es conservar los 2 últimos dígitos. Estos valores son años de una base de datos.

¿Alguna sugerencia?
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Publicidad

Re: Truncar un número entero

Notapor explorer » 2012-09-19 13:19 @597

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print substr('2012', -2), "\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información en perlfunc: perldoc -f substr.
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: Truncar un número entero

Notapor reLlene » 2012-09-19 14:19 @638

Había olvidado por completo esa posibilidad. ¡¡¡Muchas gracias, explorer!!! :D

Por cierto, estos valores con los que me encuentro trabajando deben tener un formato particular. Es decir, como el 02001 suponiendo que se trata de la fecha 01/01/2002. Como se ve, se empieza a contar a partir del primer día del año y claro, que el último día el 365, exceptuando en los años bisiestos dónde en esos años se cuenta con un día más, es decir, 366 totales.

He buscado en CPAN por la palabra clave "leap-year" ("año bisiesto") y me topé con los módulos Date::Manip::Base y Date::Leapyear pero por lo que veo no me sirven para lo que deseo. :S

¿Alguien sabe de algún otro que resulte?
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Truncar un número entero

Notapor explorer » 2012-09-19 14:33 @648

La que buscas es day_of_year() de Date::Manip.

De todas maneras, el número del día del año también lo tienes en la llamada a la función localtime() o gmtime(), en el argumento número 7:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
#  0    1    2     3     4    5     6     7     8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Si time es un tiempo expresado en segundos (desde el EPOCH), entonces podemos saber el día del año en que estamos, en el rango 0..365.

Si no tienes el tiempo expresado en segundos, puedes usar el módulo Time::Local (incluido en la distribución Perl), para conseguirlo a partir de los datos de la fecha:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $time = timelocal($segundos, $minutos, $horas, $dia, $mes, $año);
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Y ahora ya puedes obtener el día del año:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $doy = (localtime $time)[7];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -MTime::Local -E '$time = timelocal(0, 25, 21, 19, 8, 2012); $doy = (localtime $time)[7]; say $doy'
  2. 262
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

El 19 de septiembre de este año es el día 263º del año. Comprobación:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ date +"%j"
  2. 263
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¡Ojo! El número de mes ha de ser uno menos (0 para enero, 1 para febrero, etc.)
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


Volver a Básico

¿Quién está conectado?

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