StringFormat - String links kürzen

    • Offizieller Beitrag

    Hi,
    StringFormat ist ja ganz praktisch um einheitlich formatierte Ausgaben zu erstellen. Ausgabelänge und Ausrichtung kann man vorgeben, Strings können auf eine bestimmte Anzahl Zeichen begrenzt werden.
    Und hier ist mein Problem. Diese Begrenzung greift immer von links nach rechts. Nehmen wir mal an, ich möchte eine Jahreszahl 2-stellig ausgeben. Dann brauche ich ein Ausgabe der letzten 2 Stellen. Die ersten 2 Stellen müssten somit gekürzt werden. Mir ist jedoch nur Folgendes möglich:

    Spoiler anzeigen
    [autoit]

    ; Formatierung: '%[-][anzuzeigende Stringlänge].[Genauigkeit]'
    ; [-]= String wird links ausgerichtet, sonst rechts

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(StringFormat('%.1s', @YEAR) & @LF) ;==> 2
    ConsoleWrite(StringFormat('%.2s', @YEAR) & @LF) ;==> 20
    ConsoleWrite(StringFormat('%.3s', @YEAR) & @LF) ;==> 201
    ConsoleWrite(StringFormat('%.4s', @YEAR) & @LF) ;==> 2014

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(StringFormat('%4.1s', @YEAR) & @LF) ;==> 2
    ConsoleWrite(StringFormat('%4.2s', @YEAR) & @LF) ;==> 20
    ConsoleWrite(StringFormat('%4.3s', @YEAR) & @LF) ;==> 201
    ConsoleWrite(StringFormat('%4.4s', @YEAR) & @LF) ;==> 2014

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(StringFormat('%-.1s', @YEAR) & @LF) ;==> 2
    ConsoleWrite(StringFormat('%-.2s', @YEAR) & @LF) ;==> 20
    ConsoleWrite(StringFormat('%-.3s', @YEAR) & @LF) ;==> 201
    ConsoleWrite(StringFormat('%-.4s', @YEAR) & @LF) ;==> 2014

    [/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite(StringFormat('%-4.1s', @YEAR) & @LF) ;==> 2
    ConsoleWrite(StringFormat('%-4.2s', @YEAR) & @LF) ;==> 20
    ConsoleWrite(StringFormat('%-4.3s', @YEAR) & @LF) ;==> 201
    ConsoleWrite(StringFormat('%-4.4s', @YEAR) & @LF) ;==> 2014

    [/autoit]

    Ist euch ein Weg bekannt, ob und wie ich mit StringFormat n Zeichen von rechts ausgeben kann?

    • Offizieller Beitrag

    Warum nicht StringRight?


    Ich erstelle in einer Funktion den Formatstring in Abhängigkeit von einer Nutzereingabe. Der User legt in der INI eine Maske fest (z.B. Monat "M"=einstellig, wenn möglich oder "MM"=immer zweistellig). Den Formatstring erstelle ich dann einheitlich mit "%0" & StringLen($Maske) & "d" und kann das auf Jahr, Monat oder Tag gleichermassen mit der jeweiligen Maske anwenden ohne auf die einzelenen Segmente separat eingehen zu müssen.
    Klar kann ich eine zusätzliche Codezeile für den Jahresstring einbauen, fände es anders aber eleganter. Nunja - was nicht geht, geht nicht.