Problèmes avec les tokens

Résolu
Signaler
Messages postés
78
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
14 juillet 2006
-
Messages postés
78
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
14 juillet 2006
-
bonjour.
Est ce que quelqu'un peut me dire où est le problème dans cet alias ?

Alias Testage {
var %a test un deux
var %b TEST UN DEUX
var %c 0
while (%c != $gettok(%a,0,32)) {
inc %c
if ($istokcs($1-,$gettok(%a,%c,32),32)) {
var %adire $reptok($1-,$gettok(%a,%c,32),$gettok(%b,%c,32),32)
}
}
say %adire
}

Lorsque je fais:
//say $reptok(test un deux,test,TesT,32)
Or là, j'ai une erreure dans le
" $reptok($1-,$gettok(%a,%c,32),$gettok(%b,%c,32),32) "
Mon problème étant que j'aimerai pouvoir remplacer d'autre mots que "test".

Merci d'avance :d

12 réponses

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

Un coup tu dis que tu veux mettre en forme les pseudos, un autre coup non !
T'es normand? (ptet ben que oui, ptet ben que non)
Bon, plaisanteries mises à part, finalement tu veux juste faire un remplacement de mots par correspondance de deux variables? Genre, dans la phrase se trouve le huitième mot de la variable %a je l'échange contre le huitième mot de la variable %b?

Si oui, le principe est simple, tu vérifies pour chaque mot si il existe dans la variable %a et tu lui attribue son correspondant de la variable %b.
alias testage { var %c $0 , %adire $1-
while (%c) {
if ($findtokcs(%a,$gettok(%adire,%c,32),1,32)) %adire = $puttok(%adire,$gettok(%b,$ifmatch,32),%c,32)
dec %c
}
.msg # %adire
echo -t # ( $+ $me $+ ) %adire
}
Messages postés
78
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
14 juillet 2006

J'ai oublié une phrase dsl.
"
Lorsque je fais:
//say $reptok(test un deux,test,TesT,32)
çà fonctionne correctement et me sort ( TesT un deux )

Voilà.
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

Assigne $1- à ta variable %adire au début, ensuite remplace tous les $1- de tes identifieurs de tokens par %adire.
N'oublie pas le "=" dans la syntaxe de déclaration des vars.

Mais si tu cherches à faire du remplacement, jette un oeil à $replace et $replacecs
Messages postés
78
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
14 juillet 2006

Alias Testage {
var %adire = $1-
var %a = un deux trois
var %b = Un Deux Trois
var %c = 0
while (%c != $gettok(%adire,0,32)) {
inc %c
if ($istokcs(%adire,$gettok(%a,%c,32),32)) {
var %adiree = $reptok(%adire,$gettok(%a,%c,32),$gettok(%b,%c,32),32)
var %adire = $replace(%adire,$gettok(%a,%c,32),$gettok(%b,%c,32))
}
}
say /testage $1-
say %adire ($replace)
say %adiree ($reptok)
}
Donc voilà, j'ai essayé de tester avec un $replace comme tu m'as conseillé Nolson, a vrai dire je suis a l'aise ni avec l'un ni avec l'autre...
En fait les deux ne fonctionnent pas tout a fait comme il faudrait....
Soit ( le $reptok ) ne me sort rien si ma phrase ne contient pas de mot dans mes var de remplacement, soir le $replace ne tiens pas compte des espaces et remplace du coup testeur en TESTeur.
Cet alias "en test" sera ensuite combiner si j'y arrive a un on input pour détecter en plus les pseudos et modifier leurs mise en forme. Voilà :s
J'ai déjà posté un thème identique il y'a un bail.. mais n'ayant pas trouvé là solution ni par moi meme ni par le site j'avais un peu abandonné.
et là, je remets çà ;)

Merci a tous pour toute aide éventuelle.

CkemouA :d
Messages postés
290
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
29 février 2008

si j ai bien compris tu veux faire un $reptok d un $gettok, je te
conseille de jeter un oeil sur $puttok qui lui remplace ce que tu veux
a l endroit ou tu veux, combiné au $findtok , tu devrais t en sortir ...
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

Il faut dire avant tout que le code n'est pas génial, mais au moins tu te donnes la peine de le faire (comparé à certain(e)s qui demandent du tout cuit), donc ça me donne envie de t'aider.

"En fait les deux ne fonctionnent pas tout a fait comme il faudrait....
Soit ( le $reptok ) ne me sort rien si ma phrase ne contient pas de mot dans mes var de remplacement"

Normal, tu essaies les deux solutions en même temps et tu as bien assigné $1- à %adire mais pas à %adiree.
Ensuite tu modifies la variable %adiree à partir de %adire, et tu ne fais ton test que sur %adire donc si tu n'as aucun mot de ta liste, il ne passe pas le "if" et donc %adiree ne prend jamais de valeur.

"soir le $replace ne tiens pas compte des espaces et remplace du coup testeur en TESTeur."

Tout à fait, il faut essayer de le formater à ce qu'on recherche, car utilisé en l'état ça ne convient pas à ce que tu désires.

Maintenant que tu viens de nous en dire plus, on voit où tu veux en venir, en fait tu cherches à repérer les nicks dans les phrases que tu tapes pour leur donner un format particulier. Donc même avec la première méthode, tu aurais eu besoin de créer une liste des nicks présents sur le chan à chaque input, afin de les comparer. Imagine la lourdeur sur les gros chans. De plus si un même nick est répété deux fois dans la phrase seul le premier aurait été formaté.

Pour rester dans la méthode token, voici un exemple parmi tant d'autres de ce que tu aurais pu faire :

alias testage {
;on initialise les variables ( $0 correspond au nombre de mots dans $1- ) var %c $0 , %adire $1- , %d1 , %d2
;on boucle sur le nombre de mots
while (%c) {
;on assigne les mots un par un à une variable
%d1 = $gettok(%adire,%c,32)
;on verifie si le mot est un nick du salon
if (%d1 ison #) {
;on assigne à une nouvelle variable le nouveau format du nick
;par exemple : première lettre en majuscule et nick en gras
%d2 = $chr(2) $+ $iif($left(%d1,1) isalpha,$upper($v1),$v1) $+ $right(%d1,-1) $+ $chr(2)
;on remplace le nick sans format par le nick formaté
%adire = $puttok(%adire,%d2,%c,32)
}
dec %c
}
;on envoie le message (mettre %adire pour envoyer avec formatage de nick ou $1- pour envoyer sans formatage)
.msg # %adire
;on retourne en echo la nouvelle phrase formatée
echo -t # ( $+ $me $+ ) %adire
}

A utiliser dans l'input, et ne pas oublier de haltdef. Le formatage du nick s'effectue dans la ligne bleue.
Quand le sens d'évolution de la variable de la boucle n'a pas d'importance (ce n'est pas toujours le cas), il vaut mieux décrémenter cette dernière, c'est plus lisible.
Voila le principe de base, à toi de le mettre à ta sauce.
Messages postés
78
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
14 juillet 2006

Coucou.
Petite précision, j'ai du mal m'exprimer.
Cet alias doit servir (et non, çà marche toujours pas lol) à remplacer un(des) mot(s) ( Précisé(s) au préalable dans une variable ) dans une phrase, non pas les pseudos.

Je suis donc en train de tester la solution de Huitre.
Pour ce qui est de ta solution Nolson, qui fonctionne, j'ai juste deux petite questions:
L'identifiant $v1 il équivaut a quoi ?
et ensuite.
Lorsque je teste une phrase comprenant un pseudo, çà me supprime sa première lettre( au pseudo )
Je ne sais pas si çà vient de moi ou pas :)
" Coucou CrEsuS devient . |10:29:34| (CrEsUs) Coucou rEsUs "
A par avoir enlver les commentaires pour y voir plus clair je n'ai touché a rien.
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

Tu avais dit que cet alias servirait à detecter les pseudos et changer leurs mises en forme ;-)
Mais c'est pas grave, y a pas de problème. Il suffit d'adapter le code à ce que tu désires.

if (%d1 ison #) repère le pseudo afin de changer sa mise en forme ensuite. Si tu veux repérer un mot quelconque contenu dans une variable il suffit que tu la remplaces par if (%d1 isin %VariableContenantLesMots)

Je suppose que tu n'as pas la version 6.16 de mIRC. $v1 est un nouvel identifieur équivalent à $ifmatch. Tu peux donc le remplacer par $ifmatch.
Donc c'est normal que tu n'aies pas la première lettre car cette identifieur n'existe pas dans ta version de mIRC.

Dans tous les cas à toi d'adapter la mise en forme du mot (variable %d2) et du retour en echo à ce que tu recherches.
Bonne continuation.
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

Je viens de m'apercevoir que "le test contrôlant que le premier caractère est une lettre afin de la mettre en majuscule" est inutile. $upper retournera de toute façon le caractère tel qu'il est si ce n'est pas une lettre. Donc pas besoin de t'embêter avec le $iif.

%d2 = $chr(2) $+ $iif($left(%d1,1) isalpha,$upper($v1),$v1) $+ $right(%d1,-1) $+ $chr(2)
devient :
%d2 = $chr(2) $+ $upper($left(%d1,1)) $+ $right(%d1,-1) $+ $chr(2)
Messages postés
216
Date d'inscription
mardi 7 novembre 2000
Statut
Membre
Dernière intervention
16 mars 2006

Oups, une petite ânerie, au niveau du repérage :
Ne pas mettre if (%d1 isin %VariableContenantLesMots) qui captera même les portions de mots (ce n'est pas ce que tu veux) mais if ($istokcs(%VariableContenantLesMots,%d1,32)) qui verifiera uniquement les mots entiers.
Messages postés
78
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
14 juillet 2006

Cocuou.
Merci Nolson, l'alias marche bien,
Par contre ce qui m'embete un peu, c'est que là,
on s'est un peu écarté du sujet de départ.
Mon problème reside bien dans le principe de remplacer un mot
d'une variable par un autre, en prenant bien en compte les espaces
dans la phrase de départ d'où mes
> var %a test un deux , var %b TEST UN DEUX <
du début, pour ne pas modifer un pseudo.
J'ai encore essayer avec ton alias de faire un
$istok(%adire,%?,32) ( qui fonctionne )
mais je me retrouve encore bloquer par le $replace ou $reptok.

CkemouA :D
Messages postés
78
Date d'inscription
vendredi 8 août 2003
Statut
Membre
Dernière intervention
14 juillet 2006

Mdr.
1: Je suis pas Normand ... Je crois pas ^^
2: "Un coup tu dis que tu veux mettre en forme les pseudos, un autre coup non !"
C'est vrai que j'ai dis beaucoup de choses, mais le but original ... bin euh ..
je te rassure, à était atteind :D

Serieux euh... Merci ( Avec un Grand M )
J'ai combiner les deux conditions (Allé j'm'y remet)
"1: Détecte un mot dans une var pour le remplacer.
"2: Détecte un pseudo et change sa mise en forme.
Et tout fonctionne !
Par curiosité, j'ai regardé mes messages postés sur ce Forum et ...
en date du:
09/03/2004
on peut trouver: > aide $replace et $gettok posté par Moi même :)
ce qui veut bien dire qu'il faut pas etre préssé, ce qui n'est pas mon cas lol.
donc vali valou... Merci encore et bonne continuation au forum ;)