Newsgroup: it.comp.lang.perl
Titolo: fetchall_arrayref e filtro

ciao a tutti.
ho in una variabile la roba che mi torna fetchall_arrayref, e ora vorrei 
filtrare le righe tornate dalla query per il valore di una certa 
colonna. qualcuno lo ha gia fatto o sa come fare? io non ho la piu 
pallida idea da dove iniziare...
grazie

m4x wrote:

'fetchall_arrayref' restituisce un reference a un array di reference ad 
array, che rappresentano le singole righe. Se vuoi, ad esempio, estrarre 
soltanto le righe nelle quali il valore della terza colonna contenga la 
parola 'foo', puoi fare:
 @filtered_array = grep {  $_->[ 2 ] =~ /\bfoo\b/ } @$original_arrayref ;
Max

Max M. wrote:

grazie! sei un dio

m4x wrote:

adesso devo solo trovare il modo di bindare il tasto enter del widget 
entry nella mia hlist per poter chiamare la funzione di filtro...
buona notte :)

m4x wrote:

trovato: $obj->bind(@filtercol[$i], '<Return>' ,\&RowFilter);
perl è facile in fondo :)

perl č facile in fondo :)
D'accordo ma, avendo (immagino) a disposizione un motore di database, non č
piů semplice ed efficiente far fare il lavoro direttamente a lui, piuttosto
che farsi dare della roba per poi buttarla via? Dico in generale,
evidentemente: puň darsi benissimo che nel contesto in cui devi operare sia
invece la scelta giusta, ma alla domanda in sé, senza altre informazioni, mi
verrebbe da rispondere di cercare una soluzione a monte del
fetchall_arrayref.
Ciao.

 fetchall_arrayref.
si, ci ho pensato, ma voglio fare un programma client server che lavori 
anche a database disconnesso. quindi una volta fatto il fetch dei dati, 
l'utente può tranquillamente staccarsi dalla rete e andare a casa, 
continuare a lavorare con la sua applicazione e poi riconnettersi in un 
secondo momento. se facessi come proposto da te, per una semplice 
operazione di filtro (o sorting) sui dati sarebbe necessario essere 
connessi al database. condizione non proponibile.

 connessi al database. condizione non proponibile.
Ciao,
   A questo punto una soluzione interessante sarebbe di utilizzare 
qualcosa come SQLite per copiare i dati dal database remoto. In questo 
modo potresti quanto suggerito da Giovanni, pur restando in locale come
vuoi tu. Inoltre, questa soluzione ti garantisce conto uscite dal 
programma stesso, volontarie o no, che porterebbero a una perdita di 
dati se questi sono mantenuti in memoria. Per non parlare del fatto che, 
se iu dati sono molti e i filtri moplto selettivi, la differenza di 
occupazione memoria delle due soluzioni puň essere notevole.
Leo
-- 
Leo "TheHobbit"

 Leo
grazie del consiglio leo. mi guarderò sicuramente sqlite. però non 
capisco perchè tutti questi scrupoli nel gestire i date sul client. la 
filosofia di .net/delphi è la stessa che sto adottando io (usando i 
dataset), quindi non credo che sto sbagliando a gestire i dati sul 
client, anche perchè i dati elaborati si possono comunque filtrare prima 
di fare il fetch, per evitare di tirare su troppe righe. il programma 
inoltre girerà su client abbastanza recenti, e non credo quindi che ci 
saranno problemi di performance in questo senso.

capisco perchè tutti questi scrupoli nel gestire i date sul client.
Da parte mia, nessuna. La mia perplessità, non conoscendo i termini del
problema, riguardava che cosa far fare a perl e che cosa al motore di
database (perl è bravo a filtrare dati, ma un database è di solito ancora
più bravo). Chiarito che il database d'origine non è disponibile nel
momento in cui si elaborano i dati, mi sembra di nuovo tutto ragionevole.
Ciao.

 saranno problemi di performance in questo senso.
Buona fortuna :)
gmax