Página 1 de 1

Problema de ordenar y comparar

NotaPublicado: 2008-09-12 09:53 @453
por luisbal
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.

NotaPublicado: 2008-09-12 11:18 @512
por explorer
Bienvenido a los foros de Perl en Español, luisbal.

Esta es una de las múltiples soluciones:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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__
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2008-09-14 12:57 @581
por Jenda
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

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  SELECT max(disponibilidad) FROM productos
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y después todos los productos con esa disponibilidad con

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  SELECT * FROM productos WHERE disponibilidad = <este numero>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



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

Jenda

muchas gracias

NotaPublicado: 2008-09-15 20:26 @893
por luisbal
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.