Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C++ Protokoll / History ertellen

Empfohlene Antworten

Veröffentlicht

Hallo zusammen.

Ich bin ein Neuling auf dem Gebiet Programmieren.

Jedoch habe ich schon ziehmlich etwas Programmiert.

Mein Programm läuft einwand frei, doch mit dem einbinden der Protokolldatei klappt es nicht so ganz.

Mein Graph wird von einem Button aus gestartet der im Intervall vom Timer9 aktualisiert wird.

void __fastcall TForm1::Timer9Timer(TObject *Sender)

{

PerformanceGraph1->DataPoint(clRed,Data1);

PerformanceGraph1->DataPoint(clBlue,Data2);

PerformanceGraph1->DataPoint(clYellow,ReadAllDigital()*15);

PerformanceGraph1->Update();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

stop=!stop;

if (stop){

Button2->Caption = "Break";

Timer9->Enabled =true;

Label24->Visible = true;

}

else {

Button2->Caption = "Run";

Timer9->Enabled =false;

Label24->Visible = false;

}

}

//---------------------------------------------------------------------------

nun möchte ich diesne Simplen Quelltext ins Prog integrieren. und im gleichen intervall wie der timer9 aktualisieren

#include <fstream>

#include <iostream>

#include <time.h>

using namespace std;

int main()

{

ofstream cout;

cout.open("logfile "__DATE__".csv");

cout << "Datum,";

cout << "Zeit,";

cout << "Data1," ;

cout << "Data2"<< endl ;

cout << __DATE__",";

cout << __TIME__",";

cout << "Wert vom Data1,";

cout << "Wert vom Data2"<<endl;

cout.close();

return 0;

}

Als einzelnes Prog klappt es gut, doch das mit dem einbinden und deklarieren... naja...

kann mir jemand helfen?

Mfg

Loopi

Als einzelnes Prog klappt es gut
Ich wage zu bezweifeln, dass du eine ofstream-Variable namens cout anlegen kannst. Eine Variable dieses Namens gibt es nämlich schon.

kann mir jemand helfen?
Wenn du eine bessere Fehlerbeschreibung als "naja..." lieferst, sicher.

Ach ja, falsches Forum. Verschoben -> C++: Compiler, IDEs, APIs

das ist auch das Problem. Ich weiss nicht wie und wo ich das Programm einbinden soll, dass es auch die "richtige" Fehlermeldung anzeigt.

Ich versuche das ganze in die If anweisung einzubinden...?

void __fastcall TForm1::Button2Click(TObject *Sender)

{

stop=!stop;

if (stop){

Button2->Caption = "Break";

Timer9->Enabled =true;

Label24->Visible = true;

using namespace std;

int main()

{

ofstream cout;

cout.open("logfile "__DATE__".csv");

cout << "Datum,";

cout << "Zeit,";

cout << "Data1," ;

cout << "Data2"<< endl ;

cout << __DATE__",";

cout << __TIME__",";

cout << "Wert vom Data1,";

cout << "Wert vom Data2"<<endl;

cout.close();

return 0;

}

}

else {

Button2->Caption = "Run";

Timer9->Enabled =false;

Label24->Visible = false;

}

}

//---------------------------------------------------------------------------

und

#include <fstream>

#include <iostream>

#include <time.h>

habe ich im Kopf des Prog. eingefügt....:rolleyes:

ist das korrekt?

Könntest du mir ein mal ein zusammengefasstes Beispiel schreiben?

gruss loopi

Ich wage zu bezweifeln, dass du eine ofstream-Variable namens cout anlegen kannst. Eine Variable dieses Namens gibt es nämlich schon.

In einem neuen Bereich kann er das schon. Die andere Variable ist dann natürlich nicht mehr unter dem Namen sichtbar, man kann sie in seinem Fall aber über den kompletten Namen mit vorangestelltem Namespace erreichen.

hi Bubble. Danke für deinen Eintrag.

Ich habe leider ein grösseres Brett vor dem Kopf...:upps

bevor ich mich hier weiter in Probleme:old könnte ein netter User mir einen Lösungsansatz vorschlagen.:confused::rolleyes:

p.s. würde sogar das Projekt zur Verfügung stellen

Ich werde wohl nie Programmierer....:helau:

greetz loopi

ist das so nicht möglich?

void __fastcall TForm1::Timer9Timer(TObject *Sender)

{

using namespace std;

PerformanceGraph1->DataPoint(clRed,Data1);

PerformanceGraph1->DataPoint(clBlue,Data2);

PerformanceGraph1->DataPoint(clYellow,ReadAllDigital()*15);

PerformanceGraph1->Update();

ofstream cout;

cout.open("logfile "__DATE__".csv", ofstream::cout | ofstream::app);

cout << "Datum,";

cout << "Zeit,";

cout << "Data1," ;

cout << "Data2"<< endl ;

cout << __DATE__",";

cout << __TIME__",";

cout << "Wert vom Data1,";

cout << "Wert vom Data2"<<endl;

cout.close();

}

//----------------------------------------

Fehlermeldung:

[C++ Fehler] Unit1.cpp(392): E2451 Undefiniertes Symbol 'cout'

kann ich das nicht definieren?

wenn ja-->wo?:confused:

ja das ist mir bewusst.:cool: so kann man pro tag ein logfile erstellen ;)

aber DAS Problem hat sich gelöst.

greetz loopi

was gäbe es für eine Variante?

so etwas?

ofstream cout;

cout.open("logfile " + inttostr(localtime) + ".csv", ofstream::out | ofstream::app);

greetz loopi

so etwas?
Äh, nein, das ist totaler Unsinn.

Du holst dir mit der Funktion time die aktuelle Zeit als time_t, wandelst das mit localtime in eine tm-Struktur, und kannst schließlich mit strftime daraus einen String machen.

Das dürfte schon mehr als eine Zeile werden.

sorry aber das klappt irgendwie nicht :eek:rolleyes::(

im moment habe ich das problem so "gelöst"

void __fastcall TForm1::Timer10Timer(TObject *Sender)

{

using namespace std;

time_t Zeitstempel;

tm *nun;

Zeitstempel = time(0);

nun = localtime(&Zeitstempel);

ofstream cout;

cout.open("Logfile_"__DATE__".txt", ofstream::out | ofstream::app);

ich weiss.... es ist nicht einfach, wenn man keine ahnung hat :)

im moment habe ich das problem so "gelöst"

void __fastcall TForm1::Timer10Timer(TObject *Sender)

{



  using namespace std;                   



  time_t Zeitstempel;                 

  tm *nun;                               

  Zeitstempel = time(0);             

  nun = localtime(&Zeitstempel);  


  ofstream cout;                       

  cout.open("Logfile_"__DATE__".txt", ofstream::out | ofstream::app);

}
Sieht aus, wie von hier kopiert. folglich eher so:

char * fileName;

asprintf(&fileName, "Logfile_%d%d%d.txt", nun->tm_year+1900,nun->tm_mon+1, nun->tm_mday);

cout.open(fileName, ofstream::out | ofstream::app);

free(fileName);

so oder so ähnlich.

Sieht aus, wie von hier kopiert.

:cool: ja das stimmt, aber deine Lösung scheint mir auch sehr einleuchtend... doch leider versteh ich nicht alles...

wieso machst du asprintf und nicht printf..?

und wieso gibt es mir eine fehlermeldung wie folgt?

[C++ Fehler] Unit1.cpp(469): E2268 Aufruf der undefinierten Funktion 'asprintf'

obwohl ich oben

#include <stdio.h>

deklariert habe?

gruss loopi

wieso machst du asprintf und nicht printf..?

asprintf alloctiert einen Pointer und schreibt eine Zeichenkette rein.

printf gibt eine Zeichenkette aus.

Da ich ja die Zeichenkette weiter unten verwenden will und nur zu faul war jetzt großartig was mit malloc/new zu machen, hab ich die Funktion verwendet.

und wieso gibt es mir eine fehlermeldung wie folgt?

[C++ Fehler] Unit1.cpp(469): E2268 Aufruf der undefinierten Funktion 'asprintf'

Vielleicht kein Linux. :rolleyes:

War ja nur ein Beispiel, wie es ungefähr geht.

Ergo:

__DATE__ wird immer nur beim kompilieren mit dem aktuellen Datum ersetzt.

Ergo2:

Wenn du schon was mit localtime erzeugst, solltest du auch die Variable verwenden.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.