Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [C] Ricerca in una struct-file

    salve raga, ho una struct cosi' costruita che ho caricato in memoria, salvata in un file e caricata in output per ogni utente per vedere se fungeva tutto correttamente , e vabene.

    codice:
    struct cantanti
    {
        int id;
        char nome[maxcaratteri];
        char cognome[maxcaratteri];
        char nazionalita[maxcaratteri];
        char sesso[2];
        char genere[maxcaratteri];
    };

    adesso vorrei che se io inserissi la ricerca per genere"house" lui mi da in output tutti i cantanti memorizzati che hanno nel genere la parola "house", consigli?

    questo e' come ho salvato un cantante :
    struct cantanti input1 = {1, "bob", "sinclair","francese","m","house\0"};

    se mi date un codice per districarmi meglio ne sarei grato
    Ultima modifica di LeleFT; 24-04-2018 a 18:25 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    I linguaggi .NET vengono trattati nel forum "Visual Basic e .NET Framework".

    Sposto.

    PS: Usa i tag CODE per il codice.


    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
    Utente di HTML.it
    Registrato dal
    Apr 2011
    residenza
    Arezzo
    Messaggi
    194
    immagino che in memoria avrai una List<cantanti> o qualcosa di simile, in questo caso puoi utilizzare le Linq ed estrarre i dati come vuoi, presumo inoltre che dalla struct che hai postato di esempio hai volontariamente rimosso i modificatori di accesso, perchè se i campi per i quali vuoi filtrare non sono public (anche in sola lettura), non puoi vederli e quindi nemmeno filtrarli

    ad esempio, ammettendo che la lista di cui sopra si chiami 'ListaCantanti'
    codice:
    var result = ListaCantanti.Where(c => c.genere == "house").Select(c => c).ToList();
    Qualcosa di questo tipo dovrebbe aiutarti
    Riccardo Sadocchi
    Microsoft MCP C#

  4. #4
    Quote Originariamente inviata da rikyeko Visualizza il messaggio
    immagino che in memoria avrai una List<cantanti> o qualcosa di simile, in questo caso puoi utilizzare le Linq ed estrarre i dati come vuoi, presumo inoltre che dalla struct che hai postato di esempio hai volontariamente rimosso i modificatori di accesso, perch� se i campi per i quali vuoi filtrare non sono public (anche in sola lettura), non puoi vederli e quindi nemmeno filtrarli

    ad esempio, ammettendo che la lista di cui sopra si chiami 'ListaCantanti'
    codice:
    var result = ListaCantanti.Where(c => c.genere == "house").Select(c => c).ToList();
    Qualcosa di questo tipo dovrebbe aiutarti
    Allora questo � per un progetto , ti spiego meglio , sto lavorando su codeblock in C# ( non c++) e sto lavorando con i file. In pratica ho caricato in memoria la struttura dati, la faccio scrivere su un file e la visualizzo poi in output sullo schermo e funziona tutto perfettamente . La struct l ho caricata fuori dal main e ho lavorato in vari "case" nello switch per caricare su file e poi visualizzare . Appena posso ti posto il codice cos� se sei gentile mi aiuteresti a capirne un po' di pi� ( non si smette mai )

  5. #5
    Quote Originariamente inviata da rikyeko Visualizza il messaggio
    immagino che in memoria avrai una List<cantanti> o qualcosa di simile, in questo caso puoi utilizzare le Linq ed estrarre i dati come vuoi, presumo inoltre che dalla struct che hai postato di esempio hai volontariamente rimosso i modificatori di accesso, perchè se i campi per i quali vuoi filtrare non sono public (anche in sola lettura), non puoi vederli e quindi nemmeno filtrarli

    ad esempio, ammettendo che la lista di cui sopra si chiami 'ListaCantanti'
    codice:
    var result = ListaCantanti.Where(c => c.genere == "house").Select(c => c).ToList();
    Qualcosa di questo tipo dovrebbe aiutarti
    codice:
    struct cantanti
    {
        int id;
        char nome[maxcaratteri];
        char cognome[maxcaratteri];
        char nazionalita[maxcaratteri];
        char sesso[2];
        char genere[maxcaratteri];
    };
    
    
    
    
        case 1: //la scelta 1 e' la scrittura dei cantanti su file
                    {system("cls");//ripulisce lo schermo
                    FILE *outfile;//puntatore a file
    
        //lista dei cantanti dichiarati come "input"
        struct cantanti input1 = {1, "bob       ", "sinclair  ","francese","m","house\0"};
        struct cantanti input2 = {2, "michael   ", "jackson   ","americana","m","pop\0"};
        struct cantanti input3 = {3, "loredana  ", "berte'    ","italiana","f","rock\0"};
        struct cantanti input4 = {4, "albano    ", "carrisi   ","italiana","m","leggera\0"};
        struct cantanti input5 = {5, "tim       ", "bergling  ","svedese","m","house\0"};
        struct cantanti input6 = {6, "tiziano   ", "ferro     ","italiana","m","pop\0"};
        struct cantanti input7 = {7, "fabrizio  ", "tarducci  ","italiana","m","rap\0"};
        struct cantanti input8 = {8, "david     ", "guetta    ","francese","m","elettronica\0"};
        struct cantanti input9 = {9, "sfera     ", "ebbasta   ","italiana","m","trap\0"};
        struct cantanti input10 = {10, "gue'    ", "pequeno   ","italiana","m","rap\0"};
        struct cantanti input11 = {11, "vittorio", "dimango   ","italiana","m","house\0"};
        struct cantanti input12 = {12, "eros    ", "ramazzotti","italiana","m","pop\0"};
        struct cantanti input13 = {13, "antonello", "venditti","italiana","m","leggera\0"};
        struct cantanti input14 = {14, "fabrizio", "deandre' ","italiana","m","leggera\0"};
        struct cantanti input15 = {15, "capo    ", "plaza     ","italiana","m","trap\0"};
        struct cantanti input16 = {16, "dark    ", "pologang  ","italiana","m","trap\0"};
        struct cantanti input17 = {17, "sonny   ", "skrillex  ","americano","m","elettronica\0"};
        struct cantanti input18 = {18, "boys    ", "noize     ","tedesco","m","elettronica\0"};
        struct cantanti input19 = {19, "fabio   ", "marracash","italiana","m","rap\0"};
        struct cantanti input20 = {20, "roger   ", "waters    ","inglese","m","rock\0"};
        struct cantanti input21 = {21, "jimi    ", "hendrix   ","inglese","m","rock\0"};
    
    //apre il file cantanti.dat in modalita' write
        outfile = fopen ("cantanti.dat", "w");
        if (outfile == NULL)
        {
            fprintf(stderr, "\nErrore apertura file\n");//non riesce ad aprire il file e segna un messaggio di errore
            exit (1); //errore di uscita 1
        }
    
    
        //inizio scrittura su file di ogni singolo artista
        
        fprintf(outfile, "%d\t%s\t%s\t%s\t%s\t%s\n\n", input1.id, input1.nome, input1.cognome, input1.nazionalita, input1.sesso, input1.genere);
        fprintf(outfile, "%d\t%s\t%s\t%s\t%s\t%s\n\n", input2.id, input2.nome, input2.cognome, input2.nazionalita, input2.sesso, input2.genere);
    ECC...
       
        //se fwrite e' diverso da 0 allora la scrittura va a buon fine
        if(fwrite != 0)
            printf("scrittura completata\nI cantanti sono stati inseriti\n\n");
        else //altrimenti la scrittura non puo' essere eseguita
            printf("errore scrittura cantanti !\n");
    
    
        fclose(outfile); //chiusura del file
    
    
                    system("pause");
                    system("cls");}
                    break;
    
    
        case 2: //la scelta 2 e' la visualizzazione su schermo di tutti i cantanti
                    {system("cls");
                    FILE *outfile;
                    outfile = fopen ("cantanti.dat", "r"); //apro il file in lettura
    
    
        struct cantanti input;
    //*******************************************************************************************************************************************************************************
        printf("<ID>\t<NOME>\t\t<COGNOME>\t<NAZIONALITA'>\t     <SESSO>\t<GENERE MUSICALE>\n");
        //1
        fscanf(outfile, "%d %s %s %s %s %s", &input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
        printf("%d\t%s\t\t%s\t  %s\t        %s       %s\n", input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
        printf("---------------------------------------------------------------------------------------\n");
        //2
        fscanf(outfile, "%d %s %s %s %s %s", &input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
        printf("%d\t%s\t\t%s\t\t  %s\t        %s\t%s\n", input.id, input.nome, input.cognome, input.nazionalita, input.sesso, input.genere);
        printf("---------------------------------------------------------------------------------------\n");
         
        fclose(outfile); //chiusura file
    ecco il codice , scusa il disordine ma l importante e' farti capire come e' strutturato il programma

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2011
    residenza
    Arezzo
    Messaggi
    194
    Ho capito (più o meno...), non sono molto pratico di questo pattern, ma mi viene in mente una cosa, prima do ogni printf(... ...) non puoi fare un if che stampa solo per la condizione passata? o comunque non puoi leggere e caricare in memoria tutta la lista di cantanti in un oggetto, anzi una collezione che sia poi iterabile?
    L'esempio che ti avevo postato era in C# (con System.Linq) appunto, forse in questo ambiente le query Linq non puoi usarle, ma scrivendo qualche riga di codice 'condizionale' dovresti arrivarci comunque
    Riccardo Sadocchi
    Microsoft MCP C#

  7. #7
    Quote Originariamente inviata da rikyeko Visualizza il messaggio
    Ho capito (pi� o meno...), non sono molto pratico di questo pattern, ma mi viene in mente una cosa, prima do ogni printf(... ...) non puoi fare un if che stampa solo per la condizione passata? o comunque non puoi leggere e caricare in memoria tutta la lista di cantanti in un oggetto, anzi una collezione che sia poi iterabile?
    L'esempio che ti avevo postato era in C# (con System.Linq) appunto, forse in questo ambiente le query Linq non puoi usarle, ma scrivendo qualche riga di codice 'condizionale' dovresti arrivarci comunque
    Ho capito , quindi mi stai dicendo che prima di stampare a video i "cantanti" , pongo una condizione e se questa viene rispettata stampo quel cantante .. ma posso fare una comparazione tra "la scelta della condizione " � un "parametro " della struct? Scusami l ignoranza ma sono ancora all' inizio e vorrei prendere dimestichezza il pi� possibile , ti ringrazio in anticipo per l aiuto che mi stai dando . Cosa intendi per oggetto/ collezione ?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2011
    residenza
    Arezzo
    Messaggi
    194
    Certo, non so bene la sintassi per il pattern che usi, comunque una cosa del tipo

    if (parametro == cantanti.genere) ......

    cerca degli esempi sulle condizioni if, if else ... per il pattern che usi, vedrai che trovi sicuramente qualcosa che ti va bene
    Riccardo Sadocchi
    Microsoft MCP C#

  9. #9
    Quote Originariamente inviata da rikyeko Visualizza il messaggio
    Certo, non so bene la sintassi per il pattern che usi, comunque una cosa del tipo

    if (parametro == cantanti.genere) ......

    cerca degli esempi sulle condizioni if, if else ... per il pattern che usi, vedrai che trovi sicuramente qualcosa che ti va bene
    Vabene ti ringrazio tanto ! Ti aggiorno se riesco a sistemare la cosa

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non mi pare scritto in C# questo codice ...
    Ultima modifica di oregon; 28-04-2018 a 12:52
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.