EMZETT.
Login

Kurz: Tcl hat eine eingebaute Ereignisschleife. after plant Aktionen, vwait wartet:

Teil des Kurses Tcl

Kapitel 5 von 8 im Kurs Tcl. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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}]]

Ausgabe:

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 ::ende

Ausgabe:

tick 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}]

Ausgabe:

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 10

Tcl 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"]]

Ausgabe:

Mia
0cc175b9c0f1b6a831c399e269772661
PaketZweck
TkGrafische Oberflächen
TcllibSammlung nützlicher Pakete (json, csv, md5, …)
ExpectInteraktive Programme automatisieren
TclTestTests
SQLite (package require sqlite3)Datenbank
ThreadThreads

Hinweis

Das letzte Beispiel setzt Tcllib voraus; die Bibliothek ist bei vielen Installationen dabei (apt install tcllib).

Merke

  • clock formatiert und rechnet mit Zeit
  • after plant Aktionen, vwait wartet auf Ereignisse in der Ereignisschleife
  • exec startet Programme, env und argv liefern die Umgebung
  • Tk baut Oberflächen, Tcllib liefert viele Zusatzpakete

Übungsaufgabe

Starte mit exec einen Befehl und gib seine Ausgabe großgeschrieben aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Dateien, Namespaces und Objekte

Weiter: Praxisprojekte

Alle Kapitel: Tcl im Überblick