[Cascavel-pm] Sort em array de hash.

Rod Za rodzadra em yahoo.com
Terça Dezembro 6 09:48:32 PST 2005


Alceu,

--- "Alceu R. de Freitas Jr." <glasswalk3r em yahoo.com.br> wrote:

> Eu vou dar uma resposta, mas acho que você deveria
> explicar daonde está obtendo esses dados... isso pode
> ajudar ou atrapalhar.

Bom na verdade estou usando um módulo que encontrei na net para requisição IPP (Internet Printing
Protocol). Este módulo me retorna um hash com valores que depende do tipo de requisição que eu
faço.

Neste caso específico, estou fazendo uma requisição para ter a listagem dos PPD's ( PostScript
Printer Description) disponíveis em um servidor CUPS.

O problema é que quero "agrupar" estes PPD's primeiro por Fabricantes, depois por modelo.

O hash retornado tem a seguinte forma:

$VAR1 = {
          'ppd-make-and-model' => 'Brother HL-720 Foomatic(recommended)',
          'ppd-make' => 'Brother',
          'ppd-name' => 'Brother/HL-720-hl7x0.ppd.gz',
          'ppd-natural-language' => 'en'
        };
.
.
.
.
$VAR1 = {
          'ppd-make-and-model' => 'Brother HL-220 Foomatic',
          'ppd-make' => 'Brother',
          'ppd-name' => 'Brother/HL-220-h20x0.ppd.gz',
          'ppd-natural-language' => 'en'
        };



e eu estou a seguinte função para agrupá-los por fabricante:

<perl>
sub show_ppd(){
my $maker = shift;
my $HASH;
my $i;

foreach my $r ( doIPPrequest( "http://localhost:631",
                    'type' => CUPS_GET_PPDS,
                    'attr' => { 'ppd-make' => { 'type'  => TAG_KEYWORD,
                                                'value' => $maker,
                                              },
                        }
        )
){
  next if($r->{'ppd-make'} eq undef);
  next if($r->{'ppd-make'} ne $maker and (defined $maker));
  $i->{$r->{'ppd-make'}} = 0 if(!defined($i->{$r->{'ppd-make'}}));
  $HASH->{ $r->{'ppd-make'} }[$i->{$r->{'ppd-make'}}] = 
               { ppd_model => $r->{'ppd-make-and-model'   },
                 ppd_driver => $r->{'ppd-name'            },
                 ppd_lang   => $r->{'ppd-natural-language'} 
               };

  $i->{$r->{'ppd-make'}}++;
}
return $HASH;
}
</perl>


e no final eu tenho uma estrutura igual a que eu passei. O problema que estou enfrentando é como
fazer essa classificação. 

O Gilmar Júnior me passou um código (valeu Gilmar) mas não consegui saber onde incluí-lo! :(

Eu posso até ver se modifico o módulo IPP mas o problema é que já estava trabalhando com ele em
outras partes do sistema... :(
.

[]'s

Rodrigo.



		
__________________________________________ 
Yahoo! DSL – Something to write home about. 
Just $16.99/mo. or less. 
dsl.yahoo.com 



Mais detalhes sobre a lista de discussão Cascavel-pm