Programm mit Datumsvergleich
-
Hallo zusammen,
ich hab da ein kleines Problem. Ich soll eine Messstation hier in Betrieb nehmen. Diese soll 24/7 laufen und um 0 Uhr die die Datei mit den Messdaten schließen und eine neue Datei anfangen.
Ein Freund von mir (der jetzt für längere Zeit im Urlaub ist) hat mir was reingehackt, was aber leider nicht compiliert.Ich poste mal den Code Ausschnitt, um den es geht:
char dayWhenFileWasLastWritten[80]; while ((timediff < m_time) || m_time == 0) { time_t rawtime; time(&rawtime); if (strftime(dayWhenFileWasLastWritten,80,"%d",localtime (&rawtime)) != dayWhenFileWasLastWritten) { //if (strftime("%d") != dayWhenFileWasLastWritten.c_str()) { errorcode = CAENVME_SetOutputRegister(Handle, Mask); // Sets the NIM Level of channel0 output to a logical 1 in order to prevent from any events being written to the QDC and the GPS Card. if (rawfile != null && rawfile.is_open()) { rawfile.close(); } ofstream rawfile("rawfile" + strftime(dayWhenFileWasLastWritten,80,"%Y-%m-%d",localtime (&rawtime)) + ".dat"); //dayWhenFileWasLastWritten = strftime("%d"); //strftime (dayWhenFileWasLastWritten,80,"%d",localtime ( &rawtime )); strftime(dayWhenFileWasLastWritten,80,"%d",localtime (&rawtime)); errorcode1 = CAENVME_ReadCycle(Handle, clearreg, &data, cvA24_U_DATA, cvD16); mbg_clr_ucap_buff(dh); errorcode = CAENVME_ClearOutputRegister(Handle, Mask); // Sets the NIM Level of channel0 output to a logical 0 in order to let events come through to the GPS Card and the QDC }So, beim compilieren bekomme ich nun folgende Fehler:
v265_j.cc:215: error: ISO C++ forbids comparison between pointer and integer v265_j.cc:219: error: `null' undeclared (first use this function) v265_j.cc:219: error: (Each undeclared identifier is reported only once for each function it appears in.) v265_j.cc:219: error: request for member `is_open' in `rawfile', which is of non-aggregate type `std::ofstream ()()' v265_j.cc:220: error: request for member `close' in `rawfile', which is of non-aggregate type `std::ofstream ()()' v265_j.cc:222: error: invalid operands of types `const char*' and `const char[5]' to binary `operator+'wobei Zeile 215 der Zeile der Zeile 8 oben im Code entspricht.
Es wär klasse, wenn ihr mir helfen könntet, denn für mich ist das eher chinesisch

Ich würde auch was dafür zahlen (über Paypal z.B.), wenn mir jemand hilft, es erfolgreich zum Laufen zu bekommen.Viele Grüße
-
Ich versuch mal mein Glück

char dayWhenFileWasLastWritten[80]; if (strftime(dayWhenFileWasLastWritten,80,"%d",localtime (&rawtime)) != dayWhenFileWasLastWritten) { ... // >>> v265_j.cc:215: error: ISO C++ forbids comparison between pointer and integer- in dayWhenFileWasLastWritten wird der aktuelle Tag geschrieben (heute 28)
- der Rückgabewert von strftime ist die Länge des Strings (2 Zeichen)
- nun wird 2 (typ size_t oder unsigned integer) mit dayWhenFileWasLastWritten (typ char*) verglichen, das geht natürlich nicht.
- eventuell hilft hier die Funktion atoi(...)
- Außerdem brauchst du den Rückgabetyp von strftime wohl eh nicht
if (rawfile != null && rawfile.is_open()) { // >>> v265_j.cc:219: error: `null' undeclared (first use this function)- null klein geschrieben gibts net. Muss NULL oder 0 sein.
if (rawfile != null && rawfile.is_open()) { rawfile.close(); } /* v265_j.cc:219: error: (Each undeclared identifier is reported only once for each function it appears in.) v265_j.cc:219: error: request for member `is_open' in `rawfile', which is of non-aggregate type `std::ofstream ()()' v265_j.cc:220: error: request for member `close' in `rawfile', which is of non-aggregate type `std::ofstream ()()' */- rawfile wird erst in Zeile 15 definiert, kann also vorher noch nicht existieren
ofstream rawfile("rawfile" + strftime(dayWhenFileWasLastWritten,80,"%Y-%m-%d",localtime (&rawtime)) + ".dat"); // v265_j.cc:222: error: invalid operands of types `const char*' and `const char[5]' to binary `operator+'- strftime,wie oben schon genannt, liefert ein size_t zurück. Der Rest ist ein string. für + gibts hier keine Überladung. Außerdem macht es keinen Sinn, die Länge des gelieferten Tages im Dateinamen zu hinterlegen.
Die ideale Referenz für die Probleme:
http://www.cplusplus.com/reference/clibrary/ctime/strftime/
http://www.cplusplus.com/reference/iostream/ofstream/Außerdem:
- man sollte seinen Code nicht jedem anvertrauen
- die Variable dayWhenFileWasLastWritten wird nicht reichen. du solltest noch eine currentDay einführen, die du dann mit dayWhenFileWasLastWritten vergleichst.