PDA

Visualizza la versione completa : [C] Lettura da file di informazioni testuali con struttura particolare


9600xt
12-11-2007, 13:31
salve, ho un file nel quale ho salvato delle stringhe catturate con la funzione fgets(), lo scopo del mio programma dovrebbe essere quello di fare il backup degli sms e quindi creare un file di testo simile a questo qui:


Backup SMS 10/11/2007

------------------
|| DATA-ORA || : 14/10/2007 14.25
------------------
-------------------
|| MITTENTE || : Mario Rossi
-------------------
---------------------
|| TESTO SMS || : Prova trasmissione
---------------------

------------------
|| DATA-ORA || : 15/10/2007 14.25
------------------
-------------------
|| MITTENTE || : Tizio
-------------------
---------------------
|| TESTO SMS || : Helloworld
---------------------


Le parti che contengono le intestazioni tipo la scritta iniziale "bakup sms" la data che la segue e poi le varie intestazioni data-ora mittente etc etc sono contenute in degli array che faccio di volta in volta stampare dentro al file, poi faccio fare la lettura dell'input dell'utente tramite una fgets() e stampo tutto dentro al file. La mia domanda è la seguente, una volta fatto ciò ed ottenuto il risultato dell'esempio se volessi fare una ricerca dentro al file di un sms per data, per mittente o per altro, come faccio a far leggere al programma le stringhe che mi interessano saltando tutte le intestazioni e le cose che comunque sono estranee ai dati puramente relativi all'sms??? Altra domanda, ammettendo che la prima volta faccia il backup di un sms e poi dopo 2 giorni volessi farlo di un'altro sms di un mese prima come posso fare in modo che il programma mi ordini cronologicamente il tutto dentro al file? (quest'ultima questione è secondaria, è più importante la prima domanda).

oregon
12-11-2007, 13:40
Non essendoci alcun file "indice", in tutti e due i casi devi leggere tutto il file ed elaborare riga per riga.

Ovvero, per fare una ricerca, *se i dati salvati non hanno lunghezza fissa*, allora devi leggere tutto, riga per riga.
Al contrario, *se i dati hanno lunghezza fissa*, allora puoi scrivere il codice usando la fseek in modo da posizionare la lettura all'inizio del campo secondo il quale fai la ricerca (ma, in ogni caso, dovrai leggerli tutti ...).

Lo stesso vale per l'ordinamento.

O implementi qualcosa di piu' complesso (struttura ad albero, indice separato ...) o usi un database ...

9600xt
12-11-2007, 13:51
interessante ciò che mi hai suggerito, innanzitutto grazie, poi ho qualche altra domandina: non essendo i dati che inserisco a lunghezza fissa (tranne la data e l'ora che lo sono) ma essendo a "lunghezza massima" posso usare comunque la funzione che mi indichi tu con il nome di fseek?? poi non avendo mai sentito parlare di file di indice ma questo mi interessa meno perchè non mi va di creare altri file oltre l'eseguibile e il file contenente i dati, e soprattutto questo più interessante non avendo mai sentito parlare di strutture ad albero ed indici separati e database potresti gentilmente indicarmi qualcosa o un link o non so cosa in cui potere andarmi ad informare? questa degli alberi ed indici mi pare la cosa migliore, perchè non mi piace l'idea di dover perforza leggere tutto il file per ogni operazione.

Loading