Caricamento struttura dati libro da file

di il
4 risposte

Caricamento struttura dati libro da file

Salve a tutti... sono nuovo nel forum, spero di non sbagliare sezioni o cose simili
Sto cercando di realizzare un piccolo software in C di biblioteca che mi memorizzi su un file txt i valori dei libri che inserisco... tuttavia quando vado a caricare dal programma tale file, i valori di Codice, Titolo, Autore e i vari Tag, mi risultano tutti uguali al primo campo inserito, nel mio caso Codice... visto che nel file txt i valori sono salvati correttamente, il problema è nella parte di codice che si occupa di caricare i valori... penso in particolare su quel "stream" nella fgets... ma non so più come fare qualcuno ha idee??

struct libro *carica(struct libro *head)
{
    char word[500];
    struct libro *punt = NULL,
                 *temp = NULL,
                 *temp1 = NULL;
    int index = 0,
        i = 0;

        punt = head;

    FILE *stream = fopen("biblioteca.txt","rwa");

    if(stream == NULL) { printf("\n\n Nessun File presente nella cartella"); }
    else
    {
    if(punt != NULL)
    {
        while(punt->prossimo != NULL)
        {
            punt = punt->prossimo;
        }

        nuovo = (struct libro*) malloc(1 * sizeof(struct libro));
        punt->prossimo = nuovo;
        punt = nuovo;

    }
    else
    {
        nuovo = (struct libro*) malloc(1 * sizeof(struct libro));
        punt = nuovo;
        head = punt;
    }

    if (stream != NULL)
    {
        while(fgets(word, 500, stream) != NULL)
        {
            index = strcspn(word, ",");
            strncpy(punt->codice, word, index);
            index = strcspn(word, ",");
            strncpy(punt->titolo, word, index);
            index = strcspn(word, ",");
            strncpy(punt->autore, word, index);

            for(i=0; i<3; i++)
            {
                index = strcspn(word, ",");
                strncpy(punt->chiavi[i], word, index);
            }
            nuovo = (struct libro*) malloc(1 * sizeof(struct libro));
            punt->prossimo = nuovo;
            temp = punt;
            temp1 = punt->prossimo;
            punt = nuovo;
       }
       free(temp1);
       temp->prossimo = NULL;
       printf("\n\n File caricato correttamente!");
    }
fflush(stream);
fclose(stream);
return head;
    }

}

4 Risposte

  • Re: Caricamento struttura dati libro da file

    Ciao, sul fileopen come opzioni metti tutte e 3 "rwa"! Prova ad usarne una "a" o "a+", vedi che effetto sortisce!
  • Re: Caricamento struttura dati libro da file

    Ma su fopen ci sono già tutte e tre "rwa" e se metto a o a+ il risultato non cambia...
    
    [visualizza database]
    
    
    
     ____________________________________________________
    
     Codice: 12345
     Titolo: 12345
     Autore: 12345
     Tag 1: 12345
     Tag 2: 12345
     Tag 3: 12345
    
     ____________________________________________________
    
     Codice: 67890
     Titolo: 67890
     Autore: 67890
     Tag 1: 67890
     Tag 2: 67890
     Tag 3: 67890
    
     ____________________________________________________
    
    
    Ecco quello che mi compare dopo aver caricato il biblioteca.txt...
  • Re: Caricamento struttura dati libro da file

    Ma come è fatto questo file .txt? Facci vedere un paio di righe d'esempio ... (se lo devi leggere usa semplicemente "r")
  • Re: Caricamento struttura dati libro da file

    12345,libro1,elia,1,2,3
    67890,libro2,Elia,4,5,6
    .....

    molto semplicemente così... codice libro, titolo, autore, tag1, tag2 e tag3...
    Dovendolo solo caricare ho già impostato comunque solo "r"

    Ho capito dove sbagliavo... quando io utilizzo strcspn, vado a dire di prendere i primi caratteri trovati tra l'inizio e la ,
    Tuttavia la funzione mi considera sempre i primi caratteri, non prosegue poi dalla prima alla seconda virgola... mi riparte da zero insomma...
    dovrei puntare poi al carattere numero index e proseguire da quel punto fino a nuova virgola...
Devi accedere o registrarti per scrivere nel forum
4 risposte