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

dokumentacje: Tcl/Tk man, spis komend, tematyczny Tcl man/ Tk man, docs 1, wiki, devel, konf
książki/opisy: tutorial, sop121/E, krótki tut. ALR, 12 zasad, spis tut., -2- (pdf), -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, VecTcl; 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.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, win32 vanillawish
30MB, zip, zawierają b. dużo pkg, m.in. tcllib, udp, tls, tdom, ...

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...