Ausgabe formatieren
-
Hallo,
ich schreie mit folgendem Befehl in eine Datei.
sw->WriteLine(tag + "." + monat + "." + jahr + " " + stunde + ":" + minute + ":" + sekunde + " " + "{0,5:F3}", erg);Bei den Variablen Tag, Monat, Jahr etc. handelt es sich um Integer-Typen.
Ich möchte nun erreichen, dass die führenden Nullen angezeigt werden.Also anstatt der Ausgabe:
16.4.9 11:3:32 4,555soll
16.04.09 11:03:32 4,555
ausgegeben werden.Ich habe bei der Formatierung schon rumprobiert, allerdings ist es verhext, ich bekomme es nicht hin. Kann mir hier jemand helfen?
-
Bist du sicher dass es sich dabei um C++ handelt? Was du da hast sieht nämlich garnicht danach aus
-
Anna-Lisa schrieb:
ich schreie mit folgendem Befehl in eine Datei.
Versuchs mal mit flüstern.
SCNR
-
Machs mit streams. Ungetestet, schreib mal obs so funktioniert
#include <sstream> #include <string> #include <iomanip> std::string format_string(int tag, int monat, int jahr, int stunde, int minute, int sekunde, int erg) //oder statt int der richtige typ halt { std::stringstream Str; Str << std::setfill ('0') << std::setw (2); Str << tag; Str << std::setfill ('0') << std::setw (0); //wie wird das eigentlich richtig resettet? Str << "."; Str << std::setfill ('0') << std::setw (2); Str << monat; Str << std::setfill ('0') << std::setw (0); Str << "."; Str << std::setfill ('0') << std::setw (2); Str << jahr; Str << std::setfill ('0') << std::setw (0); Str << " "; Str << stunde; Str << std::setfill ('0') << std::setw (2); Str << ":"; Str << std::setfill ('0') << std::setw (0); Str << minute; Str << std::setfill ('0') << std::setw (2); Str << ":"; Str << std::setfill ('0') << std::setw (0); Str << sekunde; Str << std::setfill ('0') << std::setw (2); Str <<" "; Str << std::setfill ('0') << std::setw (0); Str << "{0,5:F3}"; Str << erg; return Str.str(); } sw->WriteLine( format_string(tag, monat, jahr, stunde, minute, sekunde, erg) ); //oder wennde das als c_string brauchst dann nochmal c_str() aufrufen
-
*edit: das ganze setfill gedöns ist verrutscht. So sollte das gehn
std::string format_string(int tag, int monat, int jahr, int stunde, int minute, int sekunde, int erg) //oder statt int der richtige typ halt { std::stringstream Str; Str << std::setfill ('0') << std::setw (2); Str << tag; Str << std::setfill ('0') << std::setw (0); //wie wird das eigentlich richtig resettet? Str << "."; Str << std::setfill ('0') << std::setw (2); Str << monat; Str << std::setfill ('0') << std::setw (0); Str << "."; Str << std::setfill ('0') << std::setw (2); Str << jahr; Str << std::setfill ('0') << std::setw (0); Str << " "; Str << std::setfill ('0') << std::setw (2); Str << stunde; Str << std::setfill ('0') << std::setw (0); Str << ":"; Str << std::setfill ('0') << std::setw (2); Str << minute; Str << std::setfill ('0') << std::setw (0); Str << ":"; Str << std::setfill ('0') << std::setw (2); Str << sekunde; Str << std::setfill ('0') << std::setw (0); Str <<" "; Str << "{0,5:F3}"; Str << erg; return Str.str(); }
-
pumuckl schrieb:
Bist du sicher dass es sich dabei um C++ handelt? Was du da hast sieht nämlich garnicht danach aus
Ist C++/CLI.
Simon
-
Dann handelt es sich bestimmt um String^ und nicht um std::string, oder?
Wenn das so ist, kannst du immernoch nen Umweg machen:
Ich hoffe das funktioniert. Kenne mich mit C++/CLI nicht wirklich aus.String^ format_string(int tag, int monat, int jahr, int stunde, int minute, int sekunde, int erg) //oder welcher typ statt int auch immer { std::stringstream Str; Str << std::setprecision(0); Str << std::fixed; Str << std::setfill('0'); Str << std::setw(2); Str << tag; Str << std::setw(0); Str << "."; Str << std::setw(2); Str << monat; Str << std::setw(0); Str << "."; Str << std::setw(2); Str << jahr; Str << std::setw(0); Str << " "; Str << std::setw(2); Str << stunde; Str << std::setw(0); Str << ":"; Str << std::setw(2); Str << minute; Str << std::setw(0); Str << ":"; Str << std::setw(2); Str << sekunde; Str << std::setw(0); Str <<" "; Str << "{0,5:F3}"; Str << erg; if(Str) { String^ tmp = gcnew String(Str.str().c_str()); return tmp; } else { String^ empty; return empty; //oder Exeption } } sw->WriteLine( format_string(tag, monat, jahr, stunde, minute, sekunde, erg));
-
Gilder schrieb:
Dann handelt es sich bestimmt um String^ und nicht um std::string, oder?
Wenn das so ist, kannst du immernoch nen Umweg machen:
Ich hoffe das funktioniert. Kenne mich mit C++/CLI nicht wirklich aus.String^ format_string(int tag, int monat, int jahr, int stunde, int minute, int sekunde, int erg) //oder welcher typ statt int auch immer { std::stringstream Str; Str << std::setprecision(0); Str << std::fixed; Str << std::setfill('0'); Str << std::setw(2); Str << tag; Str << std::setw(0); Str << "."; Str << std::setw(2); Str << monat; Str << std::setw(0); Str << "."; Str << std::setw(2); Str << jahr; Str << std::setw(0); Str << " "; Str << std::setw(2); Str << stunde; Str << std::setw(0); Str << ":"; Str << std::setw(2); Str << minute; Str << std::setw(0); Str << ":"; Str << std::setw(2); Str << sekunde; Str << std::setw(0); Str <<" "; Str << "{0,5:F3}"; Str << erg; if(Str) { String^ tmp = gcnew String(Str.str().c_str()); return tmp; } else { String^ empty; return empty; //oder Exeption } } sw->WriteLine( format_string(tag, monat, jahr, stunde, minute, sekunde, erg));Das hat geklappt.
Riesen Dank für deine Hilfe

-
Wenn schon C++/CLI, dann benutze doch auch die entsprechenden Mittel.
Dass std::stringstream Äquivalent heisst System::Text::StringBuilder.Simon