Visualizzazione dei risultati da 1 a 4 su 4

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2013
    Messaggi
    24

    [C] Leggere uno specifico dato da un file

    Buona pasquetta a tutti

    poco fa mi sono imbattuto nel seguente dilemma, e non trovando tantissime risposte volevo chiedervi qualche consiglio. vi spiego il problema:

    creo un nuovo file in modalità write con inserimenti " numerati "
    per intenderci, il file riceve in ingresso i dati in questa maniera :

    codice:
    printf("\nCompila i seguenti campi\n");    do{
            printf("\nInserimento numero %d\n" ,i);    
            printf("Nome:\n");
            scanf("%s" ,&l.nome);
            printf("Cognome:\n");
            scanf("%s" ,&l.cognome);
            printf("Codice:\n");
            scanf("%d" ,&l.codice);
            fprintf(pf, "%d\n%s %s\n%d\n\n" , i, l.nome, l.cognome, l.codice);
            printf("Inserire -1 per terminare, qualunque altro numero intero per continuare\n");
            scanf("%d" ,&spia);
            if(spia > -1)
                i++
        }while(spia != -1);
        cls=fclose(pf);
        if(cls != 0)
            printf("\nErrore nella chiusura del file\n");
    Ora il file dovrebbe essere scritto in questa maniera ( per facilità di lettura utilizzerò la tag del code

    codice:
    1
    Alessio bombolone
    234321
    
    2
    Angelo Fonfofofo
    3432324 
    
    e così via...
    la mia domanda è la seguente:

    se io volessi leggere solo il numero dell'inserimento, ossia il numero che si trova sopra ogni nome (1 , 2 nell'esempio), in modo da utilizzarlo come indice-grandezza massima di un array. come potrei fare?

    io avevo cominciato a pensare ad un piccolo algoritmo in via teorica, senza codice, ma su alcuni passi sono ancora dubbioso.

    questo è stato il mio ragionamento :

    devo ricercare il %d maggiore, anche se ricevo 2 %d diversi ( il numero più lungo, sotto il nome della persona) posso usare l'operatore modulo per distinguere su quale andrò a lavorare in quanto il codice della persona è sempre un numero pari, il numero d'inserimento è sempre dispari.
    in particolare qui è sorto il primo dubbio: leggendo il file riga per riga, sarei obbligato a leggere anche i %s. o c'è un modo anche per scandire la lettura delle righe, leggendo solo i dati che a me interessano di più?

    premesso è un esercizio, devo utilizzare il file e stavo pensando di indicizzare un array per poi favorire la cancellazione e la gestione degli elementi per indice.
    Non è possibile utilizzare liste ( non è una mia scelta, non sono contemplate nella consegna )

    Nel caso non fossi stato chiaro \o non poco pretenzioso np e grazie lo stesso

    ---------------Aggiornamento ------------------

    Piccolo(credo) passetto avanti( forse sbagliato)

    per ricavarmi l'indice e avere i successivi inserimenti in modalità append di modifica del file utilizzo, per ora il seguente codice )

    codice:
    int grandezza_array(char nomefile[]){
        FILE *pf;
        int i=0;
        Persona l={"","", 123456};
    
    
    
    
        pf=fopen(nomefile, "r");
        if(pf == NULL)
            printf("\n Errore nell'apertura del file\n");
    
    
        while(!feof(pf) )
        {
            fscanf(pf,"%d\n%s %s\n%d\n\n", &i, &l.nome, &l.cognome, &l.codice);
        }
    
    
        ind=i;
        printf("%d" ,ind);
    
        return i;
    }
    questa funzione ritorna i, e salva in ind ( una variabile che ho messo come globale ) il numero dell'ultimo inserimento, il resto dei dati ( nome, cognome etc, tranne la I ) dovrebbero perdersi alla fine della funzione

    fine aggiornamento
    Ultima modifica di legeo88; 21-04-2014 a 15:04

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 © 2025 vBulletin Solutions, Inc. All rights reserved.