Tcl/Tk-opetusohjelma
โก รlykรคs yhteenveto
TCL (Tool Command Language) on John Osterhoutin vuonna 1989 kehittรคmรค merkkijonopohjainen skripti- ja proseduraalinen kieli, jota kรคytetรครคn laajalti kรคyttรถliittymissรค, nopeissa prototyypeissรค ja muissa vastaavissa tehtรคvissรค.pingja testaus, jossa jokaista arvoa kรคsitellรครคn oletusarvoisesti merkkijonona.

Mikรค on TCL?
TCL on shell-sovellus, joka lukee TCL-komennon vakiosyรถtteestรค tai tiedostosta ja antaa halutut tulokset.
TCL on merkkijonopohjainen skriptikieli ja myรถs proseduraalinen kieli. Sen loi ensimmรคisen kerran John Osterhout vuonna 1989. Kehittรคmisen tarkoitusping Tรคmรค kieli on helppo upottaa sovelluksiin. Kieltรค kรคytetรครคn yleisesti kรคyttรถliittymissรค ja testauksessa. Esimerkiksi nopeassa prototyyppien kehittรคmisessรคping, Testaus tietokantavuorovaikutus jne. TCL:ssรค oletusarvoisesti kaikki on merkkijonoa.
Kuinka suorittaa TCL
TCL-koodia voi suorittaa kahdella tavalla:
- Windows pohjainen sovellus lรถytyy tรครคltรค tcltutor exe-tiedosto
- Linux-pohjainen sovellus
In Linux interaktiivinen tulkki, voimme suorittaa TCL-komentosarjat alla
Pรครคstรคksesi interaktiiviseen TCL-istuntoon, suorita seuraava komento
TCL-skriptit
TCL-ohjelmalla tulee olla .tcl-tunniste. Jokainen UNIX/LINUXin komentosarja alkaa TCL-kuoren polulla
#!/usr/bin/tclsh
Esimerkki: -
#!/usr/bin/tclsh Puts "Hello World" Script execution:- $ chmod +x helloworld.tcl $ ./helloworld.tcl
ulostulo: Hei maailma
TCL:ssรค komentoa โPutsโ kรคytetรครคn viestien tulostamiseen konsoliin. Puts-komennon syntaksi on alla.
laittaa ?-nonewline? ?channelId? merkkijonon
- Ei uusi rivi: Tรคmรค valinnainen parametri estรครค rivinvaihdon oletuskomennon. Se asettaa rivinvaihdon jokaiseen merkkijonoon
- Channelid: Tรคtรค parametria kรคytetรครคn vakiotulokanavalle (stdin) ja vakiolรคhtรถkanavalle (stdout).
Esim:-
%puts "Hello World" % Hello World %puts stdout "Hello World" % Hello World
TCL-korvaustyyppi
TCL:ssรค on kolmenlaisia โโkorvauksia
- Komennon korvaaminen
- Muuttuva korvaus
- Kenoviivan vaihto
Opiskellaan yksi kerrallaan
Komennon korvaaminen
Hakasulkeita kรคytetรครคn komentojen korvaamiseen.
Esimerkki: -
% puts [expr 1*3] % 3
Tรคssรค hakasulkeissa oleva komento lasketaan ensin. Tulokset palautetaan. โexprโ-funktiota kรคytetรครคn aritmeettisen laskutoimituksen suorittamiseen.
Muuttuva korvaus
TCL suorittaa muuttujan korvaamisen avulla $ merkki.
Esimerkki: -
#!/usr/bin/tclsh set a 10 puts a puts $a
Tรครคllรค luomme muuttujan nimeltรค "a" ja asetamme sille arvon "10".
- laittaa a: Se tulostaa merkkijonon "a", mutta ei "a":n arvoa konsoliin
- laittaa $a: Se tulostaa 'a':n arvon konsoliin
Suoritetaan ja tarkistetaan se. Saat tulosteen alla olevan mukaisesti.
$ ./substitution.tcl
a
10
Kenoviivan vaihto
Tcl:ssรค kenoviivaa kรคytetรครคn esca-merkinnรคn suorittamiseen.ping erikoismerkkejรค sekรค pitkien komentojen jakamiseen useille riveille. Mikรค tahansa kenoviivaa vรคlittรถmรคsti seuraava merkki pysyy voimassa ilman korvausta. Alla olevassa esimerkissรค nรคet, ettรค erikoismerkki โ โ jรครค kenoviivan jรคlkeen.
Varmistetaan tรคmรค esimerkillรค
#!/usr/bin/tclsh puts "This is my \"car\"" $ ./backslashsubstitution.tcl This is my "car"
HUOMAUTUS: -Kommentoimiseen kรคytetรครคn mitรค tahansa merkkijonoa TCL:ssรค "#". Tclsh shell -komento ohittaa kaikki "#":n jรคlkeiset merkit.
TCL-muuttuja
Muuttuja on tunniste, joka sisรคltรครค arvon. Toisin sanoen muuttuja on viittaus tietokoneen muistiin, johon arvo on tallennettu.
Muuttujat luodaan "set-komennolla", ja kaikki muuttujien nimet ovat kirjainkoolla. Se tarkoittaa hei, hei, hei kaikki ovat erilaisia โโTCL:ssรค. Katso esimerkkiรค isot ja pienet kirjaimet vaihtelevasta muuttujasta.
% set name Techoit % set Name Technoit_1 % set NAME Technoit_2
Lรคhtรถ: -
% puts $name % Technoit %puts $Name %Technoit_1 %puts $NAME %Technoit_2
TCL-muuttujien luominen
Jos haluat luoda muuttujia TCL:ssรค, sinun on kรคytettรคvรค "aseta" komento
Aseta 10
Muuttujan arvon saamiseksi on kรคytettรคvรค "$" symbolia kuten
% laittaa $a
% 10
Joten saamme muuttujan 'a' arvoksi 10.
TCL-komentotiedot ovat olemassa
Komentoa โsetโ kรคytetรครคn muuttujien luomiseen ja lukemiseen yllรค esitetyllรค tavalla. Komentoa unset kรคytetรครคn muuttujan tuhoamiseen. Komento โinfo existsโ palauttaa arvon 1, jos varName on olemassa muuttujana (tai taulukon alkiona) nykyisessรค kontekstissa, muuten palauttaa arvon 0 (katso esimerkki alla).
TCL:ssรค on erilaisia โโโinfoโ-komentoja, kuten โinfo on olemassaโ, โinfo functionsโ, โinfo globalโ ja niin edelleen. Tรคssรค nรคemme esimerkin โinfo on olemassaโ -komennosta.
Esim:-
% set a 20 % puts $a % 20 % puts [info exists a] % 1 % unset a %puts [info exists a] % 0
Erilaiset henkselit ja niiden kรคyttรคytyminen
{} -> Kiharat henkselit
TCL:n aaltosulkeet ryhmittelevรคt sanoja argumenteiksi. Aaltosulkuja kรคytetรครคn mรครคrittelemรครคn lohko, jonka suorittaminen on lykรคtty โ toisin sanoen se voidaan suorittaa nykyisellรค rivillรค olevan komennon JรLKEEN. Aaltosulkujen sisรคllรค olevat merkit vรคlitetรครคn komennolle tรคsmรคlleen sellaisenaan kuin ne on kirjoitettu.
Muutama huomio muistettavana
- Muuttujien korvaaminen ei ole sallittu {} aaltosulkeissa
- Sitรค kรคytettiin luettelotietotyypin luomiseen
Esimerkki: -
% set x 10 % puts {$x} % $x
%set number {1 2 3 4 5} -> Tรคssรค numero on luettelotietotyyppi
% laittaa $numeron
%1 2 3 4 5
[] -> hakasulkeet
Hakasulkeita kรคytetรครคn sisรคkkรคisten komentojen luomiseen. Yksinkertaisesti sanottuna yhden komennon tuloste annetaan argumenttina toiselle komennolle. Hakasulkeita kรคytetรครคn mรครคrittelemรครคn lohko, joka suoritetaan ENNEN nykyisen rivin muuta komentoa, ja tulos sijoitetaan riville.
Esim: -
% set x 10 % puts "y : [set y [set x 10]]" %y : 10 % puts "x : $x" %x : 10
() -> pyรถreรคt olkaimet
Tรคtรค komentoa kรคytetรครคn taulukon tietotyypin luomiseen ja myรถs operaattorin ensisijaisuuden osoittamiseen.
% set a(1) 10 % set a(2) 20
Tรคssรค "a" on taulukko, jonka arvot ovat 10 ja 20. Katso alla komennot avainten, avainarvoparien ja taulukon arvojen tulostamiseksi.
% 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
Tulostettaessa taulukon a "N:s" arvoa kรคytetรครคn Puts $a(N)
TCL-komentorivin argumentit
Komentoriviltรค komentosarjalle vรคlitetyt tiedot tunnetaan argumenteina. Tcl-komentosarjan komentoriviargumenttien mรครคrรค vรคlitetรครคn yleisenรค muuttujana arg. Tcl-komentosarjan nimi vรคlitetรครคn komentosarjalle globaalina muuttujana argv0, ja loput komentorivin argumentit vรคlitetรครคn luettelona sisรครคn argv.
TCL:ssรค on 3 ennalta mรครคritettyรค muuttujaa, kuten
$argc -> indicates the number of arguments passed to the script $argv -> indicates list of arguments $argv0 -> indicates the name of script
Esim:-
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
ulostulo:-
- Skripteille vรคlitettyjen argumenttien mรครคrรค: 3
- Argumenttien luettelo vรคlitetรครคn skriptille: 10 20 30
- Skriptin nimi on: arg-script.tcl
TCL-lauseke ja OperaTor
Lauseke konstruoidaan operandeista ja operaattoreista. Se lasketaan komennolla โexprโ. Operatorit arvioidaan ensisijaisuuden ja assosiatiivisuuden perusteella. TCL-kielessรค on sisรครคnrakennetut operaattorit, kuten alla
| Operator-luokka | Symboli | Ensisijaisuus/assosiaatio |
|---|---|---|
| Aritmeettinen OperaTor | + โ * / % | Vasemmalta oikealle |
| omainen OperaTor | == != < > <= >= | Vasemmalta oikealle |
| looginen OperaTor | && || ! | Vasemmalta oikealle |
| biteittรคin OperaTor | & | ^ ~ | Vasemmalta oikealle |
| Kolmiosainen OperaTor | ?: | Oikealta vasemmalle |
| Shift OperaTor | << >> | Vasemmalta oikealle |
| Merkkijonojen vertailu OperaTor | yhtรคlรถ ne | Vasemmalta oikealle |
| Potenssiinkorotus OperaTor | ** | Vasemmalta oikealle |
| Lista OperaTor | Vuonna ni | Vasemmalta oikealle |
Aritmeettinen OperaTor
TCL-lauseke koostuu operandien, operaattoreiden ja sulkeiden yhdistelmรคstรค. Katsotaanpa esimerkkiรค TCL:n aritmeettisista operaattoreista
+ Lisรครค kaksi tai useampi operandi
Esim:-
%set a 10 %set b 20 %puts [expr $a + $b] 30
โ Subtrackaksi tai useampia operandeja
Esim:-
%set a 20 %set b 10 %puts [expr $a - $b] 10
*Kerro kaksi tai useampi operandi
%set a 20 %set b 10 %puts [expr $a * $b] 200
/ Jaa osoittaja osoittajalla
%set a 20 %set b 10 %puts [expr $a / $b] 2
% Modulus-operaattori jakaa osoittajan de-osoittajalla, mutta palauttaa muistutuksen
%set a 20 %set b 10 %puts [expr $a % $b] 0
omainen OperaTor
Tarkistaa, onko vasemman operandin arvo suurempi kuin oikean operandin arvo. Jos kyllรค, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0.
%set a 20 %set b 10 %puts [expr $a > $b] 1
Tarkista, onko vasemman operandin arvo pienempi kuin oikean operandin arvo. Jos kyllรค, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0
%set a 10 %set b 20 %puts [expr $a < $b] 1
>= Tarkistaa onko vasemman operandin arvo suurempi tai yhtรค suuri kuin oikean operaandin arvo, jos kyllรค, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0
%set a 20 %set b 10 %puts [expr $a >= $b] 1
<= Tarkistaa onko vasemman operandin arvo pienempi tai yhtรค suuri kuin oikean operandin arvo, jos kyllรค, niin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0
%set a 20 %set b 10 %puts [expr $a <= $b] 0
!= Tarkistaa ovatko kahden operandin arvot samat vai eivรคt, jos arvot eivรคt ole yhtรค suuret, ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0
%set a 20 %set b 10 %puts [expr $a != $b] 1
== Tarkistaa ovatko kahden operandin arvot yhtรค suuret vai eivรคt, jos kyllรค โโniin ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0
%set a 20 %set b 10 %puts [expr $a == $b] 0
looginen OperaTor
&& Jos molemmat operandit eivรคt ole nollia, ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0
%set a 20 %set b 10 %puts [expr $a && $b] 1
|| Jos jokin kahdesta operandista on muu kuin nolla, ehdosta tulee tosi ja palauttaa 1 muuten palauttaa 0
%set a 0 %set b 10 %puts [expr $a || $b] 1
! Kรคytetรครคn minkรค tahansa lausekkeen tuloksen kรครคntรคmiseen. Tรคssรค tulosteessa nรคet, ettรค 'a':n arvo on nyt muuttunut arvosta 1 nollasta. Kun taas 'b':n arvo on muuttunut arvosta 0 nollasta 1.
%set a 0 %set b 1 %puts [expr !$a] 1 %puts [expr !$b] 0
biteittรคin OperaTor
& (bittisesti ja) suorita bitti bitiltรค -toiminto ja noudata alla olevaa taulukkoa.
| A | B | A & B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 1 | 1 |
| 1 | 0 | 0 |
Esim:-
%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
| (bitti kerrallaan tai) suorita bitti bitiltรค -toiminto ja noudata alla olevaa taulukkoa
| A | B | A | B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
Esim:-
%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
^ (bittittรคin poissulkeva tai) suorita bitti bitiltรค -toiminto ja noudata alla olevaa taulukkoa
| A | B | A^B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
| 1 | 0 | 1 |
Esim:-
%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
~ (bittikohtainen negaatio) -operaattori muuttaa kunkin 1:stรค 0:ksi ja 0:sta 1:ksi, seuraa taulukkoa viitteenรค
| A | ~A |
|---|---|
| 0 | 1 |
| 1 | 0 |
%set A 7 %puts [expr ~$A] -8
Kolmiosainen Operator (?:)
Syntaksi on
condition-expression? expression_1: expression_2
Jos ehto-exp on tosi, exp1 arvioidaan ja tulos palautetaan. Jos cond-exp on epรคtosi, exp2 arvioidaan ja sen tulos palautetaan. Esimerkissรคmme exp1 on tosi, koska A:n arvo on suurempi kuin 6.
%set A 7 %set result [expr $A > 6 ? true : false] %puts $result true
Shift OperaTor
Shift operaattoria merkitรครคn joko << vasemman siirtooperaattorilla tai >> oikealla siirtooperaattorilla. << vasemmalle siirtooperaattorille vasemman operandin arvoa siirretรครคn vasemmalle oikean operandin mรครคrittรคmรคn bittien lukumรครคrรคn verran.
%set A 7 %set result [expr $A << 2] %puts $result
>> right shift -operaattorille vasen operandiarvo siirretรครคn oikealle oikean operandin mรครคrittรคmรคn bittimรครคrรคn verran.
%set A 7 %set result [expr $A >> 2] %puts $result
Merkkijonojen vertailu OperaTor
Merkkijonojen vertailuoperaattori vertaa molempien operandien arvoja. Jos operandin arvo on sama, se palauttaa arvon 1, muuten palauttaa arvon 0. Esimerkissรค sekรค A:n ettรค B:n arvo on 7, joten tulos on 1.
Esim:-
%set A 7 %set B 7 %set result [expr $A eq $B] %puts $result 1
Ei (jos molempien operandien arvot ovat erilaiset, se palauttaa 1 muuten palauttaa 0)
%set A 7 %set B 8 %set result [expr $A ne $B] %puts $result 1
Eksponenttioperaattori
Pow () ja ** ovat molemmat samat. Se palauttaa aina kelluvan arvon.
** osoittaa tehon haluttuun operandiin.
Esim:-
%set A 7 %set result [expr $A ** 2] %puts $result 49
Lista OperaTor
Jos vaadittu arvo lรถytyy mรครคritellystรค listasta, se palauttaa arvon 1, muuten palauttaa arvon 0. Esimerkissรค arvo 1 on muuttujassa 'a', joten se palauttaa arvon 1.
set a {1 2 3} if {1 in $a} { puts "ok" } else { puts "fail" } Output: ok
ni, jos vaadittu arvo lรถytyy mรครคritellystรค luettelosta, se palauttaa 0, muuten palauttaa 1.
Esim:-
set a {1 2 3} if {1 ni $a} { puts "ok" } else { puts "fail" } Output: fail
TCL-virtauksen ohjaus ja pรครคtรถksenteko
Ohjelman kulun muuttamiseen kรคytetรครคn erilaisia โโvuonohjaus- ja pรครคtรถksentekokomentoja. Ohjelman suoritukset alkavat aina lรคhdetiedoston ylhรครคltรค alas.
Jos lauseke koostuu Boolen lausekkeesta, jota seuraa yksi tai useampi lause.
Jos โฆ -lauseke
Syntaksi:-
jos expr ?niin? kehon
jos expr arvioidaan tosi, niin komentokappale suoritetaan.
Esim:-
set age 10 if {$age < 20} { puts "Age is less than 20" } Output: Age is less than 20
Jos โฆ muuten -lauseke
Syntaksi :-
Jos ilmaisu ? sitten body_1 muu body_2
Jos lausekkeen arvo on tosi, se palauttaa body_1, muuten se palauttaa body_2
Esim:-
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
Sisรคkkรคinen if..else lauseke
Se tarkoittaa yhtรค if tai else..if -lauseketta voidaan laittaa toiseen if tai else..if -lauseeseen.
Syntaksi:-
If {expression_1} { Body_1 If {expression_2} { Body_2 } }
Esim:-
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
Vaihda lausunto
Switch-kรคsky mahdollistaa muuttujan tasa-arvon testaamisen arvoluetteloa vastaan. Se arvioi arvoluettelon ja palauttaa arvioinnin tuloksen. Jos arvot eivรคt tรคsmรครค, palautetaan oletusarvot.
esimerkki:
#!/usr/bin/tclsh # switch_cmd.tcl set domain x switch $domain { x { puts "x" } y { puts "y" } z { puts "z" } default { puts "unknown" } }
Sisรคkkรคinen kytkin
Sisรคkkรคinen kytkinlause tarkoittaa kytkinkรคskyn sisรคllรค olevaa kytkinlausetta.
Syntaksi :-
switch <switchingstring1> { <matchstring1> { body1 switch <switchingstring2> { <matchstring2> { body2 } ... switch <switchingstringN> { <matchStringN> { bodyN } } }
esimerkkiSeuraavassa esimerkissรค a:n arvo on 100, ja samalla koodilla vaihdamme lausekkeen toiseen b:n arvoon, joka on 200. Tulos nรคyttรครค sekรค a:n ettรค b:n arvon.
#!/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" } } } }
Lรคhtรถ: -
A:n arvo on 100
B:n arvo on 200
TCL Loop -lause
Silmukkalauseke mahdollistaa lausekkeen tai lausekkeiden ryhmรคn suorittamisen useita kertoja. Tcl tarjoaa seuraavanlaisia โโloo-lauseitaping lausuma.
Vaikka komento
Kun annettu ehto on tosi, lause tai lauseryhmรค toistaa, jotka ovat silmukan rungossa.
Syntaksi:
While {condition} {
Statements
}
Esim:-
#!/usr/bin/tclsh Set a 10 While {$a < 12} { Puts "a is $a" incr a }
Lรคhtรถ: -
a on 10
a on 11
Yllรค olevassa esimerkissรค kรคytetรครคn sisรครคnrakennettua komentoa โincrโ. Se tarkoittaa, ettรค 'a':n arvoa kasvatetaan yhdellรค, kunnes se saavuttaa maksimiarvon (<12).
Komentoa varten
Se suorittaa lausekkeiden sarjan useita kertoja laskurin arvon perusteella. Laskuriarvoa suurennetaan tai pienennetรครคn automaattisesti silmukan jokaisen toiston aikana.
Syntaksi :-
For {start} {test} {next} {
Body
}
esimerkkiAlla olevassa esimerkissรค 'i':n arvoksi asetetaan 0 ja sitรค kasvatetaan, kunnes arvo on < 5.
#!/usr/bin/tclsh for {set i 0} {$i < 5} {incr i} { put $i }
Lรคhtรถ: -
0 1 2 3 4

