Newsgroup: it.comp.lang.c
Titolo: Implementazione di un dizionario

Sto affrontando un problema di ricerca di testo che, imo, si risolve
bene implementando un dizionario. Non ho problemi ad implementarlo da
me, ma mi chiedevo se qualcuna delle innumerevoli librerie disponibili
non lo implementasse già e quale. In fondo è una struttura dati
abbastanza convenzionale.
Grazie in anticipo.
-- 
                     Dona i tuoi cicli di clock alla ricerca!
 
http://boinc.berkeley.edu/
                          --------------------
           This signature was automatically generated with
           Signify v1.14.  For this and other cool products,
           check out 
http://www.debian.org/

chiave)
Spero ti sia utile ma aspetta commenti più esperti ed auterevoli di
questo ;)

 un DB relazionale.
sqlite sarà tuo amico, allora.
-- 
By ZeD


| Architecture: amd64
| Version: 2.8.17-6
| Depends: libc6 (>= 2.3), libreadline6, libsqlite0 (>= 2.8.17)
| Suggests: sqlite-doc
| Filename: pool/main/s/sqlite/sqlite_2.8.17-6_amd64.deb
| Size: 22038
| MD5sum: c22ee6b4c2ee85cdb0e815189c646d2c
| SHA1: 32203c25ff45eeefb8e146562bd4e98d60be7448
| SHA256: 74492bd8901e13e7bea181a231c0a43f5be5002d85dd988573aa09557cdc9ca9
| Description-it: interfaccia a riga di comando per SQLite
|  SQLite è una libreria C che implementa un motore per accedere ai database
|  SQL. I programmi sviluppati con la libreria SQLite possono accedere a
|  database SQL senza ricorrere a processi RDBMS separati.
| Tag: devel::lang:sql, devel::library, implemented-in::c, interface::commandline, network::client, role::program, works-with::db
| 
`----
Mi pare di capire che ciò presupponga la presenza di un qualche DB
SQL. Ma io questo DB non ce l'ho e nemmeno lo voglio implementare. 
Il riferimento ai DB era solo per illustrare meglio il mio problema.


 Il riferimento ai DB era solo per illustrare meglio il mio problema.
Io ancora non ho capito che struttura dati hai e se la vuoi mantenere o 
trasformare e ogni quanto la devi aggiornare, se la devi aggiornare.
Se hai un file sequenziale e vuoi continuare a fare gli inserimenti in coda 
allora ti serve solo un albero binario fatto con i puntatori la cui 
informazione nel nodo è unla posizione dell'informazione cercata nel tuo 
file sequenziale.
http://it.wikipedia.org/wiki/Albero_binario
Se invece non devi aggiornalo spesso trasformalo in un albero binario e 
buonanotte.
.. 

 buonanotte.
Non ho nessuna struttura dati.
Ho un file così strutturato:
...
U2
Achtung Baby
...
Achtung Baby
One
...
Alla domanda: Chi ha composto One? Posso rispondere "U2" dal momento che
il titolo del brano è sempre preceduto dal titolo dell'album e so che
ogni precedente occorrenza del titolo dell'album è preceduta dal suo
autore.
Questo però presuppone una serie di ricerche, che IMO si eseguono prima
se ho un dizionario.
-- 
                     Dona i tuoi cicli di clock alla ricerca!
 
http://boinc.berkeley.edu/
                          --------------------
      Legge di Peer:
      	La soluzione di un problema cambia la natura del problema.

 se ho un dizionario.
no, si eseguono prima se hai un DB e, come ti e' gia' stato detto,
sqlite e' tuo amico. Vai a vedere il sito, non il riassunto (in ita
oltretutto) di apt-get.
Volendo potresti anche provare con il berkeley db, anche se non ho
ancora ben capito cosa fa di diverso da sqlite.
Ciao Jack


Ma che per caso č un file XML?
Ha una struttura cosě?
<?xml version="1.0" ?>
<Artista="U2">
   <Album="Achtung Baby">
      <pezzo>
         One
      </pezzo>
      <pezzo>
         Zoo station
      </pezzo>
      <pezzo>
         One
      </pezzo>
      <pezzo>
         So cruel
      </pezzo>
   </album>
   <Album="Boy">
      <pezzo>
         Twilight
      </pezzo>
      <pezzo>
         The ocean
      </pezzo>
      <pezzo>
         The electric co
      </pezzo>
      <pezzo>
         I will follow
      </pezzo>
   </album>
 </artista>
.. 

 Il riferimento ai DB era solo per illustrare meglio il mio problema.
tu hai 2 problemi:
1) dato un file non meglio specificato, farne il parsing per ottenerne 
oggetti con una semantica.
2) definire una struttura dati per ospitare in memoria gli oggetti che vuoi 
manipolare
per la 1, visto che il file non so com'è fatto, non ti posso aiutare.
per la 2, il mio consiglio è di "ficcare" le informazioni su album, artista 
e brani in un database sql, come sqlite (che può lavorare su un file 
d'appoggio o anche in memoria), e usare la sintassi sql per rispondere alle 
tue richieste, facendo una "select" su una tabella (o un join di tabelle, o 
quel che riterrai più opportuno).
-- 
By ZeD

 -- 
E allora puoi appoggiarti a un database nativo xml come eXist-db.
http://exist.sourceforge.net/
Ce ne è pure uno della grande famiglia Apache di cui ora non mi ricordo il 
nome, ma eXist è il più supportato.
Come integrarlo nel tuo progetto in C lascio a te il piacere di scoprirlo.
.. 

 ancora ben capito cosa fa di diverso da sqlite.
L'unica differenza sta nel fatto che il berkley DB non è relazionale, e 
quindi non puoi gestire l' integrità dei dati contenuti nel db se non a 
mano.

 mano.
ah ecco.
grazie
Ciao Jack