Monat kompakt definieren

  • Moin,
    bin relativ neu in AutoIT und arbeite momentan an einem Programm, wo ich jegliche Macros benutze und versuch in einer GUI darzustellen. Momentan arbeite ich am Datum, was auch gut funktioniert, mir aber sicher bin, dass das viel kompakter geht, nur ich nicht weiß wie ich das anstellen soll.
    Hier der Code:

    Ich möchte, dass der Monat nicht als Zahl sondern als Wort angezeigt wird, falls ihr euch wundert ^^
    Danke im Vorraus!
    MfG

  • Hi,
    ich würde es so machen:

    AutoIt
    Dim $a_months[12] = ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]
    
    
    MsgBox(0, "Datum", "Heute ist der" & Chr(32) & @MDAY & "." & Chr(32) & $a_months[@Mon - 1] & Chr(32) & @YEAR)
  • Hi,
    ich würde es so machen:

    AutoIt
    Dim $a_months[12] = ["Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"]
    
    
    MsgBox(0, "Datum", "Heute ist der" & Chr(32) & @MDAY & "." & Chr(32) & $a_months[@Mon - 1] & Chr(32) & @YEAR)

    Danke für deine Antwort erstmal, das mit dem keyword versteh ich noch, aber was genau passiert dort in der MsgBox? ($a_months[@Mon - 1])

  • Die erste Zeile ist ein Array, in dem die Monatsnamen enthalten sind. Mit $a_months[x] kann man das Element aus dem Array mit dem Index x erhalten.
    Mit @Mon erhält man dann für Januar z.B. 1 (oder für Febrauar 2, also der wievielte Monat es im Kalenderjahr ist). Allerdings sind Arrays nullbasiert. Das heißt, dass das erste Element den Index 0 hat. (somit der Index aller Monate im Array um 1 kleiner ist als ihr @Mon Wert)

    Würde man $a_months[@Mon] nehmen, würde man also immer einen Monat später zurückbekommen. Jetzt im Februar also März (und bei Dezember einen Fehler, da @Mon im Dezember 12 ist, das Array aber nur die Elemente 0...11 hat). Also einfach @Mon - 1 nehmen, dann erhält man das richtige Element und gleicht sozusagen aus, dass das Array nullbasiert ist. (Bsp Februar: @Mon = 2-> @Mon - 1 = 1 -> $a_months[1] = Februar)

    Sonst ist die MsgBox die, die Du auch im ersten Post hattest, nur dass ich die festen Monatsnamen durch das Array ersetzt habe.

  • Hi,
    bleibt noch die Frage offen, wieso du statt eines normalen Leerzeichen den Umweg über das chr(32) gehst?!

  • Gibt auch fertige Funktionen genau für diesen Fall (sogar mit Anpassung an die lokale Sprache):

  • Hi,
    bleibt noch die Frage offen, wieso du statt eines normalen Leerzeichen den Umweg über das chr(32) gehst?!

    Hm. Als ich am Anfang versucht habe das Leerzeichen im Text einzufügen, wurde es in der GUI geschweige in der MsgBox nicht angezeigt. Jetzt im nachhinein funktionierts, komisch :/ Danke für den Hinweis

    Gibt auch fertige Funktionen genau für diesen Fall (sogar mit Anpassung an die lokale Sprache):

    Danke! Werde das gleich mal ausprobieren :thumbup: