Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] trovare un record preciso

    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;
        
            
    }
    
    
    }
    Ultima modifica di LeleFT; 26-11-2015 a 18:41 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Quando posti del codice, inseriscilo all'interno degli appositi tag [CODE] .. [/CODE] così da mantenere formattazione ed indentazione e renderlo quindi più leggibile.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3

    [CODE]

    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Quando posti del codice, inseriscilo all'interno degli appositi tag
    codice:
     ..
    così da mantenere formattazione ed indentazione e renderlo quindi più leggibile.

    Ciao.
    OK

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Leggi record per record e confronti, se arrivi in fondo senza trovarlo non c'è.
    Se vuoi fare una ricerca binaria devi mantenere il file ordinato.
    Basta che nella scrittura usi un insertion sort. Il baco è che poi devi scalare in avanti tutti i record successivi.

    Dipende se fai più inserimenti o letture.
    Se fai quasi solo inserimenti e letture complete un file non ordinato è preferibile: inserimento O(1) ricerca O(n) lettura completa (non ordinata) O(n)
    Se fai quasi solo ricerche è preferibile un file ordinato: inserimento O(n) ricerca O(log(n)) lettura (ordinata) O(n)
    Poi ci sono altre soluzioni più avanzate quali hashtable o n plus tree
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.