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; } }

Rispondi quotando


