Coucou homonyme !

C'est fait !

Comme le roi Salomon, j'ai coupé le bébé en deux. Bon il ne l'a pas vraiment 
fait, mais ça c'est un autre débat.

Je propose ci-dessous trois nouvelles fonctions, en plus de la première 
envoyée. Il s'agit de :

* RegCount pour compter le nombre d'occurences;

* RegSearch pour trouver la ènième occurence;

* et RegSearchToDictionary pour envoyer les occurences trouvées dans un objet 
dictionary.

Voici les fonctions

Début du code JawsScript

Int Function RegCount (string sText, string sPattern, int blGlobal, int 
blIgnoreCase, int blMultiline)

; Recherche avec regexp

; renvoi le nombre d'occurence trouvées par le pattern.

var 

int i, 

object reg,

object found

; création d'un objet regexp des expressions régulières

let reg = CreateObjectEx ("vbscript.regexp", false)

; la recherche est-elle globale ?

if blGlobal > 0 then

let reg.Global = -1 ; équivaut à true

else

let reg.Global = 0 ; équivaut à false

EndIf

; la recherche ignore-t-elle la cass ?

if blIgnoreCase > 0 then

let reg.IgnoreCase = -1

else

let reg.IgnoreCase = 0

EndIf

; La recherche est-elle multiligne ?

if blMultiline > 0 then

let reg.Multiline = -1

else

let reg.Multiline = 0

EndIf

; Assignation du pattern de l'expression régulière (PCRE)

let reg.Pattern = sPattern

; exécution de la recherche

let found = reg.Execute(sText)

; renvoi du nombre d'occurence

let i = found.Count

return i

EndFunction


String Function RegSearch (string sText, string sPattern, int iReturn, int 
blGlobal, int blIgnoreCase, int blMultiline)

; Recherche avec regexp

; renvoi le nombre d'occurence trouvées par le pattern.

var 

String s,

object reg,

object found

; création d'un objet regexp des expressions régulières

let reg = CreateObjectEx ("vbscript.regexp", false)

; la recherche est-elle globale ?

if blGlobal > 0 then

let reg.Global = -1 ; équivaut à true

else

let reg.Global = 0 ; équivaut à false

EndIf

; la recherche ignore-t-elle la cass ?

if blIgnoreCase > 0 then

let reg.IgnoreCase = -1

else

let reg.IgnoreCase = 0

EndIf

; La recherche est-elle multiligne ?

if blMultiline > 0 then

let reg.Multiline = -1

else

let reg.Multiline = 0

EndIf

; Assignation du pattern de l'expression régulière (PCRE)

let reg.Pattern = sPattern

; exécution de la recherche

let found = reg.Execute(sText)

; on trouve l'occurence à la position donnée

let s = FormatString("%1", found(iReturn-1).Value)

; renvoi

return s

; return found(iReturn-1).Value

EndFunction



Object Function RegSearchToDictionary (string sText, string sPattern, int 
blGlobal, int blIgnoreCase, int blMultiline)

; Recherche avec regexp

; et renvoi les occurences trouvées dans un objet dictionary

var 

int i, 

object dict,

object reg,

object found

; création d'un objet dictionary

let dict = CreateObjectEX ("scripting.dictionary",0)

; création d'un objet regexp des expressions régulières

let reg = CreateObjectEx ("vbscript.regexp", false)

; la recherche est-elle globale ?

if blGlobal > 0 then

let reg.Global = -1 ; équivaut à true

else

let reg.Global = 0 ; équivaut à false

EndIf

; la recherche ignore-t-elle la cass ?

if blIgnoreCase > 0 then

let reg.IgnoreCase = -1

else

let reg.IgnoreCase = 0

EndIf

; La recherche est-elle multiligne ?

if blMultiline > 0 then

let reg.Multiline = -1

else

let reg.Multiline = 0

EndIf

; Assignation du pattern de l'expression régulière (PCRE)

let reg.Pattern = sPattern

; exécution de la recherche

let found = reg.Execute(sText)

; transfert des occurences dans l'objet dictionary

if found.Count > 0 then

let i = 1

While(i<=found.count)

dict.add (i, found(i-1).Value)

let i = i+1 ; incrémentation

EndWhile

EndIf

; renvoi

return dict

EndFunction



Int Function RegTest (string sText, string sPattern, int blGlobal, int 
blIgnoreCase, int blMultiline)

; Recherche avec regexp

; renvoi true si le pattern est trouvé dans le texte donné.

var 

int i, 

object reg

; création d'un objet regexp des expressions régulières

let reg = CreateObjectEx ("vbscript.regexp", false)

; la recherche est-elle globale ?

if blGlobal > 0 then

let reg.Global = -1 ; équivaut à true

else

let reg.Global = 0 ; équivaut à false

EndIf

; la recherche ignore-t-elle la cass ?

if blIgnoreCase > 0 then

let reg.IgnoreCase = -1

else

let reg.IgnoreCase = 0

EndIf

; La recherche est-elle multiligne ?

if blMultiline > 0 then

let reg.Multiline = -1

else

let reg.Multiline = 0

EndIf

; Assignation du pattern de l'expression régulière (PCRE)

let reg.Pattern = sPattern

; recherche si présence et renvoi de résultat

if reg.Test (sText) == -1 then

return true

else

return false

EndIf

EndFunction



Fin du code JawsScript

Bon faut que je retourne au boulot !


Yannick Daniel Youalé




  ----- Original Message ----- 
  From: yannick< 
  To: [email protected] 
  Sent: Monday, May 12, 2014 10:44 AM
  Subject: [progliste] Re: JawsScript- Fonction de recherche de texte utilisant 
les expressions régulières PCRE


  oh malheureux ,
  il ne faut jamais posé la question :
  "Selon toi, ça te plairait ? "
  parce que sur les listes de discussion,il y a bien plus de gens pour te 
décourager 
  que de te donner envie de continuer !
  cela m'interesse ...
  mais  au sujet des colections,  inutil de te casser la tête, 
  tu pourrais dans n'importe quelle version de jaws uti`liser un activex 
adéquat .
  tu pourrais peut être utiliser l'objet dictionary ..
  et la fonction retournerais cette objet ..
  en guise de clé, tu utiliserais une numérotation ..
  ce que j'ai dans ma cave :
  Scripting.Dictionary
  Ajoute une paire clé/élément à un objet Dictionary 
  option Explicit 
  dim  dico
  set dico = createObject ("Scripting.Dictionary")
  dico.add "ville","paris"
  count
  Renvoie le nombre d'éléments d'un objet Dictionary 
  option Explicit 
  dim  dico, Clef 
  set dico = createObject ("Scripting.Dictionary")
  dico.add "ville","paris"
  dico.add "pays","France"
  dico.add "rue","arnaudVidal"
  msgBox dico.Count
  item
  Définit ou renvoie un élément pour un argument key spécifié dans un objet 
Dictionary 
  renvoie la valeur d'une clé 
  option Explicit 
  dim dico, i 
  set dico = createObject ("Scripting.Dictionary")
  dico.add "ville","paris"
  dico.add "rue","arnaud vidal"
  dico.add "numero","33"
  msgBox dico.item ("ville")
  'affiche paris
  dico.item ("ville")="Toulouse"
  ' change la valeur de ville 
  on peut aussi ajouter une nouvelle clé :
  dico.item ("nom")="yannick"
  msgBox dico.item ("nom")


  msgBox dico.item ("ville")



  option Explicit 
  dim  dico, Clef , text 
  set dico = createObject ("Scripting.Dictionary")
  dico.add "ville","paris"
  dico.add "pays","France"
  dico.add "rue","arnaudVidal"
  dico.item ("ville")="toulouse"
  msgBox dico.item ("ville")




  .....
  add,,CompareMode,Count,,Exists,Item,Items,Key,Keys,,Remove,RemoveAll












    ----- Original Message ----- 
    From: Yannick Youalé 
    To: [email protected] 
    Sent: Monday, May 12, 2014 10:54 AM
    Subject: [progliste] Re: JawsScript- Fonction de recherche de texte 
utilisant les expressions régulières PCRE


    Salut homonyme !

    Début de citation

    pourquoi n'avoir pas renvoyé tout simplement la chaine retrouvé ?

    Fin de citation

    Cette fonction appelée RegTest est simplement une fonction de test de la 
présence d'un pattern dans une chaîne.

    S'il avait fallut faire une fonction qui renvoi une occurence trouvée dans 
la chaîne à fouiller, la question qu'il faudrait alors se poser ce serait 
quelle occurence ? Etant donnée que plusieurs occurences peuvent être présente.

    Si le JawsScript prenait en charge les tableau ou les collection dans 
toutes ses versions, j'aurais pû renvoyer soit un tableau soit une collection 
par une telle fonction, mais ce n'est pas le cas. Et beaucoup peuvent alors se 
retrouver lésés.

    Autre possibilité cependant, ce serait dans un premier temps de faire:

    * une fonction RegCount qui renvoi le nombre d'occurence d'un pattern dans 
une chaîne;

    * et ensuite une fonction RegSearch dans laquelle on peut indiquer le 
numéro de l'occurence à renvoyer.

    Ce qui pourrait donner un code comme ceci:

    Début du code JawsScript

    var
    string s,
    string sText,
    int i,
    int icount

    ; création de la chaîne dans laquelle faire la recherche
    let sText = "chaine contenant plusieurs fois la lettre a"
    ; recherche du nombre d'occurence de a dans sText
    let icount = RegCount(sText, "a", true, true, true)
    ; parcours de chaque occurence trouvée dans une boucle
    let i = 1
    While (i<=icount)
    ; on capte l'occurence courante
    let s = RegSearch(sText, "a", i, true, true, true)
    ; puis, on fait ce qu'on veut de l'occurence renvoyée

    let i = i+1 ; incrémentation du compteur d'occurence
    EndWhile

    Fin du code JawsScript

    Je rappelle que toutes les fonctions utilisées n'existent pas encore, et 
sont là juste pour évoquer une possibilité.

    Tout ceci n'est pas un modèle d'optimisation, mais peut très bien se 
concevoir et se faire.

    Selon toi, ça te plairait ?

    Tu m'as forcé à y réfléchir, et ça me tente bien de m'y lancer.

    Yannick Daniel Youalé






      ----- Original Message ----- 
      From: yannick< 
      To: [email protected] 
      Sent: Monday, May 12, 2014 9:03 AM
      Subject: [progliste] Re: JawsScript- Fonction de recherche de texte 
utilisant les expressions régulières PCRE


      salut Yannick,
      et bien dis  donc, moi aussi j'ai aussi le nez dans les reg exp .
      désolé, je n'ai pas encore lu en profondeur ou testé, mais 
      a priori j'aurais une petite question :
      pourquoi n'avoir pas renvoyé tout simplement la chaine retrouvé ?
      peut être que ce n'est pas faisable, je ne sais pas ....
      tu aurais mis la variable text par référence ....

        ----- Original Message ----- 
        From: Yannick Youalé 
        To: [email protected] ; JawsScript 
        Sent: Monday, May 12, 2014 9:44 AM
        Subject: [progliste] JawsScript- Fonction de recherche de texte 
utilisant les expressions régulières PCRE


        Salut à tous !

        J'en avais donné les principes ici il y a quelques temps.

        Aujourd'hui, voici une fonction toute faite de recherche de la présence 
d'une chaîne dans une autre utilisant les expressions régulières.

        Début du code JawsScript

        Int Function RegTest (string sText, string sPattern, int blGlobal, int 
blIgnoreCase, int blMultiline)
        ; Recherche avec regexp
        ; renvoi true si le pattern est trouvé dans le texte donné.
        var 
        int i, 
        object reg

        ; création d'un objet regexp des expressions régulières
        let reg = CreateObjectEx ("vbscript.regexp", false)
        ; la recherche est-elle globale ?
        if blGlobal > 0 then
        let reg.Global = -1 ; équivaut à true
        else
        let reg.Global = 0 ; équivaut à false
        EndIf
        ; la recherche ignore-t-elle la cass ?
        if blIgnoreCase > 0 then
        let reg.IgnoreCase = -1
        else
        let reg.IgnoreCase = 0
        EndIf
        ; La recherche est-elle multiligne ?
        if blMultiline > 0 then
        let reg.Multiline = -1
        else
        let reg.Multiline = 0
        EndIf
        ; Assignation du pattern de l'expression régulière (PCRE)
        let reg.Pattern = sPattern
        ; recherche si présence et renvoi de résultat
        if  reg.Test (sText) == -1 then
        return true
        else
        return false
        EndIf
        EndFunction

        Fin du code JawsScript

        Chez moi, je l'ai créée pour l'intégrer dans un script de recherche 
rapide à l'intérieur d'un dossier contenant un grand nombre d'éléments.

        Amicalement !

        Yannick Daniel Youalé




--------------------------------------------------------------------------
              Ce courrier électronique ne contient aucun virus ou logiciel 
malveillant parce que la protection Antivirus avast! est active. 
           





------------------------------------------------------------------------------
          Ce courrier électronique ne contient aucun virus ou logiciel 
malveillant parce que la protection Antivirus avast! est active. 
       

Répondre à