PDA

View Full Version : [c] Scrittura e lettura di strutture da file


Rsk
03-02-2009, 11:49
Ciao a tutti.
Dovrei realizzare un programma che scriva una struttura su un file e poi leggere da file soltanto i campi della struttura che soddisfino certi criteri.
Sapreste darmi qualche dritta?

cionci
03-02-2009, 12:06
In cosa hai difficoltà ?
Basta scartare i campi che non soddisfano i criteri...leggerli dovrai comunque leggerli tutti.

Rsk
03-02-2009, 12:12
si ma non so come fare per scartare i campi che non mi interessano..
Stavo pensando di inserire all'inizio di ogni riga del file il nome del campo per poi scartare tutta la riga che appartiene al campo da ignorare..

cionci
03-02-2009, 12:14
Impossibile dirtelo se non so come sono fatti i campi

Rsk
03-02-2009, 13:05
typedef struct libro{
char autore[20];
char titolo[20];
int anno;
} libro;

void scriviFile()
{
libro elenco[5];
FILE *fp = fopen("archivio.txt","w");
int i;
for(i=0; i<5; i++)
{
fprintf(fp,"%s %s %d",elenco[i].autore, elenco[i].titolo, elenco[i].anno);
}


}

Questa è una bozza del codice. Ho un array di tipo libro da stampare su file

cionci
03-02-2009, 13:14
Allora metti in testa un carattere....1 o 0. 1 da prendere, 0 da scartare.

gugoXX
03-02-2009, 13:32
Suggerisco di usare XML.

banryu79
03-02-2009, 13:38
Suggerisco di usare XML.
Per così poco?

cionci
03-02-2009, 13:39
Suggerisco di usare XML.
Boh...se gli serve solo quello imho è come sparare ad un passerotto con un cannone :D
Io supponevo che avesse come vincolo di mantenere un file di testo leggibile, altrimenti avrei puntato su un file binario.

gugoXX
03-02-2009, 14:23
ah!
Se deve scrivere UNA sola istanza di una struttura allora XML forse e' un po' troppo...

Rsk
03-02-2009, 19:24
in pratica dopo aver scritto l'array di strutture su file devo stampare solo i titoli dei libri usciti dopo una certa data ma non so proprio come fare :confused:

cionci
03-02-2009, 19:28
in pratica dopo aver scritto l'array di strutture su file devo stampare solo i titoli dei libri usciti dopo una certa data ma non so proprio come fare :confused:
Ma allora non devi assolutamente mettere niente nel file. Leggi un record dal file, se la data è maggiore di quella cercata allora lo stampi, altrimenti passi al record successivo.

Rsk
03-02-2009, 19:32
si.. devo capire come fare.. :)

cionci
03-02-2009, 19:49
si.. devo capire come fare.. :)
Stamparli tutti ti riesce ? Se ti riesce allora basta un if...identico a come l'ho scritto io a parole sopra.

Rsk
04-02-2009, 11:28
void scriviFile()
{
int i;
libro elenco[5];
for(i=0; i<5; i++)
{
printf("Autore\tTitolo\tAnno\n");
scanf("%s %s %d", &elenco[i].autore, &elenco[i].titolo, &elenco[i].anno);
}

FILE *fp = fopen("archivio.txt","w");

for(i=0; i<5; i++)
{
fprintf(fp,"Autore : %s Titolo : %s Anno : %d\n",elenco[i].autore, elenco[i].titolo, elenco[i].anno);
}


}


Questo è il codice con cui scrivo la struttura nel file ma non so come fare l'if per selezionare i campi da stampare

cionci
04-02-2009, 11:30
E' semplice, basta un if...pensaci un po', come ho scritto sopra: se l'anno è maggiore di quello cercato allora lo stampi.