Merci pour vos réponses. J'ai essayé d'appliquer ce que vous m'avez donné comme exemple pour lire les 20 dernières lignes d'un fichier txt et çà fonctionne nickel.
Le seul soucis que j'ai maintenant, c'est quand je voulais utiliser cette méthode pour limiter des résultats que le bot m’envoie en notice quant il me répond à une commande X.
Voici donc le code que je veux modifier afin de limiter l'affichage des 20 dernières résultats trouvées dans un fichier txt.
Exemple:
Code :
[14:10:24] <~Owner> !connect Qqun
[14:10:24] <Notice> de Chorus ..:Liste des connexions:..
[14:10:24] <Notice> de Chorus 1 --> Qqun *.107.*.248 18/10/2011 19:43:33
...
[14:10:24] <Notice> de Chorus 20 --> Qqun *.28.*.199 18/12/2011 21:28:13
TCL
tcl
bind pub - !connect connects
proc connects { nick host handle channel arg }{global connects vhostnivconnect salonconnect connects
foreach salonst $salonconnect{if{[string equal -nocase $salonst$channel]}{foreach vhost $vhostnivconnect{if[string match -nocase $vhost$host]{if{$arg == ""}{
putquick "NOTICE $nick :\00312- \0031Syntax \0036!connect pseudo/IP \00312-"return0}
putquick "NOTICE $nick :\0033..:Liste des connexions:.."catch{open"connect.txt""r"} connexion
set num 0set verif [split[read -nonewline $connexion]"\n"]set verif [lrange$verif end-20 end]while{![eof$connexion]}{gets$connexion verif
if{$verif ne ""&&[string match -nocase *$arg*$verif]}{incr num 1;
putquick "NOTICE $nick :\0034 $num -->\0033 [lrange $verif end-20 end] \r"}}catch{close$connexion}if{$num eq "0"}{putquick "NOTICE $nick :\0034Aucune connexion dans la base de donnée ! \r; return 0"}
putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))";return0}}}}
23/09/2012, 18:34 (Modification du message : 23/09/2012, 19:24 par CrazyCat.)
Effectivement, tu as un souci de conception: tu remplis $verif avec les 20 dernières lignes de ton fichiers, mais ensuite tu boucles sur ton fichier, donc tu vas avoir toutes les lignes qui matchent le contenu des 20 dernières lignes (???)...
Voici quelque chose qui me semble plus cohérent:
tcl
bind pub - !connect connects
proc connects { nick host handle channel arg }{global connects vhostnivconnect salonconnect connects
foreach salonst $salonconnect{if{[string equal -nocase $salonst$channel]}{foreach vhost $vhostnivconnect{if[string match -nocase $vhost$host]{if{$arg == ""}{
putquick "NOTICE $nick :\00312- \0031Syntax \0036!connect pseudo/IP \00312-"return0}
putquick "NOTICE $nick :\0033..:Liste des connexions:.."catch{open"connect.txt""r"} connexion
set res {}while{![eof$connexion]}{gets$connexion verif
if{$verif ne ""&&[string match -nocase *$arg*$verif]}{lappend res $verif}}catch{close$connexion}if{[llength$res] == 0}{
putquick "NOTICE $nick :\0034Aucune connexion dans la base de données !"return0}elseif{[llength$res]>=20}{set res [lrange$res end-20 end]}set num 0foreach line $res{incr num
putquick "NOTICE $nick :\0034 $num -->\0033$line"}
putquick "NOTICE $nick :\0033Fin de la Liste (\0034 $num \0033connexion(s) enregistré(s))"}}}}}