Style de page


phpMyVisites | Open source web analytics phpMyVisites


Bases de Tcl

Les variables:

En Tcl toute variable est une chaîne. Pour affecter un variable on utilise l'instruction set:

  % set a 2 
  2 
Si la variable n'existai pas, elle est crée lors de la première affectation.

Pour afficher un message on utilise la commande puts:
  %puts Salut
  Salut 
  
  %puts Bonjour yves
  can not find channel named "Bonjour"
Pour pouvoir insérer des espaces dans une chaîne il faut la mettre entre guillemets:
  %puts "Bonjour yves"
  Bonjour yves
  

Pour afficher le contenu d'une variable:
  % puts $a 
  2 
  %puts "La valeur de a est:$a" 
  La valeur de a est:2 
Le caractère $ placé devant le nom d'une variable indique à l'interpréteur de la remplacer par son contenu.

Pour tester l'existence d'une variable:
if {info exists a} {
  puts "La variable a vaud:$a"
} else {
	puts "La variable a n'existe pas"
}
	
Pour détruire une variable:
unset a

Les expressions mathématiques:


Pour évaluer les expressions mathématique on utilise la commande expr:
  % expr 3 + 4
  7 
  % expr 2 + 3*4
  14
  
Par défaut la division de deux entiers donne un résultat entier:
  % expr 5/2
  2
Pour obtenir un résultat décimal, il faud qu'au moins l'un des chiffres soit décimal:
  % expr 5.0/2
  2.5
ou
  % expr 5/2.0
  2.5

Les listes:

Une chaîne de caractère peut être considéré comme une liste ou les espaces servent de séparateurs:

  % set liste "zero un deux trois quatre cinq"
  zero un deux trois quatre cinq
Longueur d'une liste:
  % llength $liste 
  6 

Accès à un élément de la liste:
  %lindex $liste 3 
  trois 
Vous remarquerez que le premier élément d'une liste a pour index 0.

Parcourir une liste:
  %foreach mot $liste { 
      puts $mot 
    } 
  zero
  un
  deux
  trois
  quatre
  cinq
  

Les tableaux en tcl


Tcl permet de créer des tableaux associatifs:
 %set album(titre)  "A Bigger Bang"
A Bigger Bang

Un tableau peut avoir plusieurs dimensions:
 %set album(1,titre) "Rough Justice"
Rough Justice
  
On ne peut pas affecter de valeur à une variable de type tableau:
% set album 1
can't set "album": variable is array

Structures conditionelles

 % set a 1 
 % if {$a > 0} { 
    puts "a est positif"
 } else { ;# le else doit être sur la même ligne que l'accolade fermante
    puts "a est négatif"
 }
Attention ! on ne peut insérer des saut de ligne qu'entre les accolades:
 % if {$a > 0} 
{ 
    puts "a est positif"
 } 
Ceci provoquera une erreur.

Boucle for

 % for {set i 0} {$i<10} {incr i} { 
    puts $i 
 }
 

Boucle while

 % set i 0
 % while {$i<10} {
   puts $i
   incr i  
 }
 

Switch

 % set a 3
 switch $a {
 	1 { puts un }
	2 { puts deux }
	3 { puts trois }
	4 { puts quatre }
	default { puts "erreur" }
 }
 
 

Accès aux fichiers:

L'ouverture d'un fichier se fait par la commande open:
 set id [open $nom_fichier "r"]
 
Options d'ouverture: Pour lire le fichier ligne par ligne, on utilise la commande gets:
gets $id ligne
 
écriture:
 puts $id "une ligne"
Fermeture du fichier:
 close $id
 
Vérifier l'existence d'un fichier:
 if { [file exists $monfichier]} {
  puts "$monfichier existe"
 } else {
  puts "Fichier introuvable:\n $monfichier" 
 }
 

Les procédures :

Synthaxe:
proc nom_de_procedure { argument1 argument2 ... } {
 
 	return 1
 }
 

Les expression régulières:

La commande regsub permet de rechercher des expression régulières dans une chaîne de caractère.
Exemple:
	set chaine1 "les expressions régulières"
	regsub -all " " $chaine1 "_" chaine2
	
Remplace tous les espaces de la chaîne chaine1 par des _ et sauvegarde le résultat dans la variable chaine2.


Longueur d'une chaîne:
	%set chaine "Bonjour"
Bonjour	
	%puts [string length $chaine]
7
	

Interfaçage entre tcl/tk et C:


Il est possible de réaliser des programmes mèlant à la fois le C (ou le C++) avec le tcl/tk. Vous pouvez en trouver un exemple dans le jeu de puissance 4 que j'ai écrit ici.

Le lancement d'un script tcl/tk, à partir d'un programme C, se fait de la manière suivante:

Il faut inclure tcl.h et tk.h:
#include <tcl.h>
#include <tk.h>

Tcl_Main(int  , char ** , init_Tcl);

avec   init_Tcl  de type:
int init_Tcl(Tcl_Interp *interp) 
{
// Initialisation TCL:
  if (Tcl_Init(interp) != TCL_OK) {
	 fprintf(stderr, "Tcl_Init failed: %s\n", interp->result);
	 return TCL_ERROR;
  }
  // Initialisation TK:
  if (Tk_Init(interp) != TCL_OK) {
	fprintf(stderr, "Tk_Init failed: %s\n", interp->result);
	return TCL_ERROR;
  }
}
 
Pour permettre l'appel de procédures C à partir du script tcl:
  Tcl_CreateCommand(interp, str_nom_proc_tcl, nom_proc_C , (ClientData) 0,NULL);

On peut également, à partir du programme C, accéder en écriture à une variable du script tcl par la fonction Set_Var(...).


Haut