[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux_var] [OT][PERL] Quale struttura dati?



2009/3/20 Fernando Vezzosi <fv@linuxvar.it>
On Fri, Mar 20, 2009 at 04:04:30PM +0100, 0bscure wrote:
> Domanda per chi si diletta di Perl almeno al livello monaco corrotto

er.

> Il dato di input e' composto da un'associazione univoca  NN STRINGA
> del tipo:
>    11 PERL
>     2  LINUX
>
> (Il separatore tra i due campi e' a mia discrezione)
>
> Ora qual'e' secondo voi la struttura dati tranquilla adatta per una
> memorizzazione per accesso sequenziale? (Non ho un db)
> Io pensavo ad un array a 2 dimensioni.
> Da qui il problema:
>
> [cut]
> while (<SPOOL>)
>         {
>          chomp;

Se sei sicuro che l'ultimo carattere è sempre \n puoi usare chop.

>         ($str, $banned) = split(/;/);
>          push(@BANLIST,$str,$banned);

Così stai pushando due elementi.  Questo dovrebbe essere:

 push @BANLIST, [ $str, $banned ];   # arrayref

oppure

 push @BANLIST, { $str => $banned }; # hashref

in questo modo mantieni l'ordine in cui leggi gli elementi, e ci accedi
semplicemente con

 - $banlist[0];  # [ "LINUX", 11 ] oppure { LINUX => 11 }

 - $banlist[0]->[0];   # "LINUX"
 - $banlist[0]->{LINUX};   # 11

A seconda di quale delle prime due hai usato.  Ma la vera domanda è:
dopo che li hai salvati in ordine cosa ci devi fare?  Ci sono molte
altre soluzioni.


Grazie mille a tutti!!

push @BANLIST,[$str,$banned];  funziona e grazie a Data::Dumper vedo che il contenuto e' come volevo.


Cosa ci devo fare? con un po' di astrazione devo... dato un elenco di corrispondenze  <numero;nome>  creare una lista di quelle da ignorare.  (..e imparare un po il Perl anche lol)

Ad esempio:

Leggo la banlist:

7;nodo16
11;nodo1
11;nodo6
4;nodo9
7;nodo1

la memorizzo e la scorro quando devo verificare ad esempio per il flusso 11 quali sono i nodi da ignorare.
Se hai qualcosa di meglio da consigliarmi accetto piu' che volentieri...

Tnx
Andrea

ps:
(Sorry forse anche la mia arriva in html di mail... ma come cavolo si forza l'invio solo txt su gmail!!)

 



--
gpg fingerprint = D66C 9448 F9CC 8AC8 5074  ADB3 3597 A363 FA8D 3BE2

La pulenta e ùl vin ross a fan ben ai oss!! Picaa giòò fin a la mort...

http://digilander.libero.it/ccudiga/