Page 1 sur 1
Mettre un résultat regex en variable
Posté : mar. 10 avr. 2018 16:36
par Hazpartame
Bonjour,
Je suis débutant en AutoIt et je souhaite aider mon entreprise en simplifiant une tâche. J'ai réalisé tout le script, mais une petite partie (la plus importante...) déconne.
Je vous explique :
J'ai un mail qui contient un NOM Prénom. Je dois copier ce NOM Prénom et le coller dans un Active Directory. Je l'isole grâce à une regex mais je n'arrive pas à stocker cette regex dans le presse papier bien que j'arrive à l'afficher une première fois.
; Ouverture + copie du nom de la personneWinActivate("DEMANDE DE CREATION - - Microsoft Outlook")Send("!r") ; Ouvre le mailSend("^a") ; On selectionne ttSend("^c") ; On copie dans le presse papierSend("!{F4}") ; ALT + F4$Texte = ClipGet() ; On recupere le presse papier$Regex = "[A-Z]{2,30}\s[A-Z][a-z]*" ; On ne prend que le nom$NomPrenom = (StringRegExp($Texte,$Regex,2)) ; On applique la regexMsgBox(0,"", "la variable 1 = " & $Regex & @CRLF & "la variable 2 = " & $NomPrenom[0]); Le nom s'affiche bien dans NomPrenomClipPut($NomPrenom[0])MsgBox(0,"", "la variable 1 = " & $Regex & @CRLF & "la variable 2 = " & $NomPrenom[0]); BUG ? Le presse papier ne prend plus rien
Merci beaucoup d'avance : D
Re: Mettre un résultat regex en variable
Posté : mar. 10 avr. 2018 19:08
par jchd
Bonjour,
Tout d'abord, évitez les Send() et autre qui ne sont pas fiables. Préférer ControlSend() et ali.
Ensuite la regexp ne fonctionne pas dans des cas triviaux :
Code : Tout sélectionner
;~ $Texte = ClipGet() ; On recupere le presse papier
Local $Texte = "TARTEMPION Jean-Pierre" ; "SAINT-ANDRÉ Jean-Jacques" <---- autres bugs !
Local $Regex = "[A-Z]{2,30}\s[A-Z][a-z]*" ; On ne prend que le nom (ou un seul petit morceau !)
Local $NomPrenom = StringRegExp($Texte, $Regex, 1) ; On applique la regex
MsgBox(0,"", "la variable 1 = " & $Regex & @CRLF & "la variable 2 = " & $NomPrenom[0])
; Le nom s'affiche bien dans NomPrenom
ClipPut($NomPrenom[0])
MsgBox(0,"", "la variable 1 = " & $Regex & @CRLF & "la variable 2 = " & $NomPrenom[0])
; BUG ? Le presse papier ne prend plus rien
MsgBox(0, "", ClipGet())
et finalement le presse-papier n'est pas détruit ni la variable qui a servi a le charger.
Re: Mettre un résultat regex en variable
Posté : mar. 10 avr. 2018 20:20
par Hazpartame
Bonsoir,
Merci pour votre réponse très rapide. J'ai testé sur mon ordinateur perso, ça m'a l'air de pouvoir fonctionner au boulot.
J'ai compris pour les ControlesSend, merci !
Tout d'abord, évitez les Send() et autre qui ne sont pas fiables. Préférer ControlSend() et ali.
Qu'est-ce que ali ?
Ensuite la regexp ne fonctionne pas dans des cas triviaux :
C'est à dire ? Pourquoi cela n'a pas fonctionné ?
Local $NomPrenom = StringRegExp($Texte, $Regex, 1) ; On applique la regex
Est-ce seulement le changement du mode 2 => 1 de la regex qui a fait la différence ? Si ce n'est pas ça, pouvez vous m'expliquer ?
Merci beaucoup, je vais affiner ma regex, je voulais quelque chose de fonctionnel dans un cas très simple
Re: Mettre un résultat regex en variable
Posté : mar. 10 avr. 2018 21:24
par jchd
L'un des points à creuser est le cas des noms ou prénoms composés. L'autre porte sur les lettres accentuées ou hors page de code courant.
Re: Mettre un résultat regex en variable
Posté : mer. 11 avr. 2018 17:48
par Hazpartame
J'ai réglé mon problème de Regex, tous les cas sont bien pris en compte.
Cependant, je suis face à un nouveau problème. Je copie bien le prénom, mais le contenu de la variable Prenom disparait parfois. Tous les 3/4 essais, la variable Prenom ne contient que du vide. Pourquoi ? Comment régler ça ?
Je ne peux pas utiliser de ControlSend dans cette interface (cas particulier).
#cs ----------------------------------------------------------------------------
AutoIt Version : 3.3.14.5
Auteur: NRTX4330
Fonction du Script :
Modèle de Script AutoIt.
#ce ----------------------------------------------------------------------------
; Début du script - Ajouter votre code ci-dessous. #pragma compile(Icon, C:\Program Files (x86)\AutoIt3\Icons\au3.ico); Ouverture + copie du mail de la personneWinActivate("DEMANDE DE CREATION - visio.ft@orange.com - Microsoft Outlook")ControlClick("DEMANDE DE CREATION - visio.ft@orange.com - Microsoft Outlook","","[CLASS:RichEdit20WPT; INSTANCE:2]")Send("^a"); On selectionne le mailSend("^c"); On copieLocal $Texte = ClipGet()Local $Regex = "(([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ]*[.][a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ]*@)orange.com)"Local $Mail = StringRegExp($Texte, $Regex, 1) ; On applique la regexLocal $Mail1 = $Mail[0]ClipPut($Mail[0]);~ MsgBox(0, "", $Texte2);~ MsgBox(0, "", $Regex2);~ MsgBox(0, "", $Prenom[0]);~ MsgBox(0, "", ClipGet());~ ; ADWinActivate("Rechercher Utilisateurs, contacts et groupes") ; Active ADControlClick("Rechercher Utilisateurs, contacts et groupes","", "[CLASS:Edit; INSTANCE:1]") ; Selection champ NomSend("^v") ; CTRL + VControlClick("Rechercher Utilisateurs, contacts et groupes","", "[CLASS:Button; INSTANCE:2]") ; RechercherSleep(200)MouseClick("left",305, 381 ,2,5) ; On ouvreSleep(1500) ; Pause ouverture; Copie les donnéesSend("^c") ; CTRL + CLocal $Prenom = ClipGet() ; On stock le presse papierMsgBox(0, "", ClipGet()) ; Prénom bien pris en compteSend("{TAB}") ; Je vais au champ suivantSend("^c") ; CTRL + CLocal $Famille = ClipGet(); Je stock le presse papierSend("{TAB}") ; Champ suivantSend("{TAB}")Send("{TAB}")Send("{TAB}")Send("{TAB}")Send("^c") ; CTRL + CLocal $CUID = ClipGet() ; Je stock le CUIDSend("!{F4}") ; Je ferme la fenêtre; On vide l'annuaireControlClick("Rechercher Utilisateurs, contacts et groupes","", "[CLASS:Button; INSTANCE:4]") ; On videSend("{ENTER}") ; EntréeSend("{ENTER}") ; Entrée; REMPLISSAGE IEWinActivate("Orange Videoconferencing - Internet Explorer") ; Active IEMouseClick("left",2495, 277,1,10); Clique sur Ajouter un utilisateurSleep(1000)Send("{TAB}")Send("{TAB}")Send("{TAB}")Local $Famille1 = StringUpper($Famille) ; Miniscule > MajusculeClipPut($Famille1) ; Famille => presse papierSend("^v") ; CTRL + Vsleep(100)Send("{TAB}")sleep(100)ClipPut($Prenom) ; On le remet dans le presse papierSleep(100)Send("^v") ; Et la c'est le drame, 3/4 plus rien.ClipPut($Mail1)Sleep(100)Send("{TAB}")Send("^v") ; CTRL + VClipPut($CUID)Sleep(100)Send("{TAB}")Send("^v") ; CTRL + V