Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 38

Discussione: [C++] modifica file

  1. #1

    [C++] modifica file

    ciao raga, mi potreste aiutare??
    Questo mio programma, dovrebbe gestire una rubrica ( e' solo un inizio per adesso).
    Funziona, va' tutto bene, il problema avviene quando, voglio fare la modifica, Inserendo '5'.
    Dopodiche', viene chiesto di inserire il numero della persona, il campo da modificare, e la parola modificata.
    Una volta inserito questi dati, il programma scrive su file, ma non mi rispetta il tracciato record, viene scritta la parola modificata, ma sfasata.
    codice:
    # include <iostream>
    # include <windows.h> 
    # include <string> 
    # include <fstream>
    # include <sstream>  //per la funzione stringstream
    using namespace std;
    
    string nome, cogn, numero, mail, modif;
    string linea;
    long pos;
    int i,Num;
    
    void acquis_scritt(ofstream &write);
    void leggi_stampa();
    int conta_righe();
    
    int main()
    {
      int scelta, Nriga, opz;
      char ok;
      cout << "RUBRICA telefonica\n"<<endl;
    
      while (scelta!=6)
      {     
      cout << "1) Inizia Rubrica "      << endl;
      cout << "2) Aggiungi Contatti "   << endl;
      cout << "3) Visualizza contatti " << endl;
      cout << "4) Elimina Rubrica "     << endl;
      cout << "5) Modifica contatti"    << endl;
      cout << "6) Esci" << endl;
      cin >> scelta; 
    
      if (scelta==1)
                    {
                     ofstream write("Rubrica.txt",ios::out);
                     write << "N°";
                     write.seekp (5, ios_base::beg);
                     write << "NOME";
                     write.seekp (25, ios_base::beg);
                     write <<"COGNOME";
                     write.seekp (45, ios_base::beg);
                     write <<"NUMERO";
                     write.seekp (57, ios_base::beg); 
                     write <<"E-MAIL"<<endl;
                     Num=1;
                     acquis_scritt(write);
                     write.close();                    
                    }
      if (scelta==2)
                    {
                     ofstream write("Rubrica.txt",ios::app);
                     Num=conta_righe();
                     acquis_scritt(write);
                     write.close(); 
                    } 
      if (scelta==3)
                    {
                     leggi_stampa();
                    }         
      if (scelta==4)
                    {
                     cout << "Sei sicuro di voler eliminare la rubrica? (s/n)" << endl;
                     cin >> ok;
                     if (ok=='s' || ok=='S')
                                            {                    
                                            ofstream remove("Rubrica.txt");
                                            remove.close(); 
                                            cout << "Rubrica Eliminata!! "<<endl;  
                                            }                  
                    } 
      if (scelta==5)
                    {
                     leggi_stampa();                       
                     cout << "Inserisci il numero corrispondente alla personona" << endl;
                     cin >> Nriga;  
                     cout << "Inserisci '1' per il nome"    << endl;       
                     cout << "Inserisci '2' per il cognome" << endl;  
                     cout << "Inserisci '3' per il numero"  << endl;   
                     cout << "Inserisci '4' per l'e-mail"   << endl;  
                     cin >> opz;
                     cout << "Inserisci il campo modificato" << endl;
                     cin >> modif;
                     fstream r_w("Rubrica.txt",ios::in | ios::out);
                     if(r_w)
                            {
                            for(i=1;i<=Nriga;i++)                                                
                                                r_w >> linea;
                            }   
                     switch (opz) 
                     {
                      case 1:                      
                      r_w.seekp (5, ios_base::cur);
                      modif.resize(20);
                      r_w << modif;                                
                      break;
                      case 2:
                      r_w.seekp (25, ios_base::cur);  
                      modif.resize(20);
                      r_w << modif;   
                      break;
                      case 3:
                      r_w.seekp (45, ios_base::cur);
                      modif.resize(12);
                      r_w << modif;                      
                      break;
                      case 4:
                      r_w.seekp (57, ios_base::cur);
                      modif.resize(35);   
                      r_w << modif;  
                      break;          
                     } 
                      r_w.close();                            
                    }
                     
      if (scelta!=3)
                    system("CLS");                                                     
      } 
      cout << "Sei uscito dal programma." <<endl;                                     
      system("PAUSE");  
    }
    //------------------------------------------------------------------------------
    void acquis_scritt(ofstream &write)
    {
    ////////////////////////////  Scrive il contenuto di variabile 
        stringstream s;      //   intera su file di 5 byte
        string ss;          //          
        s << Num;          //
        ss = s.str();     //
        ss.resize(5);    //
        write <<ss;     //
    /////////////////////    
     cout << "Inserisci  nome:"<<endl;
     cin >> nome;
     nome.resize(20);
     write << nome; 
    
     cout << "Inserisci  cognome:"<<endl; 
     cin >> cogn;
     cogn.resize(20);
     write << cogn; 
    
     cout << "Inserisci  numero:"<<endl; 
     cin >> numero;
     numero.resize(12);
     write << numero; 
    
     cout << "Inserisci  e-mail:"<<endl; 
     cin >> mail; 
     mail.resize(35);
     write << mail << endl;
    }
    //------------------------------------------------------------------------------
    void leggi_stampa()
    {
      system("CLS"); 
      int rig = conta_righe();
      ifstream read("Rubrica.txt");
      if(read)
              {
               for(i=1;i<=rig;i++)
                                  {                                                 
                                  read >> linea;
                                  cout << linea <<endl;     
                                  } 
              }  
      read.close();          
    }
    //------------------------------------------------------------------------------
    // CONTA RIGHE
    int conta_righe()
        {
        fstream file;
        string s;
        int contarighe=0;
        file.open("Rubrica.txt",ios::in);
        if(file)
                {
                 while(!file.eof())
                                   {
                                   getline(file,s,'\n');
                                   contarighe++;
                                   }
                }
        return contarighe-1;
        }

  2. #2
    Quando eseguo la modifica del FILE rubrica,
    funziona perfettamente, solo per modifiche della seconda riga, per il resto (delle modfiche), il programma mi scrive sul File sfasato.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Devi considerare i due caratteri cr lf alla fine della riga precedente e quindi aumentare di 2 i valori della seekp. Devono diventare 7, 27, 47, 59
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    si, ma allora perche' quando eseguo le modifiche sulla seconda riga, mi funziona perfettamente??
    non capisco??

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Salvatore_91
    si, ma allora perche' quando eseguo le modifiche sulla seconda riga, mi funziona perfettamente??
    non capisco??
    La seconda riga? Fai un esempio concreto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Cioe':
    N° () NOME ecc
    1 ( ) salvatore ecc
    2 ( ) maria ecc.

    se faccio modifiche a 'Maria', che si trova nella seconda riga, il programma funziona perfettamente, mentre se faccio modifiche a 'Salvatore' , il programma mi scrive sfasato:
    in questo modo:
    Se prima era così:
    N° () NOME ecc
    1 ( ) salvatore ecc
    2 ( ) maria ecc.

    dopo la modifica al 'nome' della prima riga (cioe' a salvatore),
    viene: (presumendo che la parola modificata inserita sia 'SALVATORE' in maiuscolo.
    N° () NOME ecc
    1 ( ) sSALVATORE ecc
    2 ( ) maria ecc.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ho fatto la prova sulla prima e sulla seconda riga e funziona ugualmente, dopo le modifiche che ti ho detto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    bhe, se lo dici tu!,
    ma dove le devo fare queste modifiche??? nei seekp dello switch???

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Salvatore_91
    bhe, se lo dici tu!,
    ma dove le devo fare queste modifiche??? nei seekp dello switch???
    Ah ... non le hai ancora fatte?

    Se non provi le modifiche che ti vengono suggerite, a cosa serve rispondere?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    si, ho provato a farle, (le modifiche delle seekp nello swtich), ma non funzionava, per questo ti chiedevo...

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.