LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007
-
28 juin 2006 à 20:59
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 2010
-
16 juil. 2006 à 20:11
Bonjour,
J'ai un script qui se présente comme ceci, il me sert a lister le contenu d'un répertoire dans un fichier txt. Seulement, tester le et vous verrez que qd je fais /list.a.dir , tout desuite une fenetre se lance pour me dire quel répertoire je veux lister. Je voudrais qu'il ne me demande pas quel repertoire je veux lister, mais que par défaut, il list le e:\ avec un depth 1, ainsi, qu'il liste que les dossier a la racine de ce lecteur local et qu'il enregistre aussi le txt automatiquement dans le c:\list.txt et qu'il ne me demande pas quel nom je veux donner a ce txt. Merci de m'éclaircir les idées la dessus, je ne sais pas trop ce qu'il faut changer, et j'avoue que j'nai pas trop envie de m'aventurer la dedans, et de tout faire foirer. Merci d'avance, je ne pense pas que ca soit si difficile. Merci d'avance.
Bien cordialement
Bonne soirée
alias list.a.dir {
var %file = $file="Save List As..." C:\list.txt
%file = " $+ %file $+ "
write -c %file
var %dir = $sdir="Select directory to list. Click cancel when no more dir to add."
%dir = " $+ %dir $+ "
%depth = 0
while ( %depth != 1 && %depth != 2 ) { %depth = $$?="Enter the depth of search(1 or 2). Note that only the folders to the specified depth will be listed." }
while ( %dir != $null ) {
if ( %depth == 1 ) { echo 4 Number of Folders Listed: $finddir(%dir,*,0,%depth,write %file $nopath($1-)) }
else { echo 4 Number of Folders Listed: $finddir(%dir,*,0,1, echo 4 $finddir($1-,*,0,1, write %file $nopath($longfn($1)) ).shortfn ).shortfn }
%dir = $sdir="Select directory to list. Click cancel when no more dir to add."
%dir = " $+ %dir $+ "
%depth = 0
while ( %depth != 1 && %depth != 2 ) { %depth = $$?="Enter the depth of search(1 or 2). Note that only the folders to the specified depth will be listed." }
}
}
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 29 juin 2006 à 00:24
Bonsoir,
Je ne vois pas trop comment utiliser cette commande. ELle s'y trouve deja en plus.
Je viens de modifier quelques petites choses. Enfin surtout supprimer des lignes. Je me retrouve avec ceci, quasiement ce que j'aimeris avoir, ca ne me demande plus quel répertoire lister, par defaut c'est e:\ et ca ne me demande plus quel depth egalement puisque je l'ai mis a 1. Mais la gros probleme, ca ne s'arrete pas, ca ne cesse de lister, lister, lister .... ou ets le probleme ? quelqu'un peut m'expliquer ?
alias list.a.dir {
var %file = C:\list.txt
%file = " $+ %file $+ "
write -c %file
%dir = " e:\ $+ "
%depth = 1
while ( %dir != $null ) {
if ( %depth == 1 ) { echo 4 Number of Folders Listed: $finddir(%dir,*,0,%depth,write %file $nopath($1-)) }
).shortfn ).shortfn }
}
}
fjxokt
Messages postés840Date d'inscriptionvendredi 28 janvier 2005StatutMembreDernière intervention25 février 20091 29 juin 2006 à 02:10
Ce qu'il faut savoir, c'est qu'un $findfile effectue une boucle.
De plus ta boucle while ( %dir != $null ) { est fausse car comme ta variable dir ne changera jamais pendant l'execution de la boucle, celle-ci devient infinie.
ton code devient (simplifié)
alias list.a.dir noop $findfile(e:\,*.*,0,1,write list.txt $1-)
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 29 juin 2006 à 09:26
Re bonjour,
Maintenant j'aurais voulu améliorer mon code, et faire en sorte qu'une fois cette liste crée, au bout de 5s, copier la ligne 1 du txt dans var %line et echo @Test %line . Pour copier la ligne 1, comment faire ?
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 29 juin 2006 à 19:06
Bonsoir,
Je viens de tester a l'instant le morceau de code en rentrant, et je me rend compte qu'il y a un probleme.
alias list.a.dir {
noop $findfile(e:\,*.*,0,1,write list.txt $1-)
timer 1 5 copy.line
} <- ceci ne crée pas de list.txt, je ne sais pas trop d'ou vient le pb.
J'ai l'impression qu'il y a un pb, merci d'avance de me dire si chez vous ca fonctionne bien
Bien cordialement.
Bonne soirée
fjxokt
Messages postés840Date d'inscriptionvendredi 28 janvier 2005StatutMembreDernière intervention25 février 20091 29 juin 2006 à 19:43
J'ai essayé le code (avec c:\ car je n'ai pas de e:\) et ça fonctionne correctement.
Si ton fichier n'est pas crée, c'est que le findfile ne trouve rien.
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 29 juin 2006 à 20:00
Bonsoir,
Je viens de comprendre pourquoi, en fait, la cette partie de code, ne liste que les fichiers et pas les dossiers. Comme je n'ai pas de fichier seul a la base de mon e:\, il n'y a rien normal. En fait, j'aimerais qu'il fasse l'inverse, qu'il ne liste que les dossiers et non les fichiers. Je viens de tester $finddir mais ca ne marche pas. Est ce l'identifieur qui convient ?
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 29 juin 2006 à 23:35
Bonsoir,
Merci fjxokt, enfin ca marche :) Je sais, ca doit vous apraitre simple, mais je suis débutant ;)
Euh, je viens de faire une petite modif
alias fdir noop $finddir(e:\,*.*,0,1,write list.txt $right($1-,-3)) <- n'y a t'il pas un autre moyen que $right($1-,-3) pour enlever le e:\au début de chaque ligne dans le list.txt ?
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 30 juin 2006 à 09:10
Bonjour,
D'accord, si c'est la meilleure solution, laissons comme ceci.
Donc pour l'instant, tout marche comme je le désire, le script, liste bien tous les dossiers du disque local e:\ , les inscrit dans un fichier list.txt, copie la premiere ligne du txt et echo dans la fenetre @Test .
Le script se présente de cette façon :
alias copy.line {
var %line $read(list.txt,1)
echo @test %line
}
Mais je voudrais modifier quelques petites choses, au lieu de echo @Test %line, je veux
/say #channel !verify %line
Et ensuite, si le bot " Nutella says : " %line allowed " then echo @Test %line is allowed .
Mais je ne sais pas trop comment présenter la ligne if Nutella ...
Merci de bien vouloir m'éclaircir les idées, bien cordialement.
fjxokt
Messages postés840Date d'inscriptionvendredi 28 janvier 2005StatutMembreDernière intervention25 février 20091 30 juin 2006 à 10:58
tu dois, puisque c'est un bot qui te dit si ta ligne est "allowed", te servir de l'event on text.
Par contre il faudra plutot stocker le %liune dans une variable globale.
alias copy.line {
var %line $read(list.txt,1)
/msg #channel !test %line
}
on *:TEXT:*:#channel:{
if ( $nick == Nutella ) {
if ( allowed isin $2 ) {
echo $active %line " je fais ce test d'echo pour voir
si %line est pris en compte, mais je me rend compte que ca n'echo rien
a chaque fois, comme si %line est vide :x "
/var %dossier $strip($1, burc)
if ( %line == %dossier ) {
echo @Test %line is good
}
}
}
A chaque fois ca me dis que %line is good, meme si ca ne l'est pas, merci de me dire ce qui est bon. Bien cordialement.
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 3 juil. 2006 à 21:29
Bonsoir,
Merci, ca marche deja mieux avec le set %line au lieu de var %line ;-)
Néanmoins, je ne comprends pas a quoi sert, tokenize, et faut t'il le mettre a la place /var %dossier $strip($1, burc) ?
Je ne comprends pas trop a quoi ca sert, ou le placer et le résultat que ca donne.
Je voudrais encore améliorer mon script. Ca a vérifier pour la ligne 1 du txt, maintenant il faudrait faire ligne 2, ligne 3 ... etc jusqu'a la fin. Je ne sais pas trop si c'est techniquement faisable. Merci de me dire si c jouable ou pas.
cs_wims
Messages postés2466Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention 1 août 20101 3 juil. 2006 à 22:28
Le tokenize sert a remplir les parametres $* :
/tokenize 32 1 2 3ici, $1 1, $2 2 et $3 = 3 et 32 est utilisé pour separé les different $* par un espace
Pour lire tout le fichier il suffit de faire une boucle mais pour ne pas excess flood tu devrais faire comme ca :
LOLESKE88
Messages postés70Date d'inscriptiondimanche 18 décembre 2005StatutMembreDernière intervention25 février 2007 4 juil. 2006 à 17:13
Bonjour,
Tout d'abord, merci wims et fjxokt pour votre aide. wims, ton code est nikel, ca play bien sur le channel que je veux. Enfin, j'ai configuré cette ligne comme je le souhaitais en spécifiant le bon channel : .timer 1 1 play # list.txt
Ca marche nikel.Un truc que je voudrais faire, c'est que si $1 une ligne qui est dans channel.txt, seulement si et non pas si ==. je veux bien spéficier que les majuscules soit respectés, alors delete cette ligne dans le list.txt . J'avais fais quelque chose comme ceci,
if ( %line === %dossier ) { mais dans votre code, vous n'utilisez plus %line
Comment faire ceci ?