Changer plusieurs mots dans un text reçu [Résolu]

Signaler
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010
-
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010
-
Bonjour,

Voila j'ai ça:

on ^*:text:*:#: {
if (mot1 isin $1-) { echo -t $chan < $+ $nick $+ > $replace($1-,$v1,mot1-corrigé) | haltdef }
elseif (mot2 isin $1-) { echo -t $chan < $+ $nick $+ > $replace($1-,$v1,mot2-corrigé) | haltdef }
}

on ^*:text:*:?: {
if (mot1 isin $1-) { echo -t $nick < $+ $nick $+ > $replace($1-,$v1,mot1-corrigé) | halt }
elseif (mot2 isin $1-) { echo -t $nick < $+ $nick $+ > $replace($1-,$v1,mot2-corrigé) | halt }
}

Mon soucis est de:
1)- pour les deux commandes si je tape ou qu'on m'envoie " mot1 mot2" cela me retourne "mot1-corrigé mot2" donc cela me corrige que le premier mot détecté et non les deux mots corrigé, comment faire pour que cela corrige les deux mots?

2)- pour le on "^*:text:*:?:" cela m'affiche ma ligne echo mais aussi celle que j'envoie en normal, comment faire pour que ça n'affiche que mon echo mais envois quand même ma ligne normal sans la correction sur le server?

Merci de votre aide,

Cordialement,

Moimdr,

26 réponses

Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
Bonjour,

Le premier souci est "normal" : tu mets un "elseif", qui veut dire "sinon si". Ensuite tu mets des "halt/haltdef" dans tes blocs, ce qui normalement interrompt le traitement. D'autre part, je ne vois pas l'intérêt de tester si le mot est présent avant de remplacer. Tu n'as qu'à lancer le remplacement, si le mot n'est pas présent ça ne fera rien, s'il est présent ça remplacera.

Pour t'en sortir, il vaudrait mieux utiliser une variable :

on ^*:text:*:#: {
var %a = $1-
%a = $replace(%a,mot1,mot1-remplacement)
%a = $replace(%a,mot2,mot2-remplacement)
;etc...
echo -t $nick < $+ $nick $+ > %a
haltdef
}

A toi d'adapter ce bout de code. Si tu as beaucoup de mots, tu peux même explorer d'autres solutions, en les stockant dans un fichier externe par exemple. 2e piste si tu as des remplacements un peu compliqués, tu peux regarder du côté de la fonction $regsub.

Pour le 2e souci, je n'ai pas fait de mIRC depuis très longtemps, mais c'est un problème classique, quelqu'un devrait arriver à te répondre.
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
4
Euh, c'est echo -t $chan et non $nick, désolé pour le copier/coller foiré.
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

Merci Pada,

J'avais bien penser aux variable mais j'ai encore du mal alors que celle ci est très simple :) , j'aurais aimer la trouver seul mais voila pas assez doué encore lol

Pour le $regsub et bien en fait c'est justement à cause de regex récalcitrant que je prend cette méthode de remplacement pour ne plus avoir des regex compliqué à faire :$
Pour les mettre en fichier oui j'y ai pensé et c'est pas prochaine étape

Pour le moment j'essaye de grouper pour le on ^*text:*:#: et on ^*:text:*:?: il faut que j'arrive à faire un on ^*:text:*:*: et différencier les les # des ? pour renvoyer mes echo suivant d'ou arrive le message, soit d'un privé soit d'un salon.

Merci encore,

MoiMdr,
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
salut

content de te revoir PADA :)

@MoiMdr: "Pour le moment j'essaye de grouper pour le on ^*text:*:#: et on ^*:text:*:?:"

tu ajoute une condition if (#) et if ($query($nick)) je pense bien (j'ai pas testé)

mais t'es pas obligé de te compliqué le codage.
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

Bonsoir worldDMT,

J'y était presque :) j'avais essayé avec if ($1- == # )
puis suis partit sur if ($chan) et ça marchait pas et là je ressaye pour pas te dire de bêtise et en fait ça marche aussi en if ($chan) donc j'en déduit que quand j'ai essayé ce midi j'ai du oublier l'espace et faire if($chan) ralalala,
par contre en cherchant je suis tombé sur $target en regardant l'aide mIRC et me suis dis Youpiiiiiii j'ai trouvé et bien non mdrrr ça marche pour le salon mais pas le privé ......

pour finir donc worldDMT j'ai fais :

on ^*:text:*:*: {
var %a = $1-
%a = $replace(%a,mot1,mot1-remplacement)
%a = $replace(%a,mot2,mot2-remplacement)
if (#) { echo -t $target < $+ $nick $+ > %a }
else { echo -t $nick < $+ $nick $+ > %a }
haltdef
}

Ensuite je viens de voir en recherchant mon on ^*:input:*: que mon premier post je me suis trompé dans mon 2) , en fait je voulais parler de on ^*:INPUT:*: et non de TEXT , du coup j'ai perdu ce que j'avais fait, je vais recommencer donc lol, merci à vous.

cordialement,

MoiMdr
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
we ben effectivenemt c'est if ($active == #)

et tan que c'est ON INPUT t'en a plus besoin
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

re wordlDMT,

non pas if ($active == #) sinon ca m'affiche l'echo dans la fenêtre active et non dans la fenêtre ou s'est passé l'évènement ;)


Par contre je viens de m'apercevoir que ça me vire les couleurs configuré dans mIRC6.35 pour les pseudos et aussi mon highlight pour la ligne qu'on m'envoies avec mon pseudo dedans :s, elle est plus en couleur, et ce même si il n'y a pas de mot à corriger dans la phrase, je m'appercois que en fait en variable ça me passe ttes mes événements text en echo donc contrairement a mon premier code, en fait toutes les option de nicks colors et highlight qu'on règle avec Alt+B y a juste ma nicklist qui reste en couleur et mon pseudo, mais tout les entrant son en noir basic, par contre leur couleurs d écriture reste,

enfin voila je ne sais pas si j'ai été claire :$ mais si quelqu'un a une idée pour garder le highlight ainsi que les colors nick,
Quand on crois que c'est simple c'est toujours simple d'être tout compliqué mdrr

Derniere chose, mon input me met toujours la phrase original et celle corrigée en écho, ( je pense conflit entre input) car sur un mIRC vierge ca marche par contre ca bloque tellement l'événement envoyé que ca l'envois pas sur le server mdrrrr ( j'ais repris la même métode que le on ^*:text:
Mais bon ça pas encore trop cherché donc reposerais la question quand j'en serais vraiment là et aurais cherché un peut partout

Merci à vous,

cordialement,

MoiMDR
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
re

je t'ai dis j'avais pas testé et j'avais comis une erreur j'ai pas lus tout ton poste dsl j'ai vu que ça marche pas avec if (#) mais bon un exp:
on ^*:text:*:*:{ 
  var %a $1- 
  %a = $replace(%a,mot1,mot1-remplacement) 
  %a = $replace(%a,mot2,mot2-remplacement) 
  if # || $query($nick) { echo -t $v1 < $+ $nick $+ > %a | haltdef } 
} 


et pour le input tu dois utilisé /msg pour envoyer le mot remplacé

ajouté un "." avant le msg si non tu aura 2 textes

on *:input:*:{ 
  var %a $1- 
  %a = $replace(%a,mot1,mot1-remplacement) 
  %a = $replace(%a,mot2,mot2-remplacement) 
  if $active == # || $query($active) { 
    echo -t $v1 < $+ $nick $+ > %a 
    .msg $v1 %a 
    haltdef
  } 
}


si le pseudo est affiché en standar tu peux utilisé juste msg sans "." avec un halt/haltdef

NB: tu peux aussi utiliser:
var %a $replace($1-,mot1,mot1-remplacement,mot2,mot2-remplacement,ect.,etc..) 
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

WorlDMT,

Merci pour ton aide, je regardais les $iif ( après je pense qu'il y a plusieurs solution et je connais pas toute les subtilité, pour optimiser au mieux, en tout cax merci pour tes explications ca m'aide bcp,


pour ce qui est du INPUT j'ai essayé ce que tu m'a dit et en fait ça doublait chez celui qui reçois,j'ai repensé ce que tu m'avais dis plus haut pour le if ($active.... ) donc oui pas besoins donc viré, ensuite viré aussi le .msg car sert a rien non plus, enfin j'ai testé plusieur solution, et en faisant mes recherche j'ai trouvé pour optimiser les $+ donc je suis arrivé à ça:

on *:input:*:{

var %a $replace($1-,mot1,mot1-remplacement,mot2,mot2-remplacement)

echo -t $v1 $+(<,$nick,>) %a

haltdef
}



Pour la chaine de mots a corriger, j'en ai trop donc pense que je vais me tourner vers de fichier, je sais pas encore comment, si hashtable, file handling ou autre car encore jamais fais, mais la ça sera intéressant et l'occasion de m'y mettre,
Autre point:
" je ne veux surtout pas que ma correction soit envoyé sur le server ;) c'est juste pour mon affichage perso", j'avais oublié de le préciser je pense ;)

Ton aide m'a permis aussi de modifier mon INPUT dans ma remote de couleurs qui faisait conflits et doublait aussi car j'avais /msg donc j'ai mis .msg ;) merci,
Par contre si je met msg sans le . et bien ca me double .
Et en fait je ne veux pas

sinon c'est pas trop mal, il me reste ah voir pour utiliser ma variable de couleur pour mon INPUT de correction pour que mon écho prenne ma couleur d écriture je pense, ou voir pour que ca ne traite pas les phrases qui ne contiennent pas de mots a corriger et donc me les affichent en text normal avec mes couleurs , je vais chercher un peut et reviendrai coller mon INPUT de mes couleurs si je n'y arrive vraiment pas,

Merci pour tout encore une fois, je commence a un peut mieux comprendre comment marchent certains codes


Dsl je crois avoir compris que tu aimais pas trop lire, promis la prochaine fois je ferrais plus court :$.

Cordialement,

MoiMdr.
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
"pour ce qui est du INPUT j'ai essayé ce que tu m'a dit et en fait ça doublait chez celui qui reçois"

je ne sais pas normalement ça doit pas doublé puisqu'il y a /haltdef

"j'ai repensé ce que tu m'avais dis plus haut pour le if ($active.... ) donc oui pas besoins donc viré"

apres avoir bien regarder c'est mieu de les mettre pour ne pas avoir un echo dans le status window en tout cas ça depent de toi

"je ne veux surtout pas que ma correction soit envoyé sur le server"

ok remplace %a par $1- c'est tout

"Pour la chaine de mots a corriger, j'en ai trop..."

regarde donc une loop /help /while

voici encore un exemple

on *:input:*:{
  var %t 1
  while ($(,$ $+ %t)) var %a %a $iif($readini(fichier.txt,corect,$v1),$v1,$(,$ $+ %t)),%t %t + 1
  if $active == # || $query($active) {
    echo -t $v1 < $+ $nick $+ > %a
    .msg $v1 %a
    haltdef
  }
}


le fichier.txt contient

[corect]
mot1=mot1-remplacement
mot2=mot2-remplacement
mot3=mot3-remplacement
mot4=mot4-remplacement
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

Salut WorlDMT,

merci pour tou, ca a l'aire de pas trop mal marcher, j'ai modifié deux trois choses en essayant de comprendre, et rendre compatible avec mon INPUT de mes couleurs décriture, puis fait pas mal de condition du genre:

if ($left($1,1) != !) && ($left($1,1)avant ma variable a% mais faudra que je trouve pour optimiser ;)

pour les le !,/,. qui passaient pas car ca restait en echo.
Et :

if # && ($me isin %a) pour le highlight

Il me manque juste a trouvé le moyen que ça me retourne pas en echo mais en normal quand il n'y a pas de mots a détecter dans ma phrase
j'ai essayé des trucs du genre ($1- != $v1) ou ($1- != a%) mais ça marche pas ce qui est surement normal puisque c'est avant ma variable, mais je finirais par trouver ;).

Et pour le INPUT de la correction je ne met pas de "msg" il me sert à rien car il envois mon mot corrigé sur le server, ou alors j'ai pas compris la fonction ici.

pour la boucle while il y a une petit erreur : un $v1 en trop:


while ($(,$ $+ %t)) var %a %a $iif($readini(fichier.txt,corect,$v1),$v1,$(,$ $+ %t)),%t %t + 1

ça m'affichait "mot-remplacement mot"

mais j'ai eu du mal car je n'arrive pas a déchiffrer le fonctionnement de ($(,$ $+ %t))
Mais il se fait tard, peut être aussi pour çà lol, mais j'aimerais bien comprendre ce que je fais ;)

Merci encore pour tous.

Sincère salutation,

MoiMdr,
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

Re,

Heuuuu j'avais pas tous tester cette nuit :s et ca matin ca marche plus :s

Ca me renvois toujours mot1-remplacement quoi que je tape....

bon vais essayer de comprendre la while,

@+ ;)

MoiMdr
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

Autant pour moi pfff suis pas bien réveillé lol la while est bonne, c'est l'éhco qui va pas , ca me renvois ca:

<MoiMdr> mot1-remplacement mot1-remplacement
<MoiMdr> mot1-remplacement mot1-remplacement
<MoiMdr> mot1-remplacement mot2-remplacement
<MoiMdr> mot1-remplacement mot3-remplacement
<MoiMdr> mot1-remplacement mot4-remplacement
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
moi je te donne une exemple regarde dans le fichier help et essaye de faire toi meme

"if # && ($me isin %a) pour le highlight"

c'est pas une bonne idée d'utiliser "isin" car si ton pseudo est bamboo
et que un autre est bam ou ambo tu aura un hightight pourtant personne n'a parlé de toi utilise plutot $istok ou $findtok

exp:
if ($istok($1-,$me,32)) echo -a $nick parle de toi sur #
ou
if ($findtok($1-,$me,1,32)) echo -a $nick parle de toi sur # 


"j'ai essayé des trucs du genre ($1- != $v1)"

$1- est la phrase tapé
$v1 ou $v2 viennent apres une condition regarde /help $v1

if (1 == 2) <= ici $v1 = 1 et $v2 = 2

exp:
tape
//if (15 !20) echo -a v1 $v1 ; v2 = $v2


"Et pour le INPUT de la correction je ne met pas de "msg" il me sert à rien car il envois mon mot corrigé sur le server, ou alors j'ai pas compris la fonction ici."

avec halt/haltdef ça s'arrete apres echo donc aucun message sera envoyer
donc .msg $v1 $1- pour envoyer la frase non corrigé

"mais j'ai eu du mal car je n'arrive pas a déchiffrer le fonctionnement de ($(,$ $+ %t))"

c'est pas tres connu dans mIRC je ne sais pas mais c'est pour evaluer une variable ou un identifieur regarde je vais t'expliqué

%t est egale a 1 et $ $+ %t retourne $1 mais j'ai besoin d'evaluer pour avoir la valeur de $1 qui est le premier mot tappé donc:

$eval($ $+ %t,2) ou $($ $+ %t,2) et la nouvelle methode $(,$ $+ %t) bref

while donc tan qu'il exsite $(,$ $+ %t) ça fais var %a %a + blabla, et %t %t + 1
ensuite while $(,$ $+ %t) <ici %t 2 deja donc le 2eme mot ect.

pour $iif($readini(fichier.txt,corect,$v1),$v1,$(,$ $+ %t) )

$iif(condition,positif,negative) regarde /help $iif

le $v1 en bleu est la valeur de $(,$ $+ %t)
le $v1 en rouge est le resulta positif de la condition

donc si il existe dans fichier.txt le mot1 il remplace par mot-remp si non mot1

regarde les couleurs

en general je viens de testé le code que je t'ai donné y a aucun prob je ne sais pas ce que tu a fais en tout cas
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

WorldDMT,

ttes mes excuses, oui ça marche si je met dans une mIRC vierge donc j'ai encore des conflit avec d'autre remote, faut que je vérifié tte mes variable, le gros soucis viens principalement de ma remote de couleur d écriture,

Parfois on crois qu'on a mal codé et en fait c'est pas le cas, juste un conflit ou alors manque une lettre dans un mots ou une de trop, ou manque un espace, enfin pleins de tit trucs parfois qui nous font passer du temps pour juste une faute de frappe lol , vais me relire mdrr

Ah oui dans ma remote de couleur décriture j'ai déja un .msg, je vais essayer de compiler mes deux input je crois que c'est le mieux a faire.

Voila voila, je vais essayer de régler tout ca,

pour l'aide c'est ce que je fais, chaques commandes que tu me met que je ne connais pas je vais voir l'aide de suite, mais là en quelques jour ca fait bcp de trucs a garder en tête d'un coup lol,

En tout cas merci pour tes explications,

à bientôt,

MoiMdr,
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

WorlDMT,

Bon c'est bon ça marche, juste que avec

%a = $replace($1-,mot1,mot1-remplacement,mot2,mot2-remplacement)

ca marchait comme je voulais car même si on collait mot1mot2 ca marche, je me demande si c'est possible de faire pareil avec la boucle et surtout readini vu que on détecte des mots

Je t'explique mon interêt en fait est de modifié les racourcis de smileys entrant chez moi donc si quelqu'un fait :p:p:p ca me corrigera pas les trois :p

de plus ca déconnait chez moi en plus de conflit de remote j'avai aussi la variable a% qui était resté avec la globale précédente de ma ligne cité plus haut, donc la local la reprenait, pour ca que ca me mettait:
lot-remplacémot ( ce dernier correspondais a ma variable resté en mémoire )

Pas facile la vie d'artiste mdrr

Cordialement,

MoiMdr,
Messages postés
43
Date d'inscription
dimanche 15 avril 2007
Statut
Membre
Dernière intervention
24 août 2009

bonjour Moimdr,
Risque de se poser avec $replace le probleme des majuscules si tes codes smileys sont sensibles à la case. Ex: Si :d et :D sont des smileys différents ... dans ce cas utilise plutôt $replacecs.
D'autre part, un autre soucis qui risque de survenir est que suivant l'ordre de tes remplacements, tu risques parfois de te retrouver avec des abbérations... Ex: si :s et :salut: sont des smileys différents et si le :s est traité (remplacé) avant le :salut:
Peut être donc que $regsub finalement pourrait trouver son utilité...
Messages postés
64
Date d'inscription
mardi 18 novembre 2008
Statut
Membre
Dernière intervention
19 juin 2010

Salut LeGnoMe666,

Oui le soucis des majuscules j'avais vu et savais le régler avec replacexcs mais là je donnais un exemple pour dire que ca marchait comme je voulais, et pour le mot détecté avant l'autre j'avais pas fait gaffe c'est vrai que PaDa m'avait parlé de $regsub tout au début et je lui avais répondu que justement je remplaçais les mots pour régler des problème d'expression régulières , mais le fait est que tu as lu que le dernier post ;), en fait j'en suis là:

on *:input:*:{

  if ($left($1,1) != !) && ($left($1,1) != .) && ($left($1,1) != /) {

    var %t 1

    while ($(,$ $+ %t)) var %a %a $iif($readini(correcteur\correcteur.txt,corect,$v1),$v1,$(,$ $+ %t)),%t %t + 1

    if $active == # || $query($active) {

      echo -t $v1 $+(<,$nick,>,%couleur-gras,%Souligné,,%Couleur,%Fond) %a

      .msg $active $+(%couleur-gras,%Souligné,,%Couleur,%Fond,$1-)  


      haltdef
    }
  }
}

Avec l'aide de WorlDMT

Donc je n'utilise plus $replacexcs et mon problème est que avec la $readini si je colle mes mot a remplacer et bien ca ne les remplace plus comme avec $replace, genre je tape " mot1mot2mot3 " et bien ca me remplace pas mes mots, de plus j'étais en train de chercher également pour avec $readini si je pouvais trouver un truc sensible a la case pour différencier les majuscules des minuscule pour éviter de me faire un .text avec:

XD=xd-corr
xD=xd-corr
Xd=xd-corr etc...

Depuis hier soir je cherche dans les aides et je suis en train de me demander si finalement pour mon problème de "mot1mot2mot3" il faut pas que j'abandonne $readini et me tourne vers autre chose.

Mais vais continuer a chercher car pas convaincu que impossible encore ;)

Merci de tes conseils,

Cordialement,

MoiMdr
Messages postés
43
Date d'inscription
dimanche 15 avril 2007
Statut
Membre
Dernière intervention
24 août 2009

bonjour Moimdr,
un petit exemple qui va peut être de donner envie de te mettre aux expressions régulières alors.
J'imagines que tes changements ne concernent pas que l'evenement INPUT mais aussi ACTION, TEXT etc... d'où peut être l'utilité de créer un alias...


on *:input:*:{
var %a = $modifie_text($1-)
if $active == # || $query($active) {
echo -t $v1 $+(<,$nick,>,%couleur-gras,%Souligné,,%Couleur,%Fond) %a
.msg $active $+(%couleur-gras,%Souligné,,%Couleur,%Fond,$1-)
haltdef
}
}
alias modifie_text {
var %text = $$1-
$regsub(%text,/(?i:xd)/g,Code_pour_xd,%text)
$regsub(%text,/:s($|[^i])/g,Code_pour_:s,%text)
$regsub(%text,/:siffle:/g,Code_pour_Siffle,%text)
return %text
}


Tu devrais ici logiquement pouvoir taper indifférement xD XD Xd xd pour obtenir le même résultat.
Ensuite, il ne devrait plus y avoir de conflits entre :s et :siffle:
Bon courage
Messages postés
871
Date d'inscription
jeudi 6 juillet 2006
Statut
Membre
Dernière intervention
6 janvier 2012
1
"je tape " mot1mot2mot3 " et bien ca me remplace pas mes mots"

l'exemple de $readini (comme aussi les hash tables ou meme $read(x.txt,w,$v1) aussi) est pour remplacer un mot par un autre mais ici tu a un mot qui est mot1mot2mot3 donc ces dernier vont cherchés le mot "mot1mot2mot3" dans ce cas c'est pas si simple il te faut une regex ou replace avec une loop

cherche la bible de mIRC qui ce trouve sur le site scriptsdb.org tu cherche tuto et tu selectionne expression reguliere

mais esque c'est pour remplacer :p:p:p par :p ou :ppppp par :p et xd, Xd, et xD par XD ya plein de truc

faut juste expliqué plus