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,555

    soll
    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


Anmelden zum Antworten