Kurz: set f [open datei r] set inhalt [read f] close f puts [string length inhalt]
Teil des Kurses Tcl
Dateien
set datei [file join [pwd] "tcl-demo.txt"]
set f [open $datei w]
puts $f "eins"
puts $f "zwei"
puts -nonewline $f "drei"
close $f
set f [open $datei r]
set inhalt [read $f]
close $f
puts [string length $inhalt]
set f [open $datei r]
while {[gets $f zeile] >= 0} { puts "> $zeile" }
close $f
set f [open $datei a]
puts $f "\nvier"
close $f
set f [open $datei]
puts [llength [split [string trim [read $f]] "\n"]]
close $f
puts [file exists $datei]
puts [file size $datei]
puts [file extension $datei]
puts [file tail $datei]
puts [file rootname [file tail $datei]]
file delete $datei
puts [file exists $datei]Ausgabe:
14
> eins
> zwei
> drei
4
1
20
.txt
tcl-demo.txt
tcl-demo
0Namespaces
Namespaces kapseln Variablen und Prozeduren:
namespace eval mathe {
variable zaehler 0
proc quadrat {x} { return [expr {$x * $x}] }
proc zaehle {} {
variable zaehler
return [incr zaehler]
}
namespace export quadrat zaehle
}
puts [mathe::quadrat 6]
puts [mathe::zaehle]
puts [mathe::zaehle]
namespace import mathe::quadrat
puts [quadrat 9]
puts [namespace exists mathe]
puts [lsort [info commands mathe::*]]Ausgabe:
36
1
2
81
1
::mathe::quadrat ::mathe::zaehleSkriptsubstitution mit eval, uplevel und eigene Kontrollstrukturen
Weil alles ein Befehl ist, kann man eigene Kontrollstrukturen schreiben:
proc wiederhole {n rumpf} {
for {set i 0} {$i < $n} {incr i} { uplevel 1 $rumpf }
}
set zaehler 0
wiederhole 3 { incr zaehler; puts "Durchlauf $zaehler" }
proc mit_zeit {rumpf} {
set ergebnis [uplevel 1 $rumpf]
return "Ergebnis: $ergebnis"
}
puts [mit_zeit { expr {6 * 7} }]
set befehl {puts "dynamisch"}
eval $befehl
set op +
puts [expr "3 $op 4"]
puts [{*}{string toupper} abc]
puts [apply {{x y} {expr {$x + $y}}} 3 4]
set f [list string repeat "ab"]
puts [{*}$f 2]Ausgabe:
Durchlauf 1
Durchlauf 2
Durchlauf 3
Ergebnis: 42
dynamisch
7
ABC
7
ababObjekte mit TclOO
oo::class create Tier {
variable name
constructor {n} { set name $n }
method laut {} { return "..." }
method vorstellen {} { return "$name sagt [my laut]" }
}
oo::class create Hund {
superclass Tier
method laut {} { return "Wau" }
method apportiere {} { return "holt Stock" }
}
oo::class create Katze {
superclass Tier
method laut {} { return "Miau" }
}
set tiere [list [Hund new "Rex"] [Katze new "Mimi"]]
foreach t $tiere { puts [$t vorstellen] }
puts [[lindex $tiere 0] apportiere]
puts [info object class [lindex $tiere 1]]
foreach t $tiere { $t destroy }Ausgabe:
Rex sagt Wau
Mimi sagt Miau
holt Stock
::KatzeMerke
- Dateien:
open,gets,read,puts $f,close;filebietet Pfadfunktionen namespace evalkapselt Code;variablegreift auf Namespace-Variablen zuuplevel,evalund{*}machen eigene Kontrollstrukturen möglich- TclOO bringt Klassen, Vererbung und Methoden
Übungsaufgabe
Schreibe eine Klasse Konto mit einzahlen und kontostand.
Quiz zur Selbstkontrolle
Wofür dient uplevel?
- Code im Kontext des Aufrufers ausführen (richtig)
- Eine Datei hochladen
- Variablen löschen
- Zeit messen
Wie öffnet man eine Datei zum Schreiben?
- open datei w (richtig)
- write datei
- file.open
- create datei
Was ist TclOO?
- Das Objektsystem von Tcl (richtig)
- Ein Editor
- Ein Compiler
- Eine Bibliothek für Netzwerke
Weiter im Kurs
Zurück: Listen, Dictionaries und Strings
Weiter: Ereignisse, Zeit und Ökosystem
Alle Kapitel: Tcl im Überblick