Mettre un résultat regex en variable

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Hazpartame
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 10 avr. 2018 15:21
Status : Hors ligne

Mettre un résultat regex en variable

#1

Message par Hazpartame » mar. 10 avr. 2018 15:36

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 personne
WinActivate("DEMANDE DE CREATION - - Microsoft Outlook")
Send("!r") ; Ouvre le mail

Send("^a") ; On selectionne tt
Send("^c") ; On copie dans le presse papier
Send("!{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 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


 

Merci beaucoup d'avance : D

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 1965
Enregistré le : lun. 30 mars 2009 21:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Mettre un résultat regex en variable  

#2

Message par jchd » mar. 10 avr. 2018 18:08

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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Hazpartame
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 10 avr. 2018 15:21
Status : Hors ligne

Re: Mettre un résultat regex en variable

#3

Message par Hazpartame » mar. 10 avr. 2018 19:20

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 :)

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 1965
Enregistré le : lun. 30 mars 2009 21:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Mettre un résultat regex en variable

#4

Message par jchd » mar. 10 avr. 2018 20:24

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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Hazpartame
Niveau 1
Niveau 1
Messages : 5
Enregistré le : mar. 10 avr. 2018 15:21
Status : Hors ligne

Re: Mettre un résultat regex en variable

#5

Message par Hazpartame » mer. 11 avr. 2018 16:48

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 personne
WinActivate("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 mail
Send("^c"); On copie
Local $Texte = ClipGet()
Local $Regex = "(([a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ]*[.][a-zA-Z'àâéèêôùûçÀÂÉÈÔÙÛÇ]*@)orange.com)"
Local $Mail = StringRegExp($Texte, $Regex, 1) ; On applique la regex
Local $Mail1 = $Mail[0]
ClipPut($Mail[0])

;~ MsgBox(0, "", $Texte2)
;~ MsgBox(0, "", $Regex2)
;~ MsgBox(0, "", $Prenom[0])
;~ MsgBox(0, "", ClipGet())

;~ ; AD
WinActivate("Rechercher Utilisateurs, contacts et groupes") ; Active AD
ControlClick("Rechercher Utilisateurs, contacts et groupes","", "[CLASS:Edit; INSTANCE:1]") ; Selection champ Nom
Send("^v") ; CTRL + V
ControlClick("Rechercher Utilisateurs, contacts et groupes","", "[CLASS:Button; INSTANCE:2]") ; Rechercher
Sleep(200)
MouseClick("left",305, 381 ,2,5) ; On ouvre
Sleep(1500) ; Pause ouverture


; Copie les données
Send("^c") ; CTRL + C
Local $Prenom = ClipGet() ; On stock le presse papier
MsgBox(0, "", ClipGet()) ; Prénom bien pris en compte
Send("{TAB}") ; Je vais au champ suivant
Send("^c") ; CTRL + C
Local $Famille = ClipGet(); Je stock le presse papier

Send("{TAB}") ; Champ suivant
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Send("^c") ; CTRL + C
Local $CUID = ClipGet() ; Je stock le CUID
Send("!{F4}") ; Je ferme la fenêtre



; On vide l'annuaire
ControlClick("Rechercher Utilisateurs, contacts et groupes","", "[CLASS:Button; INSTANCE:4]") ; On vide
Send("{ENTER}") ; Entrée
Send("{ENTER}") ; Entrée



; REMPLISSAGE IE
WinActivate("Orange Videoconferencing - Internet Explorer") ; Active IE
MouseClick("left",2495, 277,1,10); Clique sur Ajouter un utilisateur
Sleep(1000)
Send("{TAB}")
Send("{TAB}")
Send("{TAB}")
Local $Famille1 = StringUpper($Famille) ; Miniscule > Majuscule
ClipPut($Famille1) ; Famille => presse papier
Send("^v") ; CTRL + V
sleep(100)
Send("{TAB}")
sleep(100)

ClipPut($Prenom) ; On le remet dans le presse papier
Sleep(100)
Send("^v") ; Et la c'est le drame, 3/4 plus rien.
ClipPut($Mail1)
Sleep(100)
Send("{TAB}")
Send("^v") ; CTRL + V
ClipPut($CUID)
Sleep(100)
Send("{TAB}")
Send("^v") ; CTRL + V

Répondre