Tutorial Tcl/Tk
⚡ Rezumat inteligent
TCL (Tool Command Language) este un limbaj de scripting și procedural bazat pe șiruri de caractere, creat de John Osterhout în 1989, utilizat pe scară largă pentru interfețe grafice (GUI), prototipare rapidă.pingși testarea, unde fiecare valoare este tratată în mod implicit ca un șir de caractere.

Ce este TCL?
TCL este o aplicație shell care citește comanda TCL din intrarea sa standard sau dintr-un fișier și oferă rezultatele dorite.
TCL este un limbaj de scripting bazat pe șiruri de caractere și, de asemenea, un limbaj procedural. A fost creat pentru prima dată de John Osterhout în 1989. Scopul dezvoltării...ping Acest limbaj este ușor de integrat în aplicații. Limbajul este frecvent utilizat pentru interfețe grafice și testare. De exemplu, prototipare rapidăping, Testarea interacțiunea bazei de date etc. În TCL, în mod implicit, totul este un șir.
Cum se execută TCL
Există două moduri de a executa cod TCL:
- Windows aplicația bazată este disponibilă aici fișierul tcltutor exe
- Aplicație bazată pe Linux
In Linux interpret interactiv, putem executa scripturile TCL ca mai jos
Pentru a accesa sesiunea interactivă TCL, executați următoarea comandă
Scripturi TCL
Programul TCL ar trebui să aibă extensia .tcl. Fiecare script în UNIX/LINUX începe cu calea shell-ului TCL
#!/usr/bin/tclsh
Exemplu:-
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
producție: Salut Lume
În TCL, comanda „Puts” este utilizată pentru a afișa mesaje în consolă. Sintaxa comenzii „puts” este următoarea:
pune un șir de caractere ?-nonewline? ?channelId?
- Nonnewline: Acest parametru opțional suprimă caracterul de linie nouă prin comandă implicită. Pune o linie nouă pentru fiecare șir
- Channelid: Acest parametru este utilizat pentru canalul de intrare standard (stdin) și canalul de ieșire standard (stdout).
Ex:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
Tip de înlocuire TCL
Există trei tipuri de substituții în TCL
- Înlocuirea comenzilor
- Substituție variabilă
- Înlocuire backslash
Să studiem unul câte unul
Înlocuirea comenzilor
Parantezele pătrate sunt folosite pentru înlocuirea comenzilor.
Exemplu:-
% puts [expr 1*3] % 3
Aici este evaluată mai întâi comanda dintre paranteze pătrate. Rezultatele sunt returnate. „expr” este utilizată pentru efectuarea calculului aritmetic.
Substituție variabilă
TCL efectuează înlocuirea variabilei cu ajutorul lui $ semn.
Exemplu:-
#!/usr/bin/tclsh set a 10 puts a puts $a
Aici creăm o variabilă numită „a” și îi setăm valoarea „10”.
- pune a : va imprima șirul „a” dar nu și valoarea lui „a” în consolă
- pune $a : va imprima valoarea lui 'a' pe consolă
Să executăm și să verificăm. Veți obține rezultatul ca mai jos.
$ ./substitution.tcl
a
10
Înlocuire backslash
În Tcl, bara oblică inversată este folosită pentru escaping caractere speciale, precum și pentru distribuirea comenzilor lungi pe mai multe linii. Orice caracter care urmează imediat după bara oblică inversată va rămâne fără înlocuire. În exemplul de mai jos, puteți vedea caracterul special „ “, care rămâne după bara oblică inversată.
Să verificăm acest lucru cu un exemplu
#!/usr/bin/tclsh puts "This is my \"car\"" $ ./backslashsubstitution.tcl This is my "car"
NOTĂ: -Pentru a comenta orice șir în TCL este folosit „#”. Toate caracterele de după „#” sunt ignorate de comanda tclsh shell.
Variabila TCL
O variabilă este un identificator care conține o valoare. Cu alte cuvinte, o variabilă este o referință la memoria unui computer, unde este stocată valoarea.
Variabilele sunt create prin „comandă set” și toate numele variabilelor sunt sensibile la majuscule. Înseamnă, Bună, Bună, Bună, toate sunt diferite în TCL. Uitați-vă la un exemplu de variabilă sensibilă la majuscule și minuscule.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Ieșire: -
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
Crearea variabilelor TCL
Pentru a crea variabile în TCL, trebuie să utilizați "a stabilit" comandă
Setează un 10
Pentru a obține valoarea variabilei, trebuie să utilizați simbolul „$” ca
% pune $a
% 10
Deci, obținem valoarea variabilei „a” ca 10.
Există informații despre comandă TCL
Comanda „set” este utilizată pentru a crea și citi variabile, așa cum se arată mai sus. Comanda unset este utilizată pentru a distruge o variabilă. Comanda „info exists” returnează 1 dacă varName există ca variabilă (sau element de matrice) în contextul curent, altfel returnează 0. (vezi exemplul de mai jos).
Există diverse comenzi „info” în TCL, cum ar fi „info exists”, „info functions”, „info global” și așa mai departe. Aici vom vedea un exemplu de „info exists”.
Ex:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Diferite bretele și comportamentul lor
{} -> Acolade
Acoladele din TCL grupează cuvintele pentru a deveni argumente. Acoladele sunt folosite pentru a defini un bloc care este amânat – cu alte cuvinte, poate fi executat DUPĂ restul comenzii de pe linia curentă. Caracterele dintre acolade sunt transmise unei comenzi exact așa cum sunt scrise.
Câteva puncte de reținut
- Înlocuirea variabilelor nu este permisă între {} acolade
- A folosit pentru a crea tipul de date din listă
Exemplu:-
% set x 10 % puts {$x} % $x
%set number {1 2 3 4 5} -> Aici numărul este un tip de date din listă
% pune $numar
%1 2 3 4 5
[] -> acolade pătrate
Parantezele pătrate sunt folosite pentru a crea comenzi imbricate. Mai simplu spus, ieșirea unei comenzi este transmisă ca argument către o altă comandă. Parantezele pătrate sunt folosite pentru a defini un bloc care se execută ÎNAINTE de restul comenzii de pe linia curentă, iar rezultatul este înlocuit în linie.
Ex: –
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> bretele rotunde
Această comandă este utilizată pentru a crea tipul de date matrice și, de asemenea, pentru a indica prioritatea operatorului.
% set a(1) 10 % set a(2) 20
Aici „a” este o matrice cu valorile 10 și 20. Vedeți mai jos comenzile pentru a imprima chei, perechi valori cheie și valori ale matricei.
% puts [array get a] -> To print key value pairs we use this command % 1 10 2 20 % puts [array names a] -> To print only keys % 1 2 % puts $a(1) -> To print first value of array % 10 % puts $a(2) -> To print second value of array % 20
Pentru a imprima valoarea „N-a” a tabloului a, vom folosi Puts $a(N)
Argumente de linie de comandă TCL
Elementele de date transmise unui script din linia de comandă sunt cunoscute ca argumente. Numărul de argumente ale liniei de comandă unui script Tcl este transmis ca variabilă globală argc. Numele unui script Tcl este transmis scriptului ca variabilă globală argv0, iar restul argumentelor liniei de comandă sunt transmise ca o listă în argv.
TCL are 3 variabile predefinite, cum ar fi
$argc -> indicates the number of arguments passed to the script $argv -> indicates list of arguments $argv0 -> indicates the name of script
Ex:–
arg-script.tcl #!/usr/bin/tclsh puts "number of arguments passed to the scripts : $argc" puts "list of arguments are passed to the script: $argv" puts "the name of scripts is: $argv0"
$ ./arg-script.tcl 10 20 30
producție:-
- Numărul de argumente transmise scripturilor: 3
- Lista de argumente este transmisă scriptului: 10 20 30
- Numele scriptului este: arg-script.tcl
Expresia TCL și OperaTdR
Expresia este construită din operanzi și operatori. Se evaluează cu comanda „expr”. Operatorii sunt evaluați pe baza precedenței și asociativității. Limbajul TCL are operatori încorporați ca mai jos
| OperaCategorie tor | Simbol | Precedentă/Asociativitate |
|---|---|---|
| Aritmetică OperaTdR | + – * / % | De la stânga la dreapta |
| Relațional OperaTdR | == != < > <= >= | De la stânga la dreapta |
| Logic OperaTdR | && || ! | De la stânga la dreapta |
| bitwise OperaTdR | & | ^ ~ | De la stânga la dreapta |
| Ternar OperaTdR | ?: | De la dreapta la stanga |
| Shift OperaTdR | << >> | De la stânga la dreapta |
| Comparație de șiruri OperaTdR | ech ne | De la stânga la dreapta |
| Exponențierea OperaTdR | ** | De la stânga la dreapta |
| Listă OperaTdR | În ni | De la stânga la dreapta |
Aritmetică OperaTdR
O expresie TCL constă dintr-o combinație de operanzi, operatori și paranteze. Să vedem un exemplu de operatori aritmetici în TCL
+ Adăugați doi sau mai mulți operanzi
Ex:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
– Subtracts doi sau mai mulți operanzi
Ex:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
* Înmulțiți doi sau mai mulți operanzi
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Împărțiți numărător cu numărător
%set a 20 %set b 10 %puts [expr $a / $b] 2
Operatorul % Modulus împarte numărătorul cu denumerator, dar returnează un memento
%set a 20 %set b 10 %puts [expr $a % $b] 0
Relațional OperaTdR
Verifică dacă valoarea operandului din stânga este mai mare decât valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată și returnează 1, altfel returnează 0.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Verificați dacă valoarea operandului din stânga este mai mică decât valoarea operandului din dreapta. Dacă da, atunci condiția devine adevărată și returnează 1, altfel returnează 0
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Verifică dacă valoarea operandului din stânga este mai mare sau egală cu valoarea operandului din dreapta, dacă da atunci condiția devine adevărată și returnează 1 în caz contrar returnează 0
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Verifică dacă valoarea operandului din stânga este mai mică sau egală cu valoarea operandului din dreapta, dacă da atunci condiția devine adevărată și returnează 1 în caz contrar returnează 0
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= Verifică dacă valorile a doi operanzi sunt egale sau nu, dacă valorile nu sunt egale atunci condiția devine adevărată și returnează 1 altfel returnează 0
%set a 20 %set b 10 %puts [expr $a != $b] 1
== Verifică dacă valorile a doi operanzi sunt egale sau nu, dacă da atunci condiția devine adevărată și returnează 1 altfel returnează 0
%set a 20 %set b 10 %puts [expr $a == $b] 0
Logic OperaTdR
&& Dacă ambii operanzi sunt non-zero, atunci condiția devine adevărată și returnează 1, altfel returnează 0
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| Dacă oricare dintre cei doi operanzi este diferit de zero, atunci condiția devine adevărată și returnează 1, altfel returnează 0
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Folosit pentru a inversa rezultatul oricărei expresii. Aici, în rezultat, puteți vedea că valoarea lui „a” a devenit acum 1 de la 0. În timp ce valoarea lui „b” a devenit 0 de la 1.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
bitwise OperaTdR
& (pe bit și) efectuează operațiuni bit cu bit și urmează tabelul de mai jos pentru operare.
| A | B | A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
| 1 | 0 | 0 |
Ex:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A & B will be 0 0 0 0 0 0 0 0
| (pe bit sau) efectuați operațiuni bit cu bit și urmați tabelul de mai jos
| A | B | A | B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
Ex:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A | B will be 0 0 0 1 1 1 1 0
^ (exclusiv pe biți sau) efectuați operațiuni bit cu bit și urmați tabelul de mai jos
| A | B | A ^ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
| 1 | 0 | 1 |
Ex:-
%set A 10 %set B 20 Follow the sequence to convert decimal to binary number 128 64 32 16 8 4 2 1 10 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 0 1 0 1 0 20 binary equivalents will be 128 64 32 16 8 4 2 1 à 0 0 0 1 0 1 0 0 So now as per above tabular rules A ^ B will be 0 0 0 1 1 1 1 0 à 30
Operatorul ~ (negație pe biți) schimbă fiecare 1 la 0 și 0 la 1, urmați tabelul ca referință
| A | ~A |
|---|---|
| 0 | 1 |
| 1 | 0 |
%set A 7 %puts [expr ~$A] -8
Ternar Operator (?:)
Sintaxa este
condition-expression? expression_1: expression_2
Dacă exp-condiție este adevărată, exp1 este evaluată și rezultatul este returnat. Dacă exp-ul este fals, exp2 este evaluat și rezultatul său este returnat. În exemplul nostru, exp1 este adevărată deoarece valoarea lui A este mai mare decât 6.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift OperaTdR
Shift operatorul este notat fie prin << operator de deplasare la stânga, fie cu >> operatorul de schimbare la dreapta. Pentru operatorul << deplasare la stânga, valoarea operanzilor din stânga este mutată la stânga cu numărul de biți specificat de operandul din dreapta.
%set A 7 %set result [expr $A << 2] %puts $result
Pentru operatorul >> deplasare la dreapta, valoarea operanzilor din stânga este mutată la dreapta cu numărul de biți specificat de operandul din dreapta.
%set A 7 %set result [expr $A >> 2] %puts $result
Comparație de șiruri OperaTdR
Operatorul de comparare a șirurilor de caractere compară valoarea ambilor operanzi. Dacă valoarea operandului este aceeași, atunci va returna 1, altfel va returna 0. În exemplu, valoarea pentru A și B este 7, prin urmare, rezultatul va returna 1.
Ex:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ne (dacă valoarea ambilor operanzi este diferită, atunci va returna 1, altfel va returna 0)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Operator de exponențiere
Pow () și ** ambele sunt la fel. Returnează întotdeauna o valoare flotantă.
** indică puterea operandului dorit.
Ex:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
Listă OperaTdR
Dacă valoarea necesară se găsește în lista definită, returnează 1, altfel va returna 0. În exemplu, valoarea 1 există în variabila „a”, prin urmare va returna 1.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
nu, dacă valoarea necesară este găsită în lista definită, atunci va returna 0, altfel returnează 1.
Ex:-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
Controlul fluxului TCL și luarea deciziilor
Există diverse comenzi de control al fluxului și de luare a deciziilor care sunt utilizate pentru a modifica fluxul unui program. Execuțiile programului încep întotdeauna din partea de sus a fișierului sursă până în jos.
Instrucțiunea If constă dintr-o expresie booleană urmată de una sau mai multe instrucțiuni.
Dacă … declarație
Sintaxă:-
dacă expr ?atunci? corp
dacă expr este evaluat la adevărat, atunci corpul comenzii este executat.
Ex:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Instrucțiunea If … else
Sintaxa:-
Dacă expresie? apoi body_1 else body_2
Dacă expresia este evaluată la adevărat, atunci va returna body_1, altfel va returna body_2
Ex:–
set age 10 if {$age < 20} { puts "Age is less than 20" } else { Puts "Age is greater than 20" } output: Age is less than 20
Imbricat if..else declarație
Înseamnă o declarație if sau else..if poate fi pusă în interiorul altei declarații if sau else..if.
Sintaxă:-
If {expression_1} { Body_1 If {expression_2} { Body_2 } }
Ex:–
set a 10 set b 20 if {$a == 10} { # if expression_1 is true then it will go to expression_2 if {$b == 20} { #if expression_2 is true then it will print the below string puts "value of a is 10 and b is 20" } } o/p: value of a is 10 and b is 20
Declarație Switch
Instrucțiunea switch permite testarea unei variabile pentru egalitate cu o listă de valori. Evaluează lista de valori și returnează rezultatul acelei evaluări. Dacă nicio valoare nu se potrivește, atunci valorile implicite vor fi returnate.
Exemplu:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Comutator imbricat
Instrucțiunea switch imbricată înseamnă instrucțiunea switch în interiorul unei instrucțiuni switch.
Sintaxă :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
ExempluÎn exemplul următor, valoarea lui a este 100, iar cu același cod schimbăm instrucțiunea cu o altă valoare a lui b, care este 200. Out va afișa valoarea atât pentru a, cât și pentru b.
#!/usr/bin/tclsh set a 100 set b 200 switch $a { 100 { puts "The value of a is $a" switch $b { 200 { puts "The value of b is $b" } } } }
Ieșire: -
Valoarea lui a este 100
Valoarea lui b este 200
Declarație TCL Loop
Instrucțiunea Loop permite executarea unei instrucțiuni sau a unui grup de instrucțiuni de mai multe ori. Tcl oferă următoarele tipuri de buclăping afirmație.
În timp ce comanda
Când o anumită condiție este adevărată, se repetă o declarație sau un grup de instrucțiuni care se află în corpul buclei.
Sintaxă:
While {condition} {
Statements
}
Ex:-
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Ieșire: -
a este 10
a este 11
În exemplul de mai sus, se folosește comanda încorporată „incr”. Aceasta înseamnă că valoarea lui „a” va fi mărită cu 1 până la valoarea maximă (<12).
Pentru comandă
Execută o secvență de instrucțiuni de mai multe ori pe baza unei valori a contorului. Aceasta este crescută sau scăzută automat în timpul fiecărei repetări a buclei.
Sintaxă :-
For {start} {test} {next} {
Body
}
ExempluÎn exemplul de mai jos, valoarea lui „i” este setată la 0 și incrementată până la o valoare <5.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Ieșire: -
0 1 2 3 4

