Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: [C++] stampa FILE

  1. #1

    [C++] stampa FILE

    Ciao, mi sapreste dire, perche' questo mio pezzo di programma che legge da un file e stampa su monitor, mi stampa in questo modo:
    codice:
    NOME.....ecc
    salvatore....ecc
    (lascia una riga vuota)
    alessia.....ecc
    E' strano, perche' nel fine, non c'e' nessuna riga vuota.

    codice:
    ..
    ..
    // invoco nel programma principale la procedura leggi_stampa
    ..
    ..
    void leggi_stampa()
    {
      system("CLS"); 
      string linea;
      int i = 0;
      int rig = conta_righe();
      ifstream read("Rubrica.txt");
      if(read)
              {
               for(i=1;i<=rig;i++)
                                  {                                                 
                                  read >> linea;
                                  cout << linea <<endl;     
                                  } 
              }  
      read.close();          
    }
    //------------------------------------
    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
    La funzione conta_righe() sembra del tutto inutile, qual'è la sua utilità in pratica ?
    Usa direttamente la getline() nella funzione leggi_stampa() invece dell'operatore di estrazione >> che non legge una riga, ma un solo un token.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [C++] stampa FILE

    Originariamente inviato da Salvatore_91
    Ciao, mi sapreste dire, perche' questo mio pezzo di programma che legge da un file e stampa su monitor, mi stampa in questo modo ...
    Dipende solo da come hai scritto il file.

    E dato che non hai piu' risposto a questo thread

    http://forum.html.it/forum/showthrea...readid=1314248

    (in cui avevi mostrato tanta fretta), non si puo' rispondere ....
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    ecco tutto il codice completo. quando lo eseguo funziona, scrive sul file, e non lascia nessuna riga vuota
    codice:
    # include <iostream>
    # include <windows.h> 
    # include <string.h> 
    # include <fstream>
    using namespace std;
    
    string nome, cogn, numero, mail;
    string linea;
    long pos;
    int i;
    
    void inizia();
    void acquis_scritt(ofstream &write);
    void scrittura();
    void leggi_stampa();
    int conta_righe();
    
    int main()
    {
      int scelta,rigaFile,colon,Nrighe;
      char ok;
      cout << "RUBRICA telefonica\n"<<endl;
    
      while (scelta!=5)
      {     
      cout << "1) Inizia Rubrica " << endl;
      cout << "2) Aggiungi Contatti " << endl;
      cout << "3) Visualizza contatti " << endl;
      cout << "4) Elimina Rubrica " << endl;
      cout << "5) Esci" << endl;
      cin >> scelta; 
    
      if (scelta==1)
                    {
                     ofstream write("Rubrica.txt",ios::out);
                     write << "NOME";
                     write.seekp (20, ios_base::beg);
                     write <<"COGNOME";
                     write.seekp (40, ios_base::beg);
                     write <<"NUMERO";
                     write.seekp (52, ios_base::beg); 
                     write <<"E-MAIL"<<endl;
                     acquis_scritt(write);
                     write.close();                    
                    }
      if (scelta==2)
                    {
                     ofstream write("Rubrica.txt",ios::app);
                     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!=3)
                    system("CLS");                                                     
      } 
      cout << "Sei uscito dal programma." <<endl;                                     
      system("PAUSE");  
    }
    //------------------------------------------------------------------------------
    void acquis_scritt(ofstream &write)
    {
     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;
        }
    invece quando inserisco '3' visualizza contatti, mi stampa a monitor una riga vuota

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La riga vuota la vedi solo perche' tutti i dati, in totale, sono lunghi 87 caratteri e quindi una riga da 80 non basta ...

    P.S. Ho visto che hai usato il suggerimento con la resize nella funzione che scrive ... avresti potuto scrivere nel thread in cui ti ho dato il suggerimento che la cosa aveva funzionato (non dico ringraziare, ma solo dire che aveva funzionato ...). Molto spesso non rispondi alla fine dei thread e sembra che tu non legga quello che ti si scrive, ma pretendi solamente risposte ... credo personalmente, che questo tuo comportamento non vada bene ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    ehm, scusami

  7. #7
    pero' se uso questo metodo per leggere e poi scrivere il file sul monitor, non mi va a capo.
    codice:
    // dichiarazione  var
    filebuf *pbuf;                 
    ifstream filestr;              
    long size;                      
    char * buffer;   
    
    
    void leggi_stampa()
    {                  
                      filestr.open ("Rubrica", ios::binary | ios::in);  
                      pbuf=filestr.rdbuf();
                      size=pbuf->pubseekoff (0,ios::end,ios::in);
                      pbuf->pubseekpos (0,ios::in);
                      buffer=new char[size];
                      pbuf->sgetn (buffer,size);
                      filestr.close();
                      cout.write (buffer,size);
                      free(buffer); 
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Salvatore_91
    ehm, scusami
    No problem ... ma fai attenzione in futuro alla "netiquette" ... (al modo di comportarti nel forum ...) perche' non vedo perche' rispondere alle tue richieste se poi non dai alcuna risposta e, come se nulla fosse, apri un nuovo problema ...

    Originariamente inviato da Salvatore_91
    pero' se uso questo metodo per leggere e poi scrivere il file sul monitor, non mi va a capo.
    Non e' vero ... e' la stessa cosa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    ah si, hai ragione, quello lo avevo provato con altri file.txt


    Vorrei chiederti un consiglio, perche' non conosco ancora tanto bene tutte le funzioni sui file.
    Che ne dici, se per fare l'opzione (modifica contatti), do' in INPUT, la riga del contatto da modificare, e il campo da modificare ( cioe' il nome o il cognome o il numero), dopodiche' apro il file sia in lettura che scrittura, leggo una riga per volta, finche' non trovo quella da modificare. Una volta trovata, usando la funzione seekp, mi posiziono sul campo da modificare e ci scrivo sopra.
    ???

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da Salvatore_91
    ...sul campo da modificare e ci scrivo sopra.
    Sì ... puoi farlo ...
    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.