Dectecter plusieurs réponses

GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005 - 12 juil. 2005 à 11:17
GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005 - 13 juil. 2005 à 17:57
salut !!!
je voudrais detecter plusieurs réponses a une seule question.
en sachant que les réponses se trouve dans un fichier.txt , j'ai essayé %reponse $read(mots.txt, s, cha) pour lire les mot commencant par "cha" , et
on *:text:*:#:{
var %text = $strip($1-)
if %text == $strip(%reponse) {
msg $chan blah blah...

pour detecter les réponses, mais sa ne marche pas :(
si vous avez des petites idées , je suis preneur
merci a bientot

17 réponses

RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
12 juil. 2005 à 12:15
le $read(.txt,s,*) marche pas chez moi, enfin ce n'est pas fiable

j'utiliserai les hash tables pour ça, avec hload -i (pour partir d'un .ini, sur la table que tu auras préalablement créé avec /hmake), et tu peux utiliser $hmatch

ton .ini :
[reponses]
chat="ce que tu veux"
char="ce que tu veux"

pour avoir les réponses avec $hmatch :
$hmatch("table",cha*,0)
te donnera 2
$hmatch("table",cha*,1) te donnera soit chat soit char
il te faudra donc une boucle pour trouver tout ce qui concorde avec ton joker
var %t =1, %max = $hmatch("table",cha*,0)
while %t <= %max {
echo -a $hmatch("table",cha*,%t)
inc %t
}

j'espère que c'est bien ça ce que tu as demandé :p
0
GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005
12 juil. 2005 à 12:52
ok merci arkanis !!! vu que je ne maitrise pas trop les hash je vais me renseigner un peu la dessu...
merci en tout cas, je teste ta solution
0
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008
12 juil. 2005 à 14:26
var %reponse = $gettok($read(question.txt,%ligne),2-,46)

var %n = $numtok(%reponse)

var %i = 1

while ( %i <= %n ) {

if ( $1- == $gettok(%reponse,%i,46) ) msg # $nick blabla !

inc %i

}



Contenu de question.txt :



combien font 1 +1 ?.2.0.3
0
S333 Messages postés 266 Date d'inscription vendredi 8 juillet 2005 Statut Membre Dernière intervention 26 juin 2008
12 juil. 2005 à 15:02
Je pense que la réponse de huitre convient, mais n'oublie pas de
rajouter $strip, mais aussi $replace (il faut remplacer les é par e
etc... pour que ton quizz soit moins exigeant ^^)


----------------------------------------------
Signature des parents :
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005
12 juil. 2005 à 16:16
merci beaucoup pour votre aide "huitre" et "s333"
mais huitre, pourais-tu m'expliquer ton code? je ne comprend pas tout !!! juste m'expliqué pourquoi tu incrémente la variable %i et oci me donner plus de précision sur la boucle while !!! (j'ai déja lu et relu le fichier /help while et goto mais je ne comprend pas tout ) donc si jamais tu as un petit temps a me consacrer , c'est sans aucune obligation bien entendu... en tout cas merci, je vais voir si ton code fonctionne dans ma remote
++
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
12 juil. 2005 à 16:35
var %reponse = $gettok($read(question.txt,$r(1,$lines(question.txt)),2-,46)

; il declare une var qui vaut tout le debut d' une ligne au pif separé par un point du fichier question.txt.

var %m $readn

; ca c le numero de la ligne de la question

var %n = $numtok(%reponse,46)

; il regarde combien de reponse sont presente ( + la question )

; et comme $gettok($read(question.txt,%m),1,46) = a la question , on
set une var directement a 2 pour pas que la question sois pris en compte

var %i = 2

declare une var a 2

while ( %i <= %n ) {

; tant que %i <= %n

if ( $1- == $gettok($read(question.txt,%m),%i,46) ) msg # $nick blabla !

on regarde si le text de celui qui a parlé est
present dans les reponse possible . si oui on dis blabla, sinon on
incremente pour voir si ce n'est pas une autre reponse possible

inc %i


J'ai rajouté des ptit oublie de huitre je crois...

J'ai pas tester mais j'pense que c'est bon :]



0
GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005
12 juil. 2005 à 17:02
merci wims ;) comme sa c'est plus compréhensible, je t'en remercie...
++
0
GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005
12 juil. 2005 à 17:16
me revoila !!!
juste pour une petite info concernant mon fichier.txt. Mes questions et mes réponses ne se situe pas dans le meme fichier... ex: question.txt pour les questions, et réponses.txt pour les réponses ( mes réponses sont en faite toute une liste de mots allant de A à Z) c'est pour faire un jeu de "mot" , en faite la question est par exemple: Trouver le plus de mots commencant par "cha" Donc les réponses peuvent être "chanter", "champ"...
voila c'était juste pour préciser ^^ parsque j'ai un doute sur la commande $lines et $readn
je vais faire des essais de mon coté...
++
0
Nolson Messages postés 216 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 16 mars 2006
12 juil. 2005 à 18:46
Soit un peu plus précis sur le format de ton fichier question. Pour ton fichier réponse, on saisi bien la manière dont il est constitué mais le fichier question on n'en sait rien. Tout est dans la manière de contrôler et récupérer les données de tes fichiers txt.
0
GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005
12 juil. 2005 à 20:48
d'accord Nolson je vais détailler...
voila commen sont sonstitué mes fichier.TXT:
questions.txt contient:

Trouver plusieurs mots commençant par cha
Trouver plusieurs mots commençant par cou
Trouver plusieurs mots finissant par re
...etc...

réponses.txt contient:

aba
acheter
...etc...
zinc

donc voila mes fichiers détaillés...
désolé de na pas avoir était plus clair auparavent
0
RCA ArKanis Messages postés 1287 Date d'inscription mercredi 21 avril 2004 Statut Membre Dernière intervention 21 février 2009
12 juil. 2005 à 21:23
toujours avec hash tables, en modifiant ton .txt légèrement :
if ($hmatch("table","la réponse que la personne a donné",0)) echo ce mot est dans la liste

ça te dira si le mot que la personne a donné est dans ta liste


il vaut mieux prendre les hash tables que de faire une boucle sur un $read tout le temps :x c'est surtout pour la rapidité de vérication
0
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008
12 juil. 2005 à 22:44
Wims, tu t es trompé dans l explication de mon code ://



var %reponse = $gettok($read(question.txt,%ligne),2-,46)

// où %ligne correspond a la ligne de la question au prealablement posée.

// %reponse contient donc toutes les reponses de cette ligne ( ex: chat.chaton.chamallow.chameau )



var %n = $numtok(%reponse)

// je stock et compte le nombre de mot séparés par un "." dans %reponse

var %i = 1

// j initialise %1

while ( %i <= %n ) {

// tant que %i (1) <= %n (nombre de reponses)

if ( $1- == $gettok(%reponse,%i,46) ) msg # $nick blabla !

// je verifie si ce qu y a etait dit ou passé en argument ($1- ) correspond a la %i réponse.

inc %i

}



Voila a toi de faire correspondre ton code et tes fichiers suivant ce morceau de code.
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
13 juil. 2005 à 00:54
ah ouais mais je partais sur le principe que yavais qu'un seul fichier

dsl :)
0
Nolson Messages postés 216 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 16 mars 2006
13 juil. 2005 à 00:54
Le principe est simple. Quand tu auras appris à gérer les hash tables, tu pourras appliquer le principe pour gagner en vitesse d'execution. Voici le principe avec tes fichiers txt :
Surtout ne pas utiliser de boucles. D'après la forme de tes fichiers :


1- Tu prends une question au hasard dans ton fichier questions.txt (à l'aide de $read) et tu la stockes dans une variable %question.
2- Cette variable contient 2 éléments importants, ceux que tu as mis en gras dans ton exemple. Donc le 4ème et le 6 ème mot. Tu stockes ces 2 critères dans 2 variables (utilise $gettok)
3- Sur un ON TEXT tu vérifies si le mot ($1) entré par le joueur correspond aux critères de ta question. Si le critère1 est "commençant" et si les x premières lettres du mot correspondent au critère2 ou si le critère1 est "finissant" et si les x dernières lettres du mot correspondent au critère2 (utilise if, &&, ||, $left, $right, $len)
4- Si le test est ok tu vérifies si le mot est dans ton fichier réponse : if ($read(reponses.txt,w,$1))
5- Si c'est ok, tu effectues l'action que tu désires.


Je viens de faire un un petit test en 2 minutes sur un fichier txt de + de 350000 mots et ça prend au maximum 5 centièmes de seconde.
0
cs_Huitre Messages postés 290 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 29 février 2008
13 juil. 2005 à 10:02
Wims mon code s applique aussi bien a 1 ou plusieurs fichiers =)
0
cs_wims Messages postés 2466 Date d'inscription vendredi 23 juillet 2004 Statut Membre Dernière intervention 1 août 2010 1
13 juil. 2005 à 16:28
Effectivement , j'avais vraiment mal lu :(
0
GeVaUdAn974 Messages postés 25 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 4 décembre 2005
13 juil. 2005 à 17:57
lol, bon je vais essayer d'en apprendre plus sur les hash table, je teste vos code pour voir si sa marche et apré normalement je n'auré pas a revenir ici...
mais on ne sais jamais, alors peut être a plus tard :)
0