Newsgroup: it.comp.lang.pascal
Titolo: Indici e files

Ho capito, in pascal non si puō indicizzare un file, con uno o pių campi
chiave. ma allora per effettuare una scanzione di un file (es. anagrafica
clienti) devo leggerlo  tutto sequenzialmente fino a che trovo il codice che
mi interessa???? oppure con i puntatori posso ovviare questo problema????
grazie!!!!!

mi interessa???? oppure con i puntatori posso ovviare questo problema????
I puntatori non sono di alcun ausilio per la scansione di un file, ma
servono soltanto per gestire strutture dati particolari, per le quali
si necessita di allocare/deallocare porzioni di memoria in modo
dinamico.
Temo che l'unico modo di risolvere la cosa sia quello di leggerlo in
modo sequenziale.
Si potrebbe, a dire il vero, imporre al file una struttura
particolare, ma bisognerebbe scrivere un algoritmo di gestione dei
dati, alla stregua dei DBMS.

Esistono librerie per turbo pascal in grado di creare indici, prova a dare
un'occhiata su 
http://ftp.unina.it:21002/msdos/turbopas.html


Ti devi creare un secono file in cui metti la chiave e la posizione
nel file dati che ha il record associato alla chiave.
Ovviamente ad ogni modifica del file dati devi modificare anche il
file indice.
Cosi' hai il vantaggio che quando devi cervare un record nel file
dati, ti scorri sequanzialemte prima in file indice (che e'
notevolmente piu corto), trovata la chiave leggi in quale posizione
sara' il record e cosi' tramite la procedure SEEKFILE sul file dati
trovisi subito il record.
Fabio
--
fabioma...@rocketmail.com

trovisi subito il record.
Non sono d'accordo.
I file indice devono essere organizzati con una struttura ad albero
binario per accorciare la ricerca il piu' possibile.
Non devono, cioe', essere letti in via sequenziale.
Inoltre il metodo da te suggerito non consente di avere una relazione
"uno a molti" tra indice e database.

 wrote in message
news:37737539...@diesel.cu.mi.it...

Hai ragione in entrambe le osservazioni.
Se gli indici sono pochi, si possono tenere in memoria e salvarli/caricarli
solo alla fine e all'inizio delle operazioni.
Se gli indici sono molti, devi costruirti un file indice strutturato, cioe'
un file contenente record i quali a loro volta contengono informazioni per
una rapida scansione del file stesso. Insomma non facilissimo, ma si puo'
realizzare anche la relazione 'uno a molti'.
La struttura ad albero binario, per quanto veloce, non e' comunque in
assoluto la migliore soprattutto se la sua realizzazione causa un overhead
maggiore dei benefici...
Un'altra soluzione si puo' avere usando piu' di un indice, ma attenzione a
non usarne troppi!!
Ciao

"uno a molti" tra indice e database.
Non consente???
Come fai a dire quello che e' meglio se non sai quale precisamente
come si utilizzera' l'archivio, quali sono le operazioni che si
faranno piu' spesso, con quuali dati si faranno le ricerche, che
dimensione ha l'archivio, che dimensioni potrebbe avere in futuro, se
si faranno molti inserimenti, ecc. ecc.
Se tu hai una rubrichetta di dieci/cento nomi che fai? Ci metti un bel
indice strutturato ad albero?
Questo albero come lo gestisci?
Lo tieni in memoria?
Poi lo metti su disco?
Lo devi tenere bilanciato?
Se vuoi fare le ricerche con piu' campi quanti indice ad albero ti
fai?
Ne vale sempre la pena?
La semplice soluzione che avevo dato se utlizzata bene e sviluppata
puo' essere altrettanto veloce. Anche di piu'.
L'idea iniziele era questa:
Il file indice viene costruito inserendo chiave e posizione del
record. Non viene mantenuto ordinato e la ricerca si fa in modo
equenziale. Se il record non sono tanti va benissimo. In questo caso
si possono inserire anche piu' chiavi senza complicare nulla.
Ora se si vuole una maggiore velocita' perche' i record sono diventati
tanti faccio cosi'.
- il file indice lo tengo ordinato. Gli inserimenti dei nuovi record e
quindi dei nuovi indici lo faccio con il Bubbe-sort (costo lineare).
Per fare ricerche con altri campi devo costruirmi altri file indici.
-La ricerca nel file indice non la faccio piu' sequanzialmente ma
mendiante una ricerca logaritmica.
Velocita?
Maggiore o uguale a quella su di un albero.
Fabio
--
fabioma...@rocketmail.com

quindi dei nuovi indici lo faccio con il Bubbe-sort (costo lineare).
Ma per favore !
Studia bene i sistemi di gestione dei dati prima di dire queste cose.
La struttura dei file indice e' tale da mantenere i dati in forma
auto-ordinata.