ciao a tutti
ho scritto questo piccolo codice come esercizio di creazione e lettura di file binari .
Se volessi trovare un dato specifico nel file binario che ho creato , come faccio ?
Cioè se volessi trovare il record che si chiama pippo che funzione devo usare ?
devo per forza ordinare il file prima di fare una ricerca ??
Questo è il codice che ho scritto :
codice:
include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define STORE_FILE "store.dat"
#define READ_FILE "read.txt"
#define L 50 //lunghezza massima ogni inserimento
typedef struct { //dato strtutturato
char libro[L];
char autore [L];
char prezzo [];
}libro;
void scambia (libro v[],long i ,long j);
main(){
long indice;
char ty;{ //char menù
printf("\n\t----------------------");
printf("\n\t-Menu'di scelta- ");
printf("\n\t----------------------");
printf("\n\t1-Inserisci libro ");
printf("\n\t2-leggi dati ");
printf("\n\t3-Esci ");
printf("\n\t4-Leggi elenco anagrafica");
printf("\n\t5-Cerca per autore");
}
printf("\n\t----------------------");
printf("\n\t-Scelta : ",ty);
printf("\n\t=>");
ty=getchar();
getchar(); //riga che annulla l'invio dopo la scelta (riga inutile).
switch (ty) {
case '1':
FILE *fp;
libro l;
int i;
if(!(fp=fopen(STORE_FILE,"a+b"))){
printf("\nErrore scrittura file%s",STORE_FILE);
exit(1);
}
else
printf("\n\t\t==>Iserisci<== ");
printf("\n-Autore:"); //scrivoi dati
gets(l.autore);
printf("\n-Titolo:");
gets(l.libro);
if(fwrite(&l,sizeof(l),1,fp)>0){ //Scrivo il file binario
printf("\nDati scritti OK");
printf("\n----------------");
fclose(fp);
}
{
FILE *fp ;
fp= fopen("read.txt","a+"); //Scrivo il file testuale read.txt
fprintf(fp,"\nAutore:%s\t\t\tTitilo libro:%s",l.autore,l.libro);
fclose (fp);
}
return main(); //ritorno alla funzione principale main
break;
case'2':
if(!(fp=fopen(STORE_FILE,"rb"))){ //legggo il file binario
printf("\n errore di lettura dei dati%s ",STORE_FILE);
exit(1);
}
while(fread(&l,sizeof(l),1,fp)>0){
printf("\n-Autore:%s",l.autore);
printf("\n-Titolo:%s",l.libro);
printf("\n------------");
i++;
}
{
int c;
c=i-55;
printf("\n=================");
printf("\n-Titoli letti :%d\n",c);
printf("\n=================");
fclose(fp);
return main() ; //torno al main ()
break ;
}
case '3':
exit(1); // usicta dal programma
break;
case '4':
system ("start notepad.exe read.txt");
return main(); // torno al main()
break;
case '5':
char str[10];
printf("\nInserisci la ricerca: ");
gets(str);
//come faccio ad comparare questa con quella ottenuta leggendo il file.dat e ad usarla successivamente per creare un'altro file ?
} break;
}
}