Langage tcl › Les fichiers et Tcl

Voici comment réaliser des actions sur les fichiers :

Copier un fichier

Pour copier un fichier :

file copy /monfichier /monrepertoiredestination

file copy /home/user/monfichier
/home/user/

(j'ai mis le texte sur 2 lignes pour plus de lisibilité, mais il ne s'agit que d'une ligne)

Copier des fichiers

Pour copier plusieurs fichiers :

file copy fichier1 fichier2 fichier3 /madestination

file copy file1.txt 
file2.txt /home/user/

Effacer un fichier

Pour effacer un fichier :

file delete file1.txt

Effacer plusieurs fichiers

Pour effacer plusieurs fichiers :

file delete file1.txt file2.txt

Tester si un fichier existe

Pour savoir si un fichier existe :

set bob [file exist file1.txt]

$bob = 1 : le fichier est présent

$bob = 0 : Le fichier est absent

Tester si exécutable

Pour savoir si un fichier est un exécutable :

set bob [file executable file1.txt]

$bob = 1 : le fichier est un éxécutable

$bob = 0 : Le fichier n'est pas exécutable

Connaitre l'extention du fichier

Pour connaitre l'extention d'un fichier :

set bob [file extension file1.txt]

renverra :

txt

Savoir si un chemin pointe un répertoire

Pour savoir si un chemin est un répertoire :

set bob [file isdirectory file1.txt]

$bob = 1 : C'est un répertoire

$bob = 0 : Ce n'est pas un répertoire

Savoir si un chemin pointe vers un fichier

Pour savori si un chemin pointe vers un fichier :

set bob [file isfile file1.txt]

$bob = 1 : C'est un fichier

$bob = 0 : Ce n'est pas un fichier.

Créer un répertoire

Pour créer un répertoire :

file mkdir /home/user/hello

créera le répertoire hello

Renommer un fichier

Pour renommer un fichier ou un répertoire :

file rename /home/user/file1.txt 
/home/user.file2.txt

Connaître la taille d'un fichier ou répertoire

Pour connaître la taille d'un fichier ou répertoire :

file size /home/user/bobi.txt

renverra 10000 bytes

.

Voici comment travailler avec le contenu des fichiers :

Ouvrir un fichier texte

Pour ouvrir un fichier texte et le stocker dans une variable (file_data par exemple)

set fp [open "chemindufichier" r]
set file_data [read $fp]
close $fp

Les données texte seront stockés dans la variable $file_data

Séparer chaque ligne du fichier texte ainsi ouvert.

Le fichier ainsi ouvert nous pouvons traiter chaque ligne dans une boucle forearch comme ceci :

set data [split $file_data "\n"]
foreach line $data {
     # traite chaque ligne...
}

 

ENREGISTRER UN FICHIER TEXTE

La sauvegarde s'effectue ainsi:

  • Ouvrir le fichier en écriture
  • Ecrire dans le fichier
  • Fermer le fichier

voici un exemple

set monfichier [open "lechemin/fichier.txt" "w"] 
% puts $monfichier $montexte
% close $monfichier

.

 

extraire le nom d'un fichier depuis un chemin complet

Soit par exemple le chemin complet d'un fichier sous la forme :

/home/utilisateur/hier/demain/afaire/monfichier.txt

pour ne récupérer que le nom du fichier il suffit de séparer la chaine avec le caractère / puis de créer une liste.

Enfin; il suffit de trouver le dernier élément de la liste. Voici le code :

set machaine "/home/utilisateur/hier/demain/afaire/monfichier.txt"
set maliste [ split $machaine "/" ]
set lefichier [lindex $maliste [ expr [ llength $maliste ] -1  ]]

Vous l'aurez certainement compris pour la dernière ligne, pour trouver l'index du dernier item de la liste il faut calculer la longueur de la liste maliste moins un (car la liste commence par 0)

Enfin, j'utilise la commande expr car on ne peut calculer la somme d'une chaine de caractères, il faut dire à tcl qu'il s'agit d'entiers.