aus datei lesen/ von string nach double
-
hallo, als anfänger stehe ich zur zeit vor einem kleinen problem.
ich möchte auf eine Datei zugreifen, in der ein Datum in der folgenden form steht: "JJJJ-MM-TT". Ich möchte nun dieses Datum in eine Variable des Typs time_t einlesen , also jeweils eine für Jahr, Monat und Tag( eine weitere funktion übernimmt dass dann, und verarbeitet es weiter).Nur weiß ich im Moment nicht, wie man etwas aus einer datei einlesen kann und dann von char oder string in double, time_t oder so konvertieren kann. Kann mir jemand ein ein kleines codebeispiel für mein problem liefern??
-
Erkundige dich mal über
std::fstreamundstd::stringstream.Das ist eine empfehlenswerte Referenz dazu.
-
Da gibt es verschieden Möglichkeiten. Entweder du schreibst dir eine Funktion, die dir das Laden übernimmt, oder du kannst auch "gemütlich" eine Datumsklasse schreiben, die dir das ganze wrappt und die du auch einfach ausgeben/einlesen kannst. ( Habe glaube mal eine hier im Forum gesehen. Ist noch eine rechte Arbeit..).
Die einfachere Möglichkeit ist, wie gesagt eine Funktion zu schreiben, die dir das ganze übernimmt.
Das hier liest dir ein Datum aus einer Datei ein. Das kannst du mal studieren und dann für dich selbst umsetzen.std::ifstream in ("dates.txt"); int year = 0; int month = 0; int day = 0; char dump; in >> year >> dump >> month >> dump >> day; std::cout << year << "-" << month << "-" << day;
-
ifstream infile(dateiname); int year; int month; int day; infile>>year; infile.ignore(1); infile>>month; infile.ignore(1); infile>>day;
-
Der Standard sieht dafür die Facette time_get vor.
Das ist aber ziemlich aufwändig, da das Format nicht üblich ist, müsstest Du Dir eine eigene abgeleitete Facette schreiben.Einfacher geht's mit einer eigenen kleinen Funktion, wie schon von Drakon angedeutet.
#include <iostream> #include <ctime> // -- liest ein Datum im Format JJJJ-MM-TT std::istream& operator>>( std::istream& in, std::tm& time_ ) { const std::ios_base::fmtflags flgs = in.flags(); char m1, m2; if( in >> time_.tm_year >> std::noskipws >> m1 >> time_.tm_mon >> m2 >> time_.tm_mday && (m1 != '-' || m2 != '-') ) in.setstate( std::ios_base::failbit ); in.flags( flgs ); return in; } int main() { using namespace std; std::tm datum; ifstream in("datei.txt"); if( in >> datum ) { cout << "Datum gelesen " << endl; } return 0; }Gruß
Werner