Zeit und Datum
set t 0
puts [clock format $t -format "%Y-%m-%d %H:%M:%S" -gmt 1]
puts [clock scan "2024-03-15" -format "%Y-%m-%d" -gmt 1]
set sek [clock add 86400 1 day -gmt 1]
puts [clock format $sek -format "%d.%m.%Y" -gmt 1]
puts [expr {[clock seconds] > 1700000000}]
puts [clock format 1700000000 -format "%A, %d. %B %Y" -gmt 1 -locale en]
puts [string is wideinteger [clock milliseconds]]
puts [format "%.1f Tage" [expr {(1700000000 - 1600000000) / 86400.0}]]1970-01-01 00:00:00 1710460800 03.01.1970 1 Tuesday, 14. November 2023 1 1157.4 Tage
Ereignisschleife und after
Tcl hat eine eingebaute Ereignisschleife. after plant Aktionen, vwait wartet:
set zaehler 0
proc tick {} {
global zaehler
incr zaehler
puts "tick $zaehler"
if {$zaehler < 3} {
after 10 tick
} else {
set ::fertig 1
}
}
after 10 tick
vwait ::fertig
puts "fertig nach $zaehler Ticks"
after 20 {puts "Verzögerte Aktion"; set ::ende 1}
puts "vor dem Warten"
vwait ::endetick 1 tick 2 tick 3 fertig nach 3 Ticks vor dem Warten Verzögerte Aktion
Prozesse und Umgebung
puts [exec echo hallo]
puts [string trim [exec sh -c "echo a; echo b"]]
set status [catch {exec sh -c "exit 3"} meldung opts]
puts "$status [lindex [dict get $opts -errorcode] end]"
puts [info exists ::env(PATH)]
set ::env(MEINE_VAR) "wert"
puts [exec sh -c {echo $MEINE_VAR}]
puts [llength $::argv]
puts $::tcl_platform(os)
puts [info tclversion]
puts [expr {[string length [info hostname]] > 0}]hallo a b 1 3 1 wert 0 Linux 8.6 1
Tk und Pakete
Tk ist das GUI-Toolkit von Tcl. Das Skript braucht eine grafische Umgebung (wish):
package require Tk
label .gruss -text "Hallo, Tk!"
button .knopf -text "Klick mich" -command { .gruss configure -text "Geklickt!" }
pack .gruss .knopf -padx 20 -pady 10Tcl hat viele Pakete (package require) und die Bibliothek Tcllib:
package require json
package require md5
puts [dict get [json::json2dict {{"name": "Mia", "alter": 17}}] name]
puts [string tolower [md5::md5 -hex "a"]]Mia 0cc175b9c0f1b6a831c399e269772661
| Paket | Zweck |
|---|---|
| Tk | Grafische Oberflächen |
| Tcllib | Sammlung nützlicher Pakete (json, csv, md5, ...) |
| Expect | Interaktive Programme automatisieren |
| TclTest | Tests |
SQLite (package require sqlite3) | Datenbank |
| Thread | Threads |
Merke
clockformatiert und rechnet mit Zeitafterplant Aktionen,vwaitwartet auf Ereignisse in der Ereignisschleifeexecstartet Programme,envundargvliefern die Umgebung- Tk baut Oberflächen, Tcllib liefert viele Zusatzpakete
Aufgabe
Starte mit exec einen Befehl und gib seine Ausgabe großgeschrieben aus.