Typen-Probleme
-
Hallo allerseits,
ich bin leider noch nicht allzu bewandert in C++ und lege mir gerade ein wenig die Karten. Ich habe eine Log-Datei, welche ich zeilenweise einlese. An einer bestimmten Stelle steht immer ein Datum. Dieses will ich auslesen und in einen Timestamp umrechnen.
Leider bekomme ich immer nur eine -1 als Ergebniss von mktime()
Die jeweilgen Teile des Datums werden korrekt ausgelesen und ausgegeben.
Wo liegt mein Denkfehler?Codeausschnitt
char chrLogFile[100]; char chrLogFileRow[4096]; time_t rawtime; struct tm * testzeit; LogFile.getline(chrLogFileRow,4096,'\n'); cout << "Zeile " << i << ": " << chrLogFileRow << endl; // timestamp der zeile bilden testzeit = localtime(&rawtime); testzeit->tm_mday=chrLogFileRow[20] << chrLogFileRow[21] << chrLogFileRow[22] << chrLogFileRow[23]; cout << "jahr " << chrLogFileRow[20] << chrLogFileRow[21] << chrLogFileRow[22] << chrLogFileRow[23] << endl; testzeit->tm_mon=5; testzeit->tm_mday=chrLogFileRow[8] << chrLogFileRow[9]; cout << "tag " << chrLogFileRow[8] << chrLogFileRow[9] << endl; testzeit->tm_hour=chrLogFileRow[11] << chrLogFileRow[12]; cout << "stunde " << chrLogFileRow[11] << chrLogFileRow[12] << endl; testzeit->tm_min=chrLogFileRow[14] << chrLogFileRow[15]; cout << "Minute " << chrLogFileRow[14] << chrLogFileRow[15] << endl; testzeit->tm_sec=chrLogFileRow[17] << chrLogFileRow[18]; cout << "Sekunde " << chrLogFileRow[17] << chrLogFileRow[18] << endl; cout << mktime(testzeit) << endl;
-
Hi,
ich glaube dir fehlen noch ein paar grundsätzliche C/C++ - Kenntnisse.
Mittels
testzeit->tm_mday=chrLogFileRow[8] << chrLogFileRow[9];führst du eine SHFIT-Operation durch und das Ergebnis wird wohl dann außerhalb eines gültigen Datums liegen, so daß mktime korrekterweise -1 zurückliefert.
Du hast ja in 'testzeit' schon ein gültiges Datum, also lösche einfach alle die oben genannten Zeilen.
-
ich glaube dir fehlen noch ein paar grundsätzliche C/C++ - Kenntnisse.
Ja, aber das hatte ich ja geschrieben.

Du hast ja in 'testzeit' schon ein gültiges Datum, also lösche einfach alle die oben genannten Zeilen.
Leider nicht dass, welches ich brauche.
Diese Zeile ist nur von einem meiner Tests noch im Code erhalten geblieben.
testzeit = localtime(&rawtime);Wie bereits geschrieben lese ich eine Datei zeilenweise ein.
Jede Zeile landet in 'chrLogFileRow'. Am Anfang dieser Zeile steht immer ein Datum, welches ich umrechnen möchte.Ich hatte gedacht, mit der folgende Zeile kann ich die 4 Zahlen des Jahres der Struktur zuweise.
testzeit->tm_mday=chrLogFileRow[20] << chrLogFileRow[21] << chrLogFileRow[22] << chrLogFileRow[23];
Der Operator '<<' ist aber, wie du schreibst, der falsche.
Wie kann ich die 4 Zeichen verknüpfen und in die Struktur packen?Oder ist mein Ansatz falsch und soll ich per substr() gleich 4 Zeichen ausschneiden?
Fragt sich ratlos Poscht
-
Ja, der Ansatz ist falsch. Die Variablen in der struct tm sind ints. Du mußt hier also die Zeichen ausschneiden und dann in einen int umwandeln. So z.Bsp.
FAQ Einmal Zahl nach String und zurück
-
Perfekt, vielen Dank für den Hinweis.