ubuntuusers.de

Für diese Funktion musst du eingeloggt sein.

Zeit und Datum in TextDatei schreiben

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

ubuntu--anfaenger

Avatar von ubuntu--anfaenger

Anmeldungsdatum:
12. Oktober 2013

Beiträge: 1243

Wohnort: Belgien

c++

Hallo,

Ich habe das Programm zum Umrechnen fertig gestellt.

Ich würde gerne Das Datum und die Uhrzeit mit in der Datei reinschreiben, am liebsten würde ich das mit einer Funktion oder Klasse machen,da ich aber zu Unerfahren

bin, schaffe ich es nicht das in dem fstream mit Einzubauen..ich hab jetzt alles doppelt und dreifach deklariert damit es funktioniert,

aber glaube das es Unsauber ist und mann das so nicht macht

Wie soll ich Zeit und Datum in dem fstream mit Integrieren?

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include<iostream>
#include<cmath>
#include<fstream>
#include<string>
#include<ctime>
#include<iomanip>

using namespace std;
/*
void time()
{
 time_t aktuel;
 struct tm jetztLokal;
 aktuel = time(NULL);

 jetztLokal = *localtime(&aktuel);
 
 cout << setfill('0');
 cout << setw(2) << jetztLokal.tm_hour << ":";
 cout << setw(2) << jetztLokal.tm_min << ":";
 cout << setw(2) << jetztLokal.tm_sec << " ";
 cout << setw(2) << jetztLokal.tm_mday << ".";
 cout << setw(2) << jetztLokal.tm_mon + 1 << ".";
 cout << jetztLokal.tm_year + 1900 << '\n';
}
*/
void kmh()
{
 double kmh;
 double x;
 double ganz;
 double t;
 time_t aktuel;
 struct tm jetztLokal;
 aktuel = time(NULL);
 jetztLokal = *localtime(&aktuel);
 
 fstream test;
 
 while(cout << "Km/h: "){
    cin>>kmh;
    if(!cin.good()){cerr << "Falsche Eingabe\n"; return;}
    x = 60/kmh;
    double f = modf(x, &ganz);
    t = f*60;
    t = (int)(t*100+0.5)/100;
    
      if(t <= 9){
         cout << kmh << "Km/h= " << ganz << "'" << "0" << t << "min/km  " << '\n';
         }
        else
           {
           cout << kmh << "Km/h= " << ganz << "'" << t << "min/km  " << '\n';
           }
 
    test.open("t.txt", ios::out | ios::app);
    test << kmh << "km/h= " << ganz << "," << t << "min/km  " << setw(2) << jetztLokal.tm_hour << ":"
         << setw(2) << jetztLokal.tm_min << ":"
         << setw(2) << jetztLokal.tm_sec << "  "
         << setw(2) << jetztLokal.tm_mday << "."
         << setw(2) << jetztLokal.tm_mon + 1 << "."
         << setw(2) << jetztLokal.tm_year + 1900 << '\n';
         
     test.close();
    }
}

void min()
{
 double minkm;
 double g;
 double x;
 double t;
 time_t aktuel;
 struct tm jetztLokal;
 aktuel = time(NULL);
 jetztLokal = *localtime(&aktuel);

 fstream test;

 while(cout << "min/Km: "){
    cin>>minkm;
    if(!cin.good()){cerr << "Falsche Eingabe\n"; return;}
    double f = modf(minkm, &g);
    t = g*60+f*100;
    x = 3600/t;

    cout << minkm << "min/km= " << x << "km/h  " << '\n';
    
    test.open("t.txt", ios::out | ios::app);
    test << minkm << "min/km= " << x << "km/h  " << setw(2) << jetztLokal.tm_hour << ":"
         << setw(2) << jetztLokal.tm_min << ":"
         << setw(2) << jetztLokal.tm_sec << "  "
         << setw(2) << jetztLokal.tm_mday << "."
         << setw(2) << jetztLokal.tm_mon + 1 << "."
         << setw(2) << jetztLokal.tm_year + 1900 << '\n';

     test.close();
    }
}

int main()
{
 cout << "Temporechner: \n";
 cout << "A für km/h in min/km oder B für min/km in Km/h: ";
 char einh = 'x';
 cin>>einh;

 switch(einh){
 case 'a':
 kmh();
  break;

 case 'A':
 kmh();
  break;

 case 'b':
 min();
  break;

 case 'B':
 min();
  break;

 default:
  cout << "Sorry wir Unterstützen nur a,b" << endl;
  break;
  }
}

Ich würde mich über ein paar Tipps freuen

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11265

Wohnort: München

Wie wäre es mit put_time()? Das funktioniert seit C++11 und man spart sich gegenüber strftime das Herumgehampel mit Pointern.

1
2
3
4
5
6
7
8
#include <iostream>
#include <iomanip>
#include <ctime>

int main() {
   std::time_t t = std::time(nullptr);
   std::cout << "local time: " << std::put_time(std::localtime(&t), "%H:%M:%S %d.%m.%Y") << std::endl;
}

ubuntu--anfaenger

(Themenstarter)
Avatar von ubuntu--anfaenger

Anmeldungsdatum:
12. Oktober 2013

Beiträge: 1243

Wohnort: Belgien

Hallo seahawk1986

Dein Vorschlag funktioniert Wunderbar 😛 , und ich spar mir so etliche Zeilen code einfach Hinten an dem fstream drann gehangen.

Ich würde trotzdem noch gerne wissen wie man das per Funktion in eine .txt Datei schreiben kann, oder per class, könnte mir Vorstellen das mann sowas öfters braucht.

Wenn das aber zu Aufwendig ist, ist das so auch ok.

Vielen Dank.

lg,

woko1754

Anmeldungsdatum:
12. November 2008

Beiträge: 801

Wohnort: Lübeck

Zum Beispiel so:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <fstream>
using namespace std;

int main()
{
    fstream f;
    f.open("test.txt", ios::out);
    f << "Dieser Text geht in die Datei" << endl;
    f.close();
}

ubuntu--anfaenger

(Themenstarter)
Avatar von ubuntu--anfaenger

Anmeldungsdatum:
12. Oktober 2013

Beiträge: 1243

Wohnort: Belgien

woko1754 schrieb:

Zum Beispiel so:

Sorry ich hab mich schon wieder doof Ausgedrückt, ich meinte wie man eine Zeit Funktion , oder class für Datum und Zeit in eine txt Datei reinbekommt.

So in etwa:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<iostream>
#include<iomanip>
#include<ctime>

using namespace std;

int main()
{
 time_t aktuel;
 struct tm jetztLokal;
 string tagfeld[7] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"};

 aktuel = time(NULL);

 jetztLokal = *localtime(&aktuel);
 
 cout << setfill('0');
 cout << setw(2) << jetztLokal.tm_mday << ".";
 cout << setw(2) << jetztLokal.tm_mon + 1 << ".";
 cout << jetztLokal.tm_year + 1900 << " ";
 cout << setw(2) << jetztLokal.tm_hour << ":";
 cout << setw(2) << jetztLokal.tm_min << ":";
 cout << setw(2) << jetztLokal.tm_sec << endl;

 cout << tagfeld[jetztLokal.tm_wday] << endl;
}

lg,

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11265

Wohnort: München

Mir ist noch nicht ganz klar, was du haben willst - man kann die Ausgabe der aktuellen Zeit natürlich in eine Funktion auslagern:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <fstream>
#include <iostream>
#include <iomanip>
#include <ctime>

auto put_local_time() {
   std::time_t t = std::time(nullptr);
   return std::put_time(std::localtime(&t), "%H:%M:%S %d.%m.%Y");
}

int main() {
   std::fstream f;
   f.open("test.txt", std::ios::out | std::ios::app);
   f << put_local_time() << std::endl;
}

Man kann auch eine Referenz auf das ostream-Objekt herumreichen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include <fstream>
#include <iostream>
#include <iomanip>
#include <ctime>

void put_local_time(std::ostream &f) {
   std::time_t t = std::time(nullptr);
   f << std::put_time(std::localtime(&t), "%H:%M:%S %d.%m.%Y");
}

int main() {
   std::fstream f;
   f.open("test.txt", std::ios::out | std::ios::app);
   put_local_time(f);
   f << std::endl;
}

Oder soll das eher in Richtung Logging-Framework gehen, damit Ausgaben automatisch mit einem Zeitstempel versehen werden?

ubuntu--anfaenger

(Themenstarter)
Avatar von ubuntu--anfaenger

Anmeldungsdatum:
12. Oktober 2013

Beiträge: 1243

Wohnort: Belgien

seahawk1986:

Ja wow so ist das auch übersichtlich.

Ja so wollte ich das haben,hab das Eingebaut und klappt 👍

merci

Antworten |