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

    [C++]Scrivere e leggere una struct su un file di testo

    Salve a tutti.
    È il mio primo post su questo forum e capisco che l'ho fatto su un argomento trattato ampiamente(prima di decidere di scrivere quì e scocciarvi mi sono informato molto sulla rete) ma purtroppo a volte o il caso trattato era diverso dal mio oppure non era c++ ma c.

    La mia domanda è la seguente: come posso salvare una struct su un file di testo e poi rileggerla dallo stesso?

    Mi spiego meglio, ho una situazione del genere(è una situazione semplificata del problema che poi andrò a risolvere con non solo 1 nome e anno, ma molti di più e dovranno essere anche messi in ordine di età, ma queste cose le so fare, spero ):

    codice:
    struct Lista{
    char nome[30];
    int anni;
    }persona;
    poi salvo il tutto su un file:

    codice:
    ofstream ofile;
    
    ofile.open("CS.txt");
     if (ofile.fail()){
    cout<<"Errore apertura file"; 
                       }
    
    cout<<"Inserisci nome: "; 
    cin>>persona.nome; 
    ofile<<persona.nome; 
    cout<<"Inserisci anni: "; 
    cin>>persona.anni; 
    ofile<<persona.anni;  
    ofile.close();  
    
    //Funzione di lettura
    lettura();

    Ora dovrebbe partire la funzione di lettura, e quì non so come fare, perchè ho pensato di riversare tutto il file di testo in una stringa "temp" e poi dividere i numeri dalle lettere, ma non viene per nulla bene!
    Qualche consiglio o procedura da seguire?
    Vi ringrazio in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non ho capito cosa non sai fare ... leggere da file dei dati così come li hai scritti ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Non so tornare alla situazione iniziale. Ossia leggere da file ed avere in una struct nuovamente "persona.nome" il nome e in "persona.anni" gli anni, entrambi salvati precedentemente sul file di testo.
    Ti ringrazio per l'interessamento

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Per cominciare, separa i vari campi in scrittura con

    ofile<<persona.nome<<endl;

    Per leggere, usa un ifstream, lo apri e lo usi

    ifile>>persona.nome;

    ecc...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Non ci credo che era così semplice!

    Scusami se te lo chiedo, ma come fa a riconoscere che in persona.nome voglio solo lettere e in persona.anni voglio solo numeri?

    Un'ultima domanda, ora se io creassi un array Lista persona[n], mi basta fare un ciclo for in scrittura e un ciclo do-while(!ofile.eof()) per avere tante struct(ciascuna contenenti nome e anni divisi) quante sono le persone che inserisco in input?

    Comunque ti ringrazio tantissimo! Mi hai risolto un problema grandissimo in ogni caso!

  6. #6
    Ok ho testato e funziona! Mi rimane solo il dubbio di sapere come fa a separare il nome dal numero!

    Posto il codice nel caso possa servire a qualcun altro!(l'ho fatto con 2 struct ma si può benissimo cambiare il numero!

    codice:
    int main()
    {
    
    ofstream ofile;
    
    struct Lista{
    char nome[30];
    int anni;
    }persona[2];
    
    ofile.open("CS.txt");
    
    if (ofile.fail())
    {
      cout<<"Errore apertura file";
    }
    
    for(int i=0;i<2;i++){
    cout<<"Inserisci nome: ";
    cin>>persona[i].nome;
    ofile<<persona[i].nome<<endl;
    cout<<"Inserisci anni: ";
    cin>>persona[i].anni;
    ofile<<persona[i].anni<<endl;
    }
    ofile.close();
    
    lettura();
    
    
    void lettura()
    {
    	ifstream ifile;
    	
    	struct Lista{
    	char nome[30];
    	int anni;	
    			}persona[2];
    			
    	char temp[100];	
    	
    	ifile.open("CS.txt");
    	
    	for(int i=0;i<2;i++){
    	cout<<"Nome "<<i+1<<" persona: ";
    	ifile>>persona[i].nome;
    	cout<<persona[i].nome;
    	ifile>>persona[i].anni;
    	cout<<persona[i].anni<<endl;
    	}
    		
    }
    Ringrazio oregon per l'aiuto!

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da patana93
    Scusami se te lo chiedo, ma come fa a riconoscere che in persona.nome voglio solo lettere e in persona.anni voglio solo numeri?
    La questione è che legge la linea che è stata scritta ... se hai scritto una stringa e leggi una stringa va bene e così anche per il numero.

    Un'ultima domanda, ora se io creassi un array Lista persona[n] ...
    Sì ... non dovrebbe essere difficile ...

    P.S. Dato che usi C++ e non il C, potresti utilizzare le classi e non le struct e le string e non gli array di char ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Ah ecco! Per questo nel file di testo vado a capo!

    Comunque lo so che ci sono mezzi più potenti ma purtroppo devo dare Fondamenti di Informatica e non le abbiamo proprio trattate le classi e abbiamo solo accennato il tipo string, ma immaginavo che esistessero elementi che mi avrebbero semplificato la vita, ma anche così va benissimo!

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dai un'occhiata anche a

    http://www.cplusplus.com/doc/tutorial/files/

    per maggiori info
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Grazie mille!!!

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.