Newsgroup: it.comp.lang.perl
Titolo: Un database senza DBMS

ciao! vorrei sapere come posso gestire un database di testo delimitato.
devo fare gestire una semplice e piccola tabella e non devo ricorrere a DBMS
perchè deve lavorare su piattaforme Unix con installato solo il perl.
Un'altra cosa, ho provato a fare qualcosa con il modulo DB_File ma con la
documentazione che ho trovato non ci ho capito nulla. Sono riuscito solo ad
aggiungere dati ma non a fare query....
sono graditi esempi, documentazioni e quello che vi sembra utile via attach.
saluti e grazie
sgala....@mbox.queen.it
p.s.: rispondetemi anche via e-mail grazie.

 perchè deve lavorare su piattaforme Unix con installato solo il perl.
Beh, in teoria il perl basta ed avanza per interrogare i database... basta
aggiungerci un paio di modulini... DBI/DBD oppure, se vuoi interrogare MS
Sql Server 6.5 puoi usare CTLibrary.
Comunque nel tuo caso ci sono molti moduli (oltre DB_File) che permettono di
usare un file di testo oppure dei file in formati proprietari, come
database.
Vai su 
http://www.perl.com/reference
 e quindi Database: trovi due o tre
moduli che ti permettono questo... e guarda quello che riguarda i moduli
"Sprite" (
http://www.perl.com/CPAN/modules/by-module/Sprite
) e "JDB"
(
http://www.isi.edu/~johnh/SOFTWARE/JDB/index.html
).
    Hope this helps
    best regards,
        Kazuma
--
Alex Garbagnati, 
agarb...@removethis.decisive.com
Sr. Lead Engineer, Product Development
Decisive Technology Corporation
Mountain View, CA  94043

 aggiungere dati ma non a fare query....
DB_File puo' andare bene. Pero' devi tenere conto che non e' un DBMS ma un 
meccanismo per gestire file indicizzati, per cui quello che ti da e' un hash
su disco: un database con due colonne, di cui una fa da indice.
Siccome in pratica si tratta di un hash, ci puoi fare solo quello che puoi
fare con gli hash, ovvero accesso veloce all'indice o ricerca piu' o meno
sequenziale su tutti gli altri dati.
Se vuoi usare un DBM, puoi sempre avere piu' di una colonna nella parte dati, 
se provvedi a codificare le colonne opportunamente (ad esempio
concatenandole con un separatore) e a mapparle/smapparle ad ogni
scrittura/lettura. E' molto piu' semplice di quanto sembri :)
Ad esempio, se %dati e' il tuo hash 'tied' al DBM, e hai scelto di
concatenare tre colonne (nome, cognome, altezza) con '#', puoi accedere ai
dati (ad esempio in un foreach) con
   foreach $chiave (keys %dati)
     { 
       ($nome, $cognome,$altezza) = split '#', $dati{$chiave};
       # fai la tua elaborazione
     }
  Viceversa, alla scrittura farai
 
    $dati{$chiave} = join '#',$nome,$cognome,$altezza;
Questo naturalmente e' il livello puoi semplice. Per cose un po' piu'
elaborate, puoi usare MLDBM, che ti permette di scrivere nell'hash ( e
quindi nel DBM su file) intere strutture dati, risparmiandoti l'onere della
codifica/decodifica.
In ogni caso, hai a disposizione solo una colonna di chiave/indice per fare
le tue ricerche 'veloci', mentre per ogni ricerca piu' complicata dovresti
tenere il DB in memoria per avere un accesso decente.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

 
In alternativa a DB_File, se ti interessa esequire query SQL su file
testuali (CVS), puoi provare DBI con DBD::CSV. Lo trovi su CPAN,
naturalmente.
http://www.cpan.org/modules/by-module/DBD/DBD-CSV-0.1021.tar.gz
Richiede SQL::Statement e Text::CSV_XS.
Max
