Probleme bei der Beschriftung einer neu erzeugten Datei mit aktuellem Datum



  • Ja ich weiß das viel zu viele header drinn sind, dass liegt allerdings daran, dass das Programm viel größer ist und ich nur den Teil kopiert habe, der mir Probleme macht. Ich wollte nun für das Problem keine 200 Zeilen posten.

    Das mit der Newline hatte ich mir gedacht, wusste aber nicht wie ich diese wegbekomme.

    DANKE "mapper" für den Hinweis wie man das machen kann.



  • Sieht gut aus aber irgendwie wird immer noch keine Datei angelegt. Ich vermute ja wegen den : bei der Zeitangabe.
    Mon Aug 20 12:57:47 2012.txt

    Kann man das auch unterbinden, oder gibt es eine einfachere Lösung?
    Ich hatte gehofft das in wenigen zeilen erledigen zu können.

    // T2.cpp: Hauptprojektdatei.
    
    #include <string>
    #include <ctime>		    // Dateinamengenerierung
    #include <iostream>		 // Dateinamengenerierung
    #include <algorithm>	    // copy 
    #include <iterator>	    // i(o)stream_iterator 
    #include <fstream> 
    #include <limits>		   // numeric_limits 
    
    using namespace std;
    
    string dateiname ();
    
    int main (void)
    {
    
    	time_t result = time(NULL);
    	string ret_name = asctime(localtime(&result));
    
    	for (a=0, a<10, a++)
    	{
    		ret_name=dateiname ();
    		cout << ret_name << endl;		
    
    			ifstream f1("test.txt");					// vorhanden
    			ofstream f2(ret_name);						// neuanlegen	
    			getchar();
    //			copy();
    			f1.close();									// Schließen
    			f2.close();									// Schließen
    	}
    	return 0;
    }
    
    string dateiname ()
    {
    
    	time_t result = time(NULL);
    	string date = asctime(localtime(&result));
    
    	date.erase(date.end()-1, date.end());				// Newline entfernen
    
    	string name = date+".txt";							// Mon Aug 20 12:57:47 2012.txt (Problem mit ":" )
    
    	return name; 
    }
    


  • Es gibt noch die Funtkion gettime() , die eine tm Struktur füllt. Diese Struktur hat eigene Member für Tag, Monat, Jahr, usw. Du musst lediglich die Ausgabe formatieren, z.B. mit einem ostringstream .
    Inwiefern Zeitzone und Sommerzeit berücksichtigt werden weiß ich nicht, das sollte die Doku aber klären.



  • FillColin schrieb:

    Ich vermute ja [...]

    Mit bloßen Vermutungen wirst du es nie weit bringen...

    pumuckl schrieb:

    Finde mit dem Debugger raus, woher die Exceptions kommen



  • Es ist wirklich erbaulich wie nett hier Manche zu Anfängern sein können, die noch leider nicht so geübt in der Handhabung der Sprache und Plattform sind. 😞

    "DocShoe" danke für den Tip ich versuche es gleich einmal. 🙂



  • FillColin schrieb:

    Es ist wirklich erbaulich wie nett hier Manche zu Anfängern sein können, die noch leider nicht so geübt in der Handhabung der Sprache und Plattform sind. 😞

    Es war durchaus nicht "unnett" gemeint. Gerade Anfänger steigern sich oft in Vermutungen hinein, die zu nichts führen und einfach nur Zeit kosten. Der Debugger ist ganz knapp nach dem Compiler das wichtigste Instrument bei der Software-Entwicklung.



  • Ok, dann entschuldige bitte, dass ich dies falsch aufgenommen habe das lag nicht in meiner Absicht
    __________________________________

    Sooo, nun habe ich es mit dem vorgeschlagenen Ansatz gelöst, erstmal vielen Dank für den Hinweis.

    Es ist meiner ansicht nach dennoch sehr groß geworden, gibt es Möglichkeiten "string get_data()" kompakter, einfacher zu schreiben??

    Danke

    FIll

    #include <string>
    #include <ctime>		// Dateinamengenerierung
    #include <iostream>		// Dateinamengenerierung
    #include <algorithm>	// copy 
    #include <iterator>		// i(o)stream_iterator 
    #include <fstream> 
    #include <limits>		// numeric_limits 
    #include <sstream>		// für get_date
    
    using namespace std;
    
    string get_date();
    
    int main (void)
    {
    	string ret_name= get_date();
    
    	cout << ret_name << endl;
    
    	ifstream f1("test.txt");					// vorhanden
    	ofstream f2(ret_name);						// neuanlegen	
    	getchar();
    
    	f1.close();									// Schließen
    	f2.close();									// Schließen
    
    	return 0;
    }
    
    string get_date() 
     { 
    	 ostringstream oss;
    
    	 time_t result = time(NULL); 
    	 tm *datum = localtime(&result);
    
    	 int sec = datum->tm_sec;
         int min = datum->tm_min;
         int hour = datum->tm_hour;
    	 int tag = datum->tm_mday; 
    	 int monat = datum->tm_mon+1; 
    	 int jahr = datum->tm_year+1900;
    
    	 oss << tag <<"-"<< monat <<"-"<< jahr << "_"<< hour <<"h-"<< min <<"m-"<< sec << "s"<<".txt";
    	 string name = oss.str();
    	 return name;
     }
    


  • FillColin schrieb:

    Es ist meiner ansicht nach dennoch sehr groß geworden, gibt es Möglichkeiten "string get_data()" kompakter, einfacher zu schreiben??

    Ja, einfach die lokalen Variablen rauswerfen und die Member der Struktur direkt benutzen 😮



  • Spricht irgend etwas gegen strftime ?



  • oh man ja klar das geht ja... 😃

    vielen danke...lalalal...



  • DocShoe schrieb:

    FillColin schrieb:

    Es ist meiner ansicht nach dennoch sehr groß geworden, gibt es Möglichkeiten "string get_data()" kompakter, einfacher zu schreiben??

    Ja, einfach die lokalen Variablen rauswerfen und die Member der Struktur direkt benutzen 😮

    meiner Meinung nach muss man es nicht kürzen. Ich würde die Hilfsvariablen noch mit "const" versehen und die Funktion dann so lassen, wie sie ist.

    Ich finde es so übersichtlicher, auch wenn es etwas länger ist - und die Hilfsvariablen helfen beim Debuggen.

    Felix


Anmelden zum Antworten