• Publicidad

Tomar el mayor número de unos ficheros

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Tomar el mayor número de unos ficheros

Notapor creating021 » 2009-12-07 16:18 @721

Hola.

Tengo una lista, para ser exactos, una lista de paquetes es similar a esta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
xxx-0.1.tar.bz2
xxx-0.1.1.tar.bz2
xxx-0.1.2.tar.bz2
xxY-0.1.tar.bz2
xxx-0.2.tar.bz2
yyy-0.3.tar.gz
xxx-0.1.1.2.tar.bz2
xxx-1.9.10.tar.bz2
xxx-1.9.10.1.tar.bz2
...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo que yo necesito hacer es tomar la versión más nueva de xxx, que desconozco completamente, así que pensé en hacer una expresión regular, pero hay versiones de 4 dígitos, otras de tres y otras de dos...

¿Cuál sería la mejor forma de obtener la versión más nueva?
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Publicidad

Re: Tomar el mayor número de unos ficheros

Notapor explorer » 2009-12-07 17:14 @759

Hummm... yo usaría el módulo version:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. use version 0.77;
  7.  
  8. my @nombres_de_ficheros = qw(
  9.     xxx-0.tar.bz2
  10.     xxx-0.1.tar.bz2
  11.     xxx-0.010.1.tar.bz2
  12.     xxx-0.1.2.tar.bz2
  13.     xxY-0.1.tar.bz2
  14.     xxx-0.2.tar.bz2
  15.     yyy-0.3.tar.gz
  16.     xxx-0.1.1.2.tar.bz2
  17.     xxx-1.9.10.1.tar.bz2
  18.     xxx-1.9.10.tar.bz2
  19. );
  20.  
  21. my $fichero_con_version_mas_alta;
  22.  
  23. my $version_mas_alta = version->new('v0');
  24.  
  25. for my $nombre_de_fichero (@nombres_de_ficheros) {              # Recorremos los nombres de los ficheros
  26.  
  27.     next if $nombre_de_fichero !~ /^xxx/i;                      # Saltamos si no son los ficheros que nos interesan
  28.  
  29.     my ($numero_version) = $nombre_de_fichero =~ /-([\d.]+)\./; # Sacamos el número de versión
  30.  
  31.     if (defined $numero_version) {
  32.  
  33.         my $version = version->new("v$numero_version");         # Lo convertimos a objeto versión
  34.  
  35.         if ($version ge $version_mas_alta) {                    # Si la versión es mayor que la más alta encontrada
  36.  
  37.             #print "$version_mas_alta => $version\n";
  38.  
  39.             $version_mas_alta = $version;                       # Guardamos esa versión
  40.  
  41.             $fichero_con_version_mas_alta = $nombre_de_fichero; # Y guardamos el nombre de ese fichero
  42.         }
  43.     }
  44. }
  45.  
  46. print "$fichero_con_version_mas_alta => $version_mas_alta\n";   # xxx-1.9.10.1.tar.bz2 => v1.9.10.1
  47.  
  48. __END__
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿A que no te lo esperabas? ;)

Actualización: versión corregida, más reducida y limpia.
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: Tomar el mayor número de unos ficheros

Notapor creating021 » 2009-12-07 17:28 @770

¡Wow! Muchas gracias, explorer!, y sí, la verdad es que no me lo esperaba.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor


Volver a Intermedio

¿Quién está conectado?

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