none
Ofstream Problem RRS feed

  • Frage

  • #include <iostream>
    #include <istream> 
    #include <fstream> 
    #include <limits>  
    #include <string>
    
    struct MD  // string für datum und doubles für  die werte in zahlen
    { 
        std::string datum; 
        double hours_worked; 
        double filescreated; 
    };
    
    namespace 
    { 
        const std::streamsize ALL = std::numeric_limits< std::streamsize >::max(); 
    }; 
    // filter :P
    std::istream& operator>>( std::istream& in, MD& md ) 
    { 
        in.ignore( ALL, '[' ) >> md.datum; 
        std::string token; 
        if( getline( in.ignore( ALL, '|' ), token, '=' ) ) 
        { 
            md.hours_worked = 0.;  
            md.filescreated = 0.; 
            if( token == "hours_worked" ) 
                in >> md.hours_worked; 
            else if( token == "filescreated" ) 
                in >> md.filescreated; 
            else 
                in.setstate( std::ios_base::failbit ); 
        } 
        return in; 
    }
    struct Komma : public std::numpunct< char > 
    { 
    protected: 
        virtual char_type do_decimal_point() const 
        { 
            return ','; 
        } 
    };
    
    int main() 
    { 
        using namespace std; 
        ifstream fin ("C:/Users/Cevin/Desktop/C++/2012-10-04.md"); 
       fin.imbue( locale( fin.getloc(), new Komma ) );
        if( !fin.is_open() ) 
        { 
            cerr << "Fehler beim Oeffnen der Datei" << endl; 
            
            return -2; 
        } 
       
       MD md;
       while (  fin >> md ) 
    
       {  
               // md's   auswerten
               cout << "Datum        |Stunden gearbeitet | Dateien erstellt " << endl ;
               cout << md.datum << "|          " << md.hours_worked << "                |          " << md.filescreated << endl ;    
              
             // md's summierne
                              
        } 
           
            
             //md's schreiben 
              ofstream myFile;  
           myFile.open ("C:/Users/Cevin/Desktop/C++/test.txt");
      
           if (myFile)
       {
         
              myFile << "Datum        |   Stunden gearbeitet | Dateien erstellt " << endl ;
              myFile << md.datum << "|          " << md.hours_worked << "     |             " << md.filescreated << endl ; 
    		  
    		  
             
           myFile.close();
          
          
            }
    
    	   if( fin.eof() ) 
        { 
          
           } 
    
        getchar () ;
        return 0; 
    }

    Hey Leute ich habe folgendes Problem 

    die werte in meinen string und doubles werden korrekt in der konsole ausgegeben aber beim abspeichern in eine neue datei wird nur eine zeile von den werten agespeichert ? warum ? gruß der neuling =) 

    Dienstag, 16. Oktober 2012 10:52

Antworten

  • Wenn Du deinen ofstream erst in der Schleife öffnest, muss der openmode (für das Anfügen an das Dateiende) passend gesetzt werden, ansonsten vor der Schleife öffnen und nach der Schleife schließen. Im letzteren Fall ist der Inhalt identisch mit der Konsolenausgabe.

    - Florian

    Dienstag, 16. Oktober 2012 12:31

Alle Antworten

  • Du schreibst nur eine Zeile in die Datei.

    - Florian

    Dienstag, 16. Oktober 2012 11:06
  • Du schreibst nur eine Zeile in die Datei.

    - Florian

    ?? ja ? wie schreibe ich den mehrere zeilen in die datei ? 
    Dienstag, 16. Oktober 2012 11:14
  • Du könntest eine Schleife verwenden, so wie Du es bei der Ausgabe in die Konsole auch getan hast.

    - Florian

    Dienstag, 16. Oktober 2012 11:55
  • Hmm ja =) den ofstream in die schleife von der console zu geben bringt nichts oder ? aalso wenn müsste ich eine neue schleife machen oder ? 

    Danke :)

    Dienstag, 16. Oktober 2012 11:59
  • Die Konsolenausgabe und die Dateiausgabe können auch in der gleichen Schleife erfolgen. Ob eine eigene nötig/sinnvoll ist müsstest Du dann schon selbst entscheiden.

    - Florian

    Dienstag, 16. Oktober 2012 12:06
  • Ja Danke :) eine eigene wird wohl nötig sein 

    ich hab die beiden mal in die selbe schleife gepackt aber er schreibt immernoch nur eine Zeile :/ 

    Dienstag, 16. Oktober 2012 12:08
  • Wenn Du deinen ofstream erst in der Schleife öffnest, muss der openmode (für das Anfügen an das Dateiende) passend gesetzt werden, ansonsten vor der Schleife öffnen und nach der Schleife schließen. Im letzteren Fall ist der Inhalt identisch mit der Konsolenausgabe.

    - Florian

    Dienstag, 16. Oktober 2012 12:31
  • :D Erfolg letzteres hat super geklappt 

    jetzt kann ich weiter machen :) 

    Danke das du dir die Zei genommen hast 

    Problem gelöst =)

    Dienstag, 16. Oktober 2012 12:45