Gestion multiligne de chaîne de caractère

Contenu du snippet

bonjour :o)

ayant eu le besoin de faire des détections de texte précis mais sur plusieurs lignes, j'ai décidé de faire ce bout de code.
j'ai du passé par cette méthode, car il est évident qu'on ne pourrait pas le faire en utilisant la fonction
multiligne des Expressions Rationnelles (cf. forum " Regex Multiligne ") en mirc

description: stockage des lignes dites par pseudo l'un après l'autre dans une hash table
et dès qu'il passe a un seuil défini, il commence a détecter tant que le nombre de lignes
n'atteint pas un plafond, lui aussi défini :).

Ce code n'est pas complet, dans le sens que vous pouvez l'adapter a vos besoins.
J'ai juste voulu vous faire partager, la méthode que j'ai ébauchée :o)

enjoy ;o)

Source / Exemple :


; Multiline Msg Detection

alias -l [¤]DetectorMultiline {
  ; traitement(nettoyage) préalable du texte avant la recherche des mots des bases de données
  var %tempmult = $strip($1-) , %tempmultreg = $regsub(%tempmult,/(:space:|:punct:)/g,,%tempmult)
  ; les variables qui suivent sont les " bases de données " que j'utilise pour détecter sur les chaînes
  ; créées après le traitement multiligne de l'alias [¤]MultilineControl
  ; à modifier selon vos besoins et désirs
  var %multreg1 = /(merde|salope|etc ...)/i
  var %multreg2 = /(etc ...)/i
  ; Si les détections sont positives, renvoyer 1
  if $regex(%tempmult,%multreg1) { return 1 }
  elseif $regex($strip(%tempmult),%multreg2) { return 1 }
  else { return 0 }
}

; dans l'alias suivant , je stock au fur et à mesure qu'on reçoit des lignes d'un pseudo sous le format suivant:
; nom d'item: <pseudo>
; data: <nombre de ligne dite> <ligne dite précédemment(contenue déjà)> <ligne qui vient d'être dite>

; j'ai limité la détection à partir d'un seuil de 4 lignes et un plafond de 10 lignes
; vous pouvez bien sur modifier ces paramètres à votre guise

alias -l [¤]MultilineControl {
  ; Para. $1:nickname ; $2-:string
  var %X.MultilineNick = $1
  var %X.MultilineText = $2-
  if ($hget(HshMultiline,%X.MultilineNick)) {
    var %X.MultilineContained = $hget(HshMultiline,%X.MultilineNick)
    var %X.MultilineContainedCnt = $gettok(%X.MultilineContained, 1, 32)
    inc %X.MultilineContainedCnt 1
    var %X.MultilineNewText = %X.MultilineContainedCnt $+ $chr(32) $+ $gettok(%X.MultilineContained, 2-, 32) $+ $chr(32) $+ %X.MultilineText
    hadd HshMultiline %X.MultilineNick %X.MultilineNewText
    if (%X.MultilineContainedCnt > 4) {
      if ($[¤]DetectorMultiline(%X.MultilineNewText) == 1) {
        hdel HshMultiline %X.MultilineNick
        ; on retourne ici la chaîne complète créée auparavant :o)
        return %X.MultilineNick %X.MultilineNewText
      }
      elseif (%X.MultilineContainedCnt == 10) { hdel HshMultiline %X.MultilineNick | return 0 }
      else { return 0 }
    }
    else { return 0 }
  }
  else { hadd HshMultiline %X.MultilineNick 1 %X.MultilineText | return 0 }
}

alias -l [¤]Multiline {
  ; Para. $1:nickname ; $2-:string
  if ($[¤]MultilineControl($1,$strip($2-)) != 0) {
    var %X.QMultNick = $1 , %X.QMultText = $3- , %X.QMultCnt = $2
    echo -st Detection Multiligne -> Pseudo: %X.QMultNick -> Nbr. de ligne: %X.QMultCnt -> Texte: $strip(%X.QMultText)
  }
}

on 1:start:{ hfree HshMultiline | hmake HshMultiline 200 }
on 1:disconnect:{ hfree HshMultiline }
on 1:load:{ hmake HshMultiline 200 }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.