Newsgroup: it.comp.lang.c
Titolo: gestire db ascii con il C

Ciao a tutti,
ho un problemino che non so esattamente come affrontare, quindi... eccomi a
rompere.
Dovrei lavorare acquisendo dati da un db ascii (un file txt con i campi
divisi da punto e virgola). Il mio problema e' che non ho idea di come
riuscire a prelevare i vari record e scaricarle in un array. C'e' qualcuno
che sa suggerirmi dei metodi ho ha a disposizione un demo?
Grazie in anticipo
Ciao
Ivan

 che sa suggerirmi dei metodi ho ha a disposizione un demo?
Usa le funzioni fopen()/getc() per leggerti un carattere alla volta e
interpretarne 'on the fly' il contenuto.
EMG

che sa suggerirmi dei metodi ho ha a disposizione un demo?
Crea il recodrd mediante "struct" con i vari campi in formato stringa
e leggi il file record per record .
Stai attento a saltare i caratteri di "ritorno a capo".
Andrea Laforgia

 e leggi il file record per record .
Dato che, da quello che ho capito, i campi non sono a lunghezza fissa ma
delimitati con il punto e virgola allora non è possibile utilizzare la
fread() e bisogna andare per forza di getc().
EMG


ICQ #34602650

fread() e bisogna andare per forza di getc().
Se e' vero che e' un database, i campi devono avere per forza
lunghezza fissa.
Andrea Laforgia

fread() e bisogna andare per forza di getc().
Ops...chiedo scusa...se i campi sono delimitati da ; e' ovvio che non
sono a lunghezza fissa.
In tal caso, si' e' meglio utilizzare getc().
Andrea Laforgia

Beh, per il momento grazie,
ora non resta che provare.
(Confermo che i campi non hanno la stessa dimensione, la tabella e' un
estratto da Access come txt.)
Grazie ancora
Bye Ivan

con fscanf e poi fare il parsing della riga in memoria. 
In termini di velocita' credo sia la stessa cosa, in quanto la lettura
dovrebbe essere comunque "bufferizzata".
E comunque credo che la lettura carattere per carattere sia molto piu'
comoda.
Andrea Laforgia

 con fscanf e poi fare il parsing della riga in memoria.
Hai ragione.
EMG

Io andrei di fgets e, poi, di strtok. Cosi' si che e' comodo!
Gll


 wrote in message
3714475B...@plangroup.it...

Cos'è il parsing? Significa elaborare la stringa?


 Andrea Laforgia

 sono a lunghezza fissa.
Ok, tutto a posto. Non avevo letto questo post...


Cos'è il parsing? Significa elaborare la stringa?
Il termine parser indica l'interprete di una certa grammatica.
In realta' quello che viene creato con questo programma non e' un
parser ma un analizzatore lessicale, che e' lo strumento su cui si
basa il parser per il riconoscimento di simboli terminali.
L'analizzatore lessicale riconosce in stringhe di caratteri un oggetto
unico, in questo caso il valore di un campo.
Il parser, invece, stabilisce che i campi sono separati dal ;
Andrea Laforgia

Perchč? Non basta usare degli identificatori univoci?
Che vuol dire "identificatore univoco" ?
Il campo di un database non varia mai la sua lunghezza in dipendenza
dal record di appartenenza, proprio perche' il concetto di campo e'
complementare a quello di record nel definire il database come una
struttura righe x colonne.
Ogni record e' una riga, ogni campo una colonna.
Andrea Laforgia

 wrote in message
371f7dc...@diesel.cu.mi.it...


la lunghezza del campo?
Non riesco a capire bene cosa vuoi dire.
Nel file di testo in questione non ci sono i nomi dei vari campi, ma i
valori contenuti in ogni campo del record (e separati dal ';' )
Per esempio, se i campi sono CODICE, COGNOME, NOME, INDIRIZZO potrebbe
essere :
4356;Rossi;Mario;via dei platani 21
23;Bianchi;Umberto;via delle rose 43
899;Verdi;Filippo;via del gelsomino 11
In questo caso il campo CODICE deve essere numerico e tanto lungo
(come dimensione in bit) da contemplare numeri sino al 4356.
Allo stesso modo i campi COGNOME e NOME devono essere lunghi almeno 7
caratteri.
Ancora, INDIRIZZO deve essere lungo almeno 20 caratteri.
Quando si progetta un database si pone l'attenzione sulla dimensione
dei campi che ospiteranno i valori di ogni record in modo che,
presumibilmente, essa copra tutte le possibili lunghezze per i valori
di quel campo.
Andrea Laforgia