PDA

Visualizza la versione completa : Idea per ordinare dati in hash/array


Omar2
17-04-2008, 21:54
Ciao,

ho un file in formato txt che contiene alcuni dati....

es:

|nome|cognome|età|
|Mario|Rossi|50|
|Giovanni|Bianchi|20|
|Giuseppe|Verdi|35|

Premettiamo che i dati che sono nel file contengono sempre la colonna "nome", "cognome" e "età" ma la loro posizione dela colonna può cambiare in modo casuale es:

|cognome|età|nome|
|Rossi|50|Mario
|Bianchi|20|Giovanni
|Verdi|35|Giuseppe|


Ho scritto questo codice per poter ottenere sempre i dati che voglio semplicemente richiamando delle chiavi che corrispondono alla prima riga: |cognome|nome|età|




open (COOIS, "810100016-10.txt");

while (<COOIS>)

{

push(@ODL, $_);

}

$r_menu--;
@chiave = split("\Q|", @ODL[$r_menu]);

foreach $var (@chiave)

{

$var =~ s/^\s+|\s+$//g;
@chiave[$indice] = $var;
$indice++;

}


$r_menu = $r_menu + 2;
splice (@ODL,0, $r_menu);
pop (@ODL);

foreach(@ODL)

{

@valore = split("\Q|", @ODL[$n_linea]);

@tabella{@chiave}=@valore;

print qq~

$tabella{'nome'}
$tabella{'cognome'}
$tabella{'età'}



$n_linea++;

}



~;

close (COOIS);



Il codice che ho scritto funziona, a video vengono stampati i dati a seconda di come sono scritti nel file .txt

Rossi
Mario
50

Bianchi
Giovanni
20

Verdi
Giuseppe
35

Io vorrei visuliazzare questi gruppi in ordine per età dal più giovane al più vecchio, in questo modo:

Bianchi
Giovanni
20

Verdi
Giuseppe
35

Rossi
Mario
50

però non ho idea di come fare mi potete aiutare?

Mich_
18-04-2008, 10:00
In pratica stai dicendo che hai un database in formato CSV, e ti vuoi costruire gli algoritmi per lavorare sul database stesso.
Come dire che vuoi inventare l'acqua calda ...
Non che sia sbagliato, ma rifare una cosa che esiste gia`, e` un po' una perdita di tempo. Inoltre l'efficienza di una libreria otimizzata non credo puoi raggiungerla con uno script.
Il Perl ha vari moduli per gestire i DB. Quello che ti serve e` il modulo dbi::csv (o qualcosa di simile - lo ho usato qualche anno fa e non sono sicuro del nome).

PS: gli hash non si possono ordinare. Si puo` ordinarne una stampa/output, ma non viene modificato l'ordine interno.
Per l'ordinamento esiste il sort, che puo` far riferimento ad una routine scritta dall'utente.

Omar2
18-04-2008, 23:28
Ciao,

sto provando ad installare i moduli Perl da CPAN tramite la shell del mio OSX ....

relativi ai database e per creare PDF tipo PDF::API2

faccio perl -MCAPN -e shell

install nome::modulo

lo scarica e lo installa ma quando fai all'interno dello script

use nome::modulo;


mi da error 500 sbaglio qualcosa?

Grazie.

Omar2
18-04-2008, 23:35
Che pirla che sono.....

Mi da pure errore alla fine dell'installazione...


Checking if your kit is complete...
Looks good
Writing Makefile for PDF::API2
PDF::API2/0.69
-- NOT OK
Running make test
Can't test without successful make
Running make install
make had returned bad status, install seems impossible


Come mai?

Mich_
21-04-2008, 11:05
Non ho mai installato moduli: ho sempre trovato pronto da parte dell'amministratore del server.

Quello che riesco a capire e` che lo script di installazione non e` corretto (o non funziona con la tua configurazione): io ci leggo che non riesce a crearsi lo script make e quindi di conseguenza non compila il sorgente.

Se lo script di install e` fatto bene, dovresti trovarci dei commenti, e forse delle linee da commentare/decommentare o qualche parametro da settare a seconda della tua configurazione.
(nota: uno script install e` sempre in formato text, per cui e` facilmente leggibile e di solito contiene dei commenti - devi anche verificare se tale install e` adatto alla tua piattaforma/sistema operativo (alcune volte gli install vengono forniti in versioni diverse, e devi usare quella corretta).

Loading