Dectecter plusieurs réponses

Signaler
Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005
-
Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005
-
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

Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

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
Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005

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
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

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
Messages postés
266
Date d'inscription
vendredi 8 juillet 2005
Statut
Membre
Dernière intervention
26 juin 2008

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 :
Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005

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
++
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
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 :]



Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005

merci wims ;) comme sa c'est plus compréhensible, je t'en remercie...
++
Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005

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é...
++
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

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.
Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005

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
Messages postés
1287
Date d'inscription
mercredi 21 avril 2004
Statut
Membre
Dernière intervention
21 février 2009

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
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

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.
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
ah ouais mais je partais sur le principe que yavais qu'un seul fichier

dsl :)
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

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.
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

Wims mon code s applique aussi bien a 1 ou plusieurs fichiers =)
Messages postés
2466
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
1 août 2010
1
Effectivement , j'avais vraiment mal lu :(
Messages postés
25
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
4 décembre 2005

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 :)