Communauté sur les Eggdrops - Community about Eggdrops
[Demande] Modification d'une ligne précise d'un fichier - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: [Demande] Modification d'une ligne précise d'un fichier (/showthread.php?tid=1452)



Modification d'une ligne précise d'un fichier - loulou7593 - 29/10/2013

Bonsoir,

Je voulais savoir car je sais comment ecrire dans un fichier etc ....
Mais je ne sais pas comment remplacer une ligne précise, soit par son numéro de ligne, soit en detectant un mot qui figure sur cette ligne.

J'explique : j'ai un script de blagues qui peut envoyer les blagues toutes les X minutes mais qu'il faut regler dans le fichier.tcl.

Je voulais par exemple creer une commande avec un bind pub que quand je tape !addtemps X ( X etant un chiffre en minute ) ca me remplace dans le fichier blagues.tcl la ligne


tcl
# Intervalle en minutes pour afficher une blague au hasard.
	# Valeur par défaut : 120
	variable temps_interval 5


Pour le moment je l'ai reglé à 5 minutes, mais par la suite pouvoir la modifier en tapant sur le chan !addtemps 10 et que ca change dans le fichier le 5 en 10.

Si quelqu'un avait une idée, je suis preneur.
Merci d'avance.


RE: Modification d'une ligne précise d'un fichier - CrazyCat - 29/10/2013

Bon, si c'est pour modifier une configuration (ce qui semble le cas), tu ne vas pas aller modifier le tcl lui-même. D'autant plus que ça n'aura aucun effet tant que le tcl ne sera pas rechargé. Donc il faut passer par un fichier de paramètrages séparé ou par une modification de la variable si c'est temporaire.

Sinon, si tu persistes à vouloir modifier la source, il faut lire chaque ligne du fichier et modifier celle que tu veux puis ré-enregistrer.


RE: Modification d'une ligne précise d'un fichier - loulou7593 - 29/10/2013

Justement la phrase à changer qui concerne le temps de lancement des blagues se situe dans le .tcl lui meme

j'ai bien trouvé ca sur le wiki

tcl
proc getLine { fichier num } {
   set fi [open "monfichier.txt" r]
   set cpt 0
   while {[eof $fi] != 1 } {
      incr cpt
      set line [gets $fi]
      if { $cpt == $num } {
         putlog $line
      }
   }
   close $fi
}


Mais c'est apres je ne sais pas comment faire pour detecter la ligne concernée et la modifier puis ré-enregistrer. J'ai pas encore trouvé ca.


RE: Modification d'une ligne précise d'un fichier - CrazyCat - 29/10/2013

Mais tu as lu ce que j'ai écris ?
Modifier la ligne dans le script ne changera rien tant que le script ne sera pas rechargé.

Imaginons que le namespace de ton tcl de blagues s'appelle "blague", il est bien plus simple de faire un script qui va juste faire:

tcl
set ::blague::temps_interval $valeur

Et au moins c'est immédiatement pris en compte et tu ne risques pas d'exploser le tcl d'origine.


RE: Modification d'une ligne précise d'un fichier - loulou7593 - 30/10/2013

Si si j'ai bien lu ce que tu as écrit. Que si je modifie la ligne dans le tcl ca ne changera rien si il n'y pas de rehash.

Je posais juste la question quand meme pour savoir si il y avait un moyen de faire comme je le voulais.

Apres je me doute qu'il doit y avoir d'autres façon, mais moi et le codage et certaines mises en forme que j'ai un peu de mal. Mais bon tant pis ca viendra bien à force. Ou pas.