• Publicidad

Separar string

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

Separar string

Notapor animal collective » 2010-12-22 10:19 @471

Estimados,

Tengo el siguiente problema: al realizar una consulta a una BD me arroja el siguiente resultado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
12-22-2010-12:03:48
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo que necesito realizar es separar la fecha y la hora.
Intenté realizarlo de la siguiente forma:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my ($a) = $valor =~ /2010-(\d+)/;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


pero no tengo el resultado esperado, favor su apoyo para resolver esto.

Muchas gracias.

Saludos
animal collective
Perlero nuevo
Perlero nuevo
 
Mensajes: 39
Registrado: 2010-10-17 17:53 @786
Ubicación: Chile

Publicidad

Re: Separar string

Notapor animal collective » 2010-12-22 10:32 @481

Estimados,

Disculpen las molestias, pero leí un poco más el foro y pude resolverlo.
Saludos

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my @array = split("-", $valor);
print ("$array[3] \n");
print ("$array[0]-$array[1]-$array[2]");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
animal collective
Perlero nuevo
Perlero nuevo
 
Mensajes: 39
Registrado: 2010-10-17 17:53 @786
Ubicación: Chile

Re: Separar string

Notapor explorer » 2010-12-22 10:37 @484

Lo malo es que intentándolo poniendo 2010 como ancla, solo te funcionará para los pocos días que quedan de este año.

Hay que intentar averiguar qué es lo que distingue a la fecha de la hora. En este caso, no hay división: el guion que lo separa es igual que los otros guiones que separan los componentes de la fecha.

Una forma de resolverlo sería también la más sencilla: capturar todo según un patrón en el que indicamos exactamente qué caracteres son variables:

Si nos dan 12-22-2010-12:03:48 pues podemos construir la exp. regular

my ($fecha, $hora) = $valor =~ /(..-..-....)-(..:..:..)/;

Pero claro: este patrón servirá siempre que todos los campos conserven su longitud. Si para el día 1 de enero, las cifras tienen solo un dígito, pues no funcionará. Pero eso no lo sabemos porque no nos han dicho cómo serán esas fechas.

Actualización: enviado antes de leer la siguiente respuesta
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: Separar string

Notapor animal collective » 2010-12-22 11:23 @516

Estimado

Gracias por tu respuesta, ahora se me presenta otra problemática:

¿Es posible restar la hora?

Ejemplo, (14:25:00 – 14:20:00) = 5

Saludos
animal collective
Perlero nuevo
Perlero nuevo
 
Mensajes: 39
Registrado: 2010-10-17 17:53 @786
Ubicación: Chile

Re: Separar string

Notapor explorer » 2010-12-22 11:37 @525

De esa manera tan directa, no.

La opción clásica es transformar las horas a segundos, hacer la resta, y luego convertir los segundos de la diferencia en la unidad que queramos.

Otra opción es usar los módulos DateTime para hacerlo de forma más cómoda y precisa.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use common::sense;
  3.  
  4. use DateTime::Format::Strptime;
  5.  
  6. my $parser = DateTime::Format::Strptime->new (
  7.     pattern     => '%H:%M:%S',
  8.     locale      => 'es_ES',
  9.     time_zone   => 'Europe/Madrid',
  10. );
  11.  
  12. my $hora1 = $parser->parse_datetime('14:25:00');
  13. my $hora2 = $parser->parse_datetime('14:20:00');
  14.  
  15. my $diferencia = $hora1 - $hora2;
  16.  
  17. say $diferencia->delta_minutes() . ' minutos';  # 5 minutos
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Este ejemplo está muy simplificado (como sabemos que el resultado son minutos, preguntamos por 'delta_minutes' de forma directa), ya que suele ser complicado obtener la información de los objetos DateTime::Duration, pero al menos sirve para mostrar solo un poco de lo mucho que se puede hacer con DateTime.
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: Separar string

Notapor animal collective » 2010-12-22 12:09 @548

¡¡¡Muchas gracias!!!
animal collective
Perlero nuevo
Perlero nuevo
 
Mensajes: 39
Registrado: 2010-10-17 17:53 @786
Ubicación: Chile


Volver a Básico

¿Quién está conectado?

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