Datumskürzel
Posted: 16 Jul 2020, 05:17
Das ist eins der ersten Skripte, die ich auf jedem neuen System installiere. Vielleicht auch für andere interessant, zumindest als Use Case.
Das Skript ermöglicht die Eingabe eines Datums basierend auf Kürzeln. Dabei ist zunächst die + Taste als Endtaste für die Hotstrings eingestellt was man natürlich leicht anpassen kann.
Das Skript ersetzt u. a. folgende Eingaben ausgehend vom aktuellen Datum (heute ist der 16.07.20):
h+ ergibt 16.07.20
m+ ergibt 17.07.20
g+ ergibt 15.07.20
vg+ ergibt 14.07.20
mo+ ergibt 20.07.20
di-+ ergibt 14.07.20
usw.
Werden nach dem + innerhalb von 1s noch weitere + oder ein # (Nachbartaste) gedrückt, so ändert sich die Schreibweise, z. B.:
üm+ ergibt 18.07.20
üm++ ergibt 18.07.2020
üm+++ ergibt Samstag, den 18. Juli 2020
üm+# ergibt 2020-07-18
Hier der sicher schon etwas angestaubte Code:
Das Skript ermöglicht die Eingabe eines Datums basierend auf Kürzeln. Dabei ist zunächst die + Taste als Endtaste für die Hotstrings eingestellt was man natürlich leicht anpassen kann.
Das Skript ersetzt u. a. folgende Eingaben ausgehend vom aktuellen Datum (heute ist der 16.07.20):
h+ ergibt 16.07.20
m+ ergibt 17.07.20
g+ ergibt 15.07.20
vg+ ergibt 14.07.20
mo+ ergibt 20.07.20
di-+ ergibt 14.07.20
usw.
Werden nach dem + innerhalb von 1s noch weitere + oder ein # (Nachbartaste) gedrückt, so ändert sich die Schreibweise, z. B.:
üm+ ergibt 18.07.20
üm++ ergibt 18.07.2020
üm+++ ergibt Samstag, den 18. Juli 2020
üm+# ergibt 2020-07-18
Hier der sicher schon etwas angestaubte Code:
Code: Select all
#HOTSTRING EndChars +
;*************************** Zeitwerte **************************************
::vvg:: ; Datum Vorvorgestern
::vg:: ; Datum Vorgestern
::g:: ; Datum Gestern
::h:: ; Datum Heute
::m:: ; Datum Morgen
::üm:: ; Datum Übermorgen
::üüm:: ; Datum Überübermorgen
verschiebung := "-1g -2vg -3vvg +0h +1m +2üm +3üüm" ; Verschiebungswerte für Tageskürzel
STRINGREPLACE, tag, A_THISHOTKEY,:,,ALL ; Tageskürzel aus Hotstringnamen extrahieren
STRINGMID, timeshift, verschiebung, INSTR(verschiebung,tag)-1, 2, L ; passenden Verschiebungswert ermitteln
tag := A_NOW
ENVADD, tag, %timeshift% ,DAYS
datum_variabel_ausgeben(tag)
RETURN
::mo:: ; "nächster Montag"
::di::
::mi::
::do::
::fr::
::sa::
::so::
::mo-:: ; "lezter Montag"
::di-::
::mi-::
::do-::
::fr-::
::sa-::
::so-::
::mo1:: ; "Montag in einer Woche"
::di1::
::mi1::
::do1::
::fr1::
::sa1::
::so1::
::mo2:: ; "Montag in zwei Wochen"
::di2::
::mi2::
::do2::
::fr2::
::sa2::
::so2::
STRINGMID, gesuchter_wochentag, A_THISHOTKEY, 3, 2 ; Wochentag aus Hotstringname extrahieren
tag :=
ENVADD, tag, 1, DAYS ; Basis-Datum (morgen) ermitteln
IF A_THISHOTKEY CONTAINS - ; Basis Datum eine Woche zurück bei "-" - Hotkey
ENVADD, tag, -8, DAYS
ELSE IF A_THISHOTKEY CONTAINS 1 ; Basis Datum eine Woche vor bei "1" - Hotkey
ENVADD, tag, +7, DAYS
ELSE IF A_THISHOTKEY CONTAINS 2 ; Basis Datum zwei Wochen vor bei "2" - Hotkey
ENVADD, tag, +14, DAYS
LOOP, 7 ; Datum zu Wochentag per LOOP ermitteln
{
FORMATTIME, wochentag, %tag%, ddd
IF (gesuchter_wochentag = wochentag)
BREAK
ENVADD, tag, 1, DAYS
}
datum_variabel_ausgeben(tag)
RETURN
datum_variabel_ausgeben(tag)
{
; Datumsvarianten genierieren
FORMATTIME, normales_datum, %tag%, dd.MM.yy ; kurzes Datum 10.09.12
FORMATTIME, datum_jahr_lang,%tag%, dd.MM.yyy ; Jahreszahl vierstellig 10.09.2012
FORMATTIME, inverses_datum, %tag%, yyy-MM-dd ; Jahr vorangestellt 2012-09-10
FORMATTIME, langes_datum, %tag%, LONGDATE ; Langes Datum Montag, 10. September 2012
STRINGREPLACE, langes_datum,langes_datum,`,,`, den
SEND %normales_datum% ; Zunächst kurzes Datum ausgeben (27.06.13)
INPUT, lang, L1 T1 V ; Zusatzeingabe überwachen
IF lang=#
SEND, {BS 9}%inverses_datum% ; ... inverses Datum ausgeben (2013-06-27)
ELSE IF lang=+
{
SEND, {BS 9}%datum_jahr_lang% ; ... zweistellige Jahreszahl durch vierstellige ersetzen (27.06.2013) ...
INPUT, langlang, L1 T1 V ; ... weitere Zusatzeingabe überwachen ...
IFEQUAL,langlang,+, SEND, {BS 11}%langes_datum% ; ... Langes Datum ausgeben (Donnerstag, 27. Juni 2013)
}
INPUT ; Eingabe beenden
}