[Précédent (date)] [Suivant (date)] [Précédent (sujet)] [Suivant (sujet)] [Index par date] [Index par sujet]
Re: ecrire dans un fichier avec un script TCL
- To:
- Subject: Re: ecrire dans un fichier avec un script TCL
- From: Gael <>
- Date: Mon, 19 Mar 2001 12:31:58 -0500 (EST)
-
In-reply-to: <[email protected]>
Tcl ne sait pas ecrire dans les fichiers il ne sait qu'ecrire dans un canal.de plus il ne dispose que de 3 operateurs sur les flux : read gets (lecture) puts (ecriture)
ce qu'il est possible par contre c'est de
1)charger l'integralite du fichier et d'ecrire a la position souhaitee puis de reecrire sur le fichier ( cas pour un fichier pas trop important ).
ex :
#chargement de la totalite du fichier
set fid [open $nomfichier r]
set donnees [read $fid]
close $fid
#deplacement au point voulu
set p $position-debut
# attention aux espaces
set f [expr $p + [string length $ajout]]
set donnees "[string range $donnee 0 $p]$ajout[string range $donnee $f end]"
#peut etre utilise plusieurs fois
#ecrasement de l'ancienne version du fichier
set fid [open $nomfichier w]
puts $fid $donnee
2)utilisation d'un fichier temporaire
et traiter ligne par ligne on ne traitera que le point voulu
on recopiera le fichier temporaire sur le fichier
ex :
set tmp [open tempfile.tmp w]
set fid [open $nomfichier r]
set p $position-debut
set i 0 # compteur de position
#tant qu'il reste des donnes dans le fichier
while {[gets $fid line] >= 0} {
set lens [string length $line]
if {$i <= $p && [expr $i + $lens] >= $p} {
set f [expr $p - $i + [string length $ajout]]
#on alterera la ligne
set line "[string range $line 0 [expr $p - $i]]$ajout[string range $line $f end]"
}
#on ecrit dans le fichier temporaire
puts $tmp $line
}
close $tmp
close $fid
#on recopie le fichier temporaire sur le fichier
exec cp tempfile.tmp $nomfichier
# sous windows exec copy tempfile.tmp $nomfichier
#on supprime le fichier temporaire
exec rm tempfile.tmp
# sous windows exec del tempfile.tmp
entre [] optionnel
$fid :canal peut etre l'entree standard ou une socket ou ...
read : lit tout d'un coup ou un nombre specifie de caracteres
read $fid [$nb_caracteres]
gets : lit une ligne et eventuellement la mets dans une variable
gets $fid [$var]
puts : ecrit vers le canal par defaut la sortie standard (stdout)
-nonewline : si on ne veut pas avoir de retour a
la ligne entre 2 ecritures
puts [-nonewline][$fid] $donnees
si vous avez des questions ou si vous avez un moyen d'ecrire directement dans le fichier vous pouvewz m'ecrire a
[email protected]