Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Problema de ordenar y comparar

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Vie Sep 12, 2008 8:53 am
luisbal
Perlero Nuevo
Perlero Nuevo
Registrado: 12 Sep 2008
Mensajes: 5
Problema de ordenar y comparar Responder citando

Estimados amigos: llevo mucho tiempo tratando de encontrar una solución que supongo será sencilla para ustedes.

La idea es esta: la base de datos de mi carrito (flat database) carga productos, precios, etc. pero además un número (1,2,3,4) dependiendo de la disponibilidad. 1 es 24 horas, 2, 48 horas, 3, 72 horas, etc. La idea es que el script lea la data y me diga el número mayor.

Además mi data tiene dos tipos de separaciones: %% separa los ítem y | separa los datos del producto:

id_1|prod_1|precio_1|disponi_1%%id_2|prod_2|precio_2|disponi_2%%id_3|prod_3|disponi_3

Ejemplo:
L1|libro A|23.00|3%%L2|libro B|14.00|3%%L5|libro C|19.00|2

En este caso, el producto de mayor disponibilidad sería el libro B, porque su disponibilidad es 3. Entonces, quiero que el script me dé este resultado 3.

Creo que hay que abrir la data luego usar sort y luego <=>. Les agradeceré me pudieran dar una solución para copiar y pegar en mi script general. MUCHAS GRACIAS.
Mensaje Vie Sep 12, 2008 10:18 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4239
Ubicación: Valladolid, España
Responder citando

Bienvenido a los foros de Perl en Español, luisbal.

Esta es una de las múltiples soluciones:
Perl:
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my $maxima_disponibilidad = -1;
my $libreria = 'L1|libro A|23.00|3%%L2|libro B|14.00|3%%L5|libro C|19.00|2';
my @libros   = split '%%', $libreria;

for (@libros) {
    my (undef,undef,undef,$disponibilidad) = split '\|';

       $maxima_disponibilidad = $disponibilidad
    if $maxima_disponibilidad < $disponibilidad;
}

print "Disponibilidad: $maxima_disponibilidad\n";

__END__
Mensaje Dom Sep 14, 2008 11:57 am
Jenda
Perlero Frecuente
Perlero Frecuente
Registrado: 29 Oct 2007
Mensajes: 108
Ubicación: Praga, Republica Checa
Responder citando

Hazlo todo más fácil para ti. Importa los datos a una base de datos que te facilite usar SQL. Por ejemplo, DBD::SQLite. No tienes que instalar nada más que los módulos DBI y DBD::SQLite.

Si tienes los datos en la BD puedes obtener la máxima disponibilidad con

SQL:
  SELECT max(disponibilidad) FROM productos


y después todos los productos con esa disponibilidad con

SQL:
  SELECT * FROM productos WHERE disponibilidad = <este numero>



Va a ser más fácil añadir, alterar o remover productos en la BD. Y más rápido.

Jenda
Mensaje Lun Sep 15, 2008 7:26 pm
luisbal
Perlero Nuevo
Perlero Nuevo
Registrado: 12 Sep 2008
Mensajes: 5
muchas gracias Responder citando

Estimados amigos:
Muchas gracias. Al fin he podido resolver este problema gracias a la generosa ayuda de ambos. Agradezco sobre todo la rapidez en las respuestas.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group