loopi123 Geschrieben 31. August 2008 Geschrieben 31. August 2008 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 Zitieren
Klotzkopp Geschrieben 31. August 2008 Geschrieben 31. August 2008 Als einzelnes Prog klappt es gutIch 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 Zitieren
loopi123 Geschrieben 31. August 2008 Autor Geschrieben 31. August 2008 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.... ist das korrekt? Könntest du mir ein mal ein zusammengefasstes Beispiel schreiben? gruss loopi Zitieren
Bubble Geschrieben 31. August 2008 Geschrieben 31. August 2008 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. Zitieren
loopi123 Geschrieben 31. August 2008 Autor Geschrieben 31. August 2008 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: p.s. würde sogar das Projekt zur Verfügung stellen Ich werde wohl nie Programmierer....:helau: greetz loopi Zitieren
loopi123 Geschrieben 31. August 2008 Autor Geschrieben 31. August 2008 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: Zitieren
Klotzkopp Geschrieben 31. August 2008 Geschrieben 31. August 2008 cout.open("logfile "__DATE__".csv", ofstream::cout | ofstream::app); Das ist das Problem. Das gibt's nicht. Mal ganz nebenbei: Ist dir klar, dass __DATE__ das Datum ist, an dem diese Datei kompiliert wurde? Zitieren
loopi123 Geschrieben 31. August 2008 Autor Geschrieben 31. August 2008 ja das ist mir bewusst.:cool: so kann man pro tag ein logfile erstellen aber DAS Problem hat sich gelöst. greetz loopi Zitieren
Klotzkopp Geschrieben 1. September 2008 Geschrieben 1. September 2008 ja das ist mir bewusst.:cool: so kann man pro tag ein logfile erstellen Aber nur, wenn man jeden Tag neu kompiliert. Zitieren
loopi123 Geschrieben 4. September 2008 Autor Geschrieben 4. September 2008 was gäbe es für eine Variante? Zitieren
Klotzkopp Geschrieben 5. September 2008 Geschrieben 5. September 2008 was gäbe es für eine Variante? Um zur Laufzeit an das Datum in Form eines Strings zu kommen? - time - localtime - strftime Zitieren
loopi123 Geschrieben 5. September 2008 Autor Geschrieben 5. September 2008 so etwas? ofstream cout; cout.open("logfile " + inttostr(localtime) + ".csv", ofstream::out | ofstream::app); greetz loopi Zitieren
Klotzkopp Geschrieben 5. September 2008 Geschrieben 5. September 2008 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. Zitieren
loopi123 Geschrieben 5. September 2008 Autor Geschrieben 5. September 2008 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 Zitieren
Klotzkopp Geschrieben 6. September 2008 Geschrieben 6. September 2008 sorry aber das klappt irgendwie nicht :eek:rolleyes:Du hast ja auch nur zwei von drei Schritten gemacht. Was ist mit strftime? im moment habe ich das problem so "gelöst"__DATE__ bringt dir aber nichts, wenn du nicht jeden Tag neu kompilieren willst. Zitieren
TDM Geschrieben 8. September 2008 Geschrieben 8. September 2008 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. Zitieren
loopi123 Geschrieben 8. September 2008 Autor Geschrieben 8. September 2008 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 Zitieren
TDM Geschrieben 9. September 2008 Geschrieben 9. September 2008 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. 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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.