portal Michała Hanćkowiaka
Begin main content
Search · Index
No registered users in community Materiały
in last 10 minutes

Tutorial j. Tcl na potrzeby zajęć ALR

dokumentacja: Tcl/Tk man, spis komend, tematyczny Tcl man/ Tk man, docs 1, docs 2, wiki, devel, konf
książki/opisy: tutorial, sop121/E, krótki tut. ALR, 12 zasad, spis tut., -2-, -3-, -4-, -5-, -6-, -7-, -8-; GUI w Tk: TkDocs, -1-, -2-
dokumentacje pakietów: dict, http, tls, tcllib, tklib, tdom, udp, Thread, java, TclX, expect, blt, snack, vfs; OOP: Itcl, snit/faq, XOTcl, TclOO/book, nx+nsf
inne dokumentacje: dbms: sqlite (sql), metakit; ser. www: tclhttpd, NaviSer, wapp, wibble (src); checker: nagelfar

interpretery tclkit j. Tcl v8.4: win32 tclkit.exe, lin32 tclkit, lin32 tclkit_2
tclkit_2 zawiera b. wiele pkg... np. tls, udp, sqlite, tcllib, tklib, ...
interpretery tclkit j. Tcl v8.6: lin32 tclkit8.6b1, lin32 tclkit8.6.9, lin64 tclkit8.6.3, win64 tclkit8.6.3.exe
tcl v8.6: używa nowych fontów pod lin, posiada cmd dict oraz pkg: Thread, TDBC, Itcl, TclOO, ...
interpretery vanilla j. Tcl v8.6 dla wielu platform są tutaj, lin32 vanillatclsh
30MB, zip, zawierają b. dużo pkg, m.in. tcllib

biblioteka tcllib (tcllib.tar.gz) zawiera przydatne, czysto-skryptowe pakiety Tcl-a

ulepszona konsola konsola2c.tcl, uruchamiać: ./tclkit konsola2c.tcl; pamiętać o "chmod u+x tclkit" na linux-ie
klawisze w konsoli: ctrl+enter = uruchomienie zaznaczonego kodu lub kodu w linii, w której jest kursor;
shift+ins = Paste; ctrl+ins = Copy; ctrl+o = Open; ctrl+s = Save; ctrl+z = UnDo

urządzenia mobilne: Tcl/Tk dla Androida - androwish.org (cmd: borg, sdltk; lista pkg)

# eksperymenty z Tcl-em w konsoli...
#

wygodnie jest uzywac konsoli konsola2c.tcl
uruchamiac tak (linux):
  ./tclkit konsola2c.tcl
lub:
  ./tclkit konsola2c.tcl mojskrypt.tcl
uwaga - prawo wykonania mozna nadać tak: chmod u+x tclkit

specjalne klawisze konsoli2c: 
  Ctrl+Enter - uruchomienie zaznaczonego kodu
     lub kodu w linii, w której jest kursor,
  Ctrl+O Open - wczytuje plik zrodlowy do konsoli w miejsce kursora,
  Ctrl+S Save,
  Ctrl+Z UnDo

specjalne komendy konsoli2c:
  _puts tekst - wyswietla tekst w oknie "output"
  kons_font liczba - zmienia rozmiar czcionki konsoli (liczba to np. 15)


# komentarze
#

# tekst ...
kod tclowy; # tekst ...
  Uwaga na ";" przed "#" !!!


# zmienne, wyrazenia
#

set x1 1
set x2 2
set x3 [expr {$x1+$x2}]
  # wynik: 3, tak sie oblicza wyrazenia arytmetyczne
set x3a $x1+$x2
  # wynik: 1+2, bo to nie dodawanie tylko string!!


# substytucje zmiennych $zm i komend [kod] oraz cytowanie
#

set z1 "$x1+$x2=$x3"
  # wynik: 1+2=3
set z2 {$x1+$x2=$x3}
  # wynik: $x1+$x2=$x3 bo nawiasy klamrowe "silnie cytuja"

set z3 "$x1, $x2, [expr {$x1+$x2}]"
  # nawiasy kwadratowe to tzw substytucja komend
  # wynik: 1, 2, 3


# instrukcje sterujace
#

if {$x<=15} {
  _puts "$x jest mniejsze od 15"
} else {
  _puts "$x jest mniejsze od 15"
}

# Uwaga: KONIECZNIE uzywac { } dokladnie tak jak w tych przykadach,
#  tj nie mozna przenosic { do nastepnej linii !!!
#  if jest bowiem zwykla komenda ktorej parametrami sa stringi z kodem, 
#  a komendy pisze sie w 1 linii (znak \n jest ukryty w {...})

set i 1
while {$i<10} {
  _puts "i=$i"
  set i [expr {$i+1}]
  # lub po prostu: incr i
}

for {set i 0} {$i<5} {incr i} {_puts $i}

foreach x {qqq www eee} {_puts $x}


# procedury
#

# definicja procedury
proc mojaproc {a b} {
  global c; # deklaracja zm. globalnej
  return "$a,$b,$c"
}

set c 123; # zmienna globalna

# wywołanie procedury
mojaproc 11 22
  # wynik: 11,22,123


# procedura tworząca zmienną o nazwie podanej przez arg
#

proc utworzZm {nazwa} {
  upvar $nazwa x
  set x 123
  return ""
}

utworzZm a
  # po wykonaniu tej proc istnieje zm. "a" o wartości 123


# operacje na stringach (komenda string)
#

set x "12345"
set y [string range $x 2 end-1]
  # wynik: 34


# operacje na listach (komendy l*, np. list, lrange, lset, lindex, lappend)
# + listy mogą być dowolnie zagnieżdżone!
#

set q {1 2 3 4}
lindex $q 2
  # wynik: 3
set q1 [lrange $q 2 3]
  # wynik: 3 4
lset q 2 33
  # efekt dzialania: $q == "1 2 33 4"
lappend q 5
  # wynik: 1 2 33 4 5


# operacje na słownikach (komenda dict)
# + słowniki mogą być dowolnie zagnieżdżone!
#

set d1 {a 111 b 222}
  # wynik: a 111 b 222
dict get $d1 a
  # wynik: 111
dict set d1 c 333
  # wynik: a 111 b 222 c 333


# jak "zdjąć" z listy pierwszy element ?
#

set li1 {1 2 3}
set x [lindex $li1 0]
  # wynik: 1; pierwszy element jest w zm. "x"
set li1 [lreplace $li1 0 0]
  # wynik: 2 3; zastąpiliśmy pierwszy elem. niczym








uwaga: portal używa ciasteczek tylko do obsługi tzw. sesji...