[... ] ClipGet et ClipPut - créer variables depuis texte

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

[... ] ClipGet et ClipPut - créer variables depuis texte

#1

Message par JulienBoul »

Bonjour à tous,

Je suis à la recherche d'une méthodologie afin d'optimiser mon codage. J'ai un pavé de texte stocké dans mon clipboard sous cette forme:
---------------------------
Gestion des sinistres - NOM PRENOM (Monsieur)- N° Cie : - N° Cab. : 123456789 - N° Cli. : *
---------------------------
Facture : A123456789
Service : 01234567
Description: Nom du service
Option: Option 1
Famille: Type de produit
Durée: durée du contrat
Code produit: 0987654321
Date achat: 28/10/2014
Description: Nom du produit
Prix achat: 1.00 €
PNA : 1.00 €
N° sinistre ; 123698745
Date survenance : 08/10/2015
Date déclaration : 09/10/2015
---------------------------
OK
---------------------------
Je cherche à stocker la donnée Facture dans la variable $facture, et ainsi de suite pour quelques données du pavé de texte ci dessus.
Par la suite, je cherche a aller coller le texte contenu dans chaque variable dans les zones réservées à cet effet. Faut il passer par un fichier temporaire?

La méthode est elle optimale? Pour ne pas coder puis me rendre compte qu'il y avait une solution plus logique. Je ne suis pas du métier, et j'en suis a mon 2ème script opérationnel seulement, donc désolé si je parais naif. Je n'ai pas trouvé de sujet traitant du sujet peut être parce que je ne sais pas quels mots clé taper, je n'ai pas forcément les bons termes ou j'en met peut être justement de trop...
D'autre part, si vous avez des idées pour préciser mon titre et le rendre plus cohérent, je peux l'éditer.

Je finirai par vous remercier, car sans aucune base en Autoit il y a 2 semaines, j'arrive aujoud'hui a programmer un peu ce que je veux, et je n'ai jamais eu besoin d'écrire sur le forum jusqu'ici, preuve que sans le savoir, le petit problème de chacun permet de faire avancer les autres :-).

Au plaisir de vous lire :-)

Julien.
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#2

Message par JulienBoul »

Bonjour,

38 consultations et aucune réponse? Mon sujet intéresse mais personne n'a d'avis?

Bon, voici le début de mon code, j'espère que je creuse dans la bonne voie et que les curieux qui ont consulté le topic trouveront un début de réponse à leurs questions.

Code : Tout sélectionner

AutoItSetOption("WinTitleMatchMode", 2)
WinActivate ("Logiciel_utilisé")
ControlClick("Logiciel_utilisé","","[CLASS:Button; INSTANCE:126]","left") ; nom du bouton ou cloquer
Sleep (300)
Send ("^c") ; copie des infos qui se sont affichées - suite au clic sur le bouton, un pop up est apparu
Sleep (50)
Send("{ENTER}")
$info_exca = ClipGet()
If Not FileExists("info_exca.txt") Then
FileWriteLine ("info_exca.txt", $info_exca)
EndIf
$Step = FileReadLine ("info_exca.txt", 1)
Voilà, maintenant, je planche à savoir comment copier et isoler sous forme de variables (clipget) des parties de mon texte, si vous avez des idées ou des pistes à approfondir, à vos claviers ! L'idéal est de créer un code en mode "silent" afin de ne pas gêner l'utilisateur, et de limiter le risque d'erreurs. Si j'ouvre le fichier texte et que je copie à l'aide la souris, le risque d'erreur est fort, si l'utilisateur bouge sa souris, ou si le document ne s'ouvre pas en plein écran...

A+
Julien.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#3

Message par jguinch »

Pour récupérer les différentes valeurs, tu peux faire ça :
► Afficher le texte
Après, pour envoyer les données dans l'application en question, regarde du côte de ControlSetText ou ControlSend, ça sera mieux que de passer par le presse-papier.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#4

Message par mikell »

Ou aussi
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#5

Message par jguinch »

@mikell : ouais, ton _ArrayDiv c'est en fait un peu l'équivalent de ça : https://www.autoitscript.com/forum/topi ... ray1dto2d/
:mrgreen:
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#6

Message par Tlem »

Bonsoir.
Je ne sais pas si c'est une erreur, mais dans le "pavé" du premier message, N° sinistre est suivit d'un point virgule et non de deux points. ^^

De plus, Julien indique vouloir récupérer uniquement certaines valeurs et non la totalité de celles-ci. Alors certes qui peux le plus peux le moins mais la solution de jguinch me paraît plus facile à maîtriser (Poir un deuxième script) sur l'attribution des variables ainsi que leur utilisation. Maintenant cela reste une très belle et ludique démonstration. ;)

Envoyé de mon appareil mobile avec Tapatalk.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#7

Message par mikell »

@Thierry
Dans le bon vieil esprit 'ceinture ET bretelles' de ce forum on propose les 2 solutions et l'user fera son choix ...
Et le point virgule était certainement un typo, la preuve (absolue et indiscutable) c'est que jguinch a fait la rectification dans son script :mrgreen:

@jguinch
Les grands esprits se rencontrent... j'en avais marre de me retaper toujours le même code en sortie de regex pour faire mon array 2D, et je voulais aussi pouvoir rajouter une (voire plusieurs) colonne vide supplémentaire dans l'array de sortie pour usage ultérieur
Donc : millor fir pitite fonction custome 8)

Note : dans ta fonction, $iFlag est inutile : si la taille de l'array n'est pas un multiple de $iCols, avec $iFlag = 0 la fonction risque de retourner n'importe quoi donc faut $iFlag = 1 et dans ce cas autant retourner @error de suite - ce que fait Mod dans ma tite func
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#8

Message par jguinch »

En fait, j'ai ajouté $iFlag pensant que ça pouvait servir : si le tableau n'est pas un multiple de $iCols, les dernières colonnes seront laissées vides.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#9

Message par JulienBoul »

Bonjour à vous,

Dites donc, quel plaisir de voir tant de proposition d'amélioration, c'est là que je me rend compte que ma fierté d'avoir développé seul mon petit script n'est le résultat que de mon égo surdimensionné... Avec vos propositions, je vais pouvoir améliorer le fonctionnement de mon script, qui me fait déjà gagner un temps fou. Pour faire simple, avant on mettait 2 minute minimum pour faire un avoir, là, on met 15 secondes maxi... C'est un super gain de productivité. Lorsque j'aurai supprimé mon blocnote, et intégré les array et les fonctions ControlSetText ou ControlSend, ça sera mille fois plus propre et fiable.
Pour le moment, le seul truc qui fait que ça n'est pas fiable, c'est que lorsque je lance le publipostage sur excel, j'ai choisi

Code : Tout sélectionner

Sleep (7000)
en attendant qu'excel se lance, que le publipostage se fasse, mais parfois excel s'ouvre en 1 seconde, et parfois en 8 secondes, ce qui équivaut à une perte de temps, voire à un bug.
Je posterai un autre topic pour essayer de fiabiliser cette étape, peut être en cherchant du coté d'une condition, si telle case est trouvée dans excel, alors, ça signifie que excel est bien lancé, on peut donc poursuivre le script.
De mon coté, dès que j'ai effectué les modifications de mon script, concernant la création de mes variables (via string si j'ai bien compris...), je poste mon code à la suite de ce message.
En tout cas merci pour toutes ces pistes, elles me font cheminer vers la meilleure façon d'écrire pour un rendu final fiable et optimal.
A+
Julien.
JulienBoul
Niveau 4
Niveau 4
Messages : 82
Enregistré le : ven. 04 déc. 2015 13:55
Status : Hors ligne

Re: [... ] ClipGet et ClipPut - créer variables depuis texte

#10

Message par JulienBoul »

Waw...

Commençons par la fonction ControlSend c'est top, ça permet à l'utilisateur de continuer à travailler lorsque le programme opère en sous marin. C'est moins ludique, moins spectaculaire (je débute dans l'autoit, je m'amuse encore de voir ma souris et mon clavier bouger :lol: ) mais tellement plus efficace et fiable.

Par contre, le wiki https://www.autoitscript.com/autoit3/do ... RegExp.htm est chargé... J'ai la barre au front. :?

Heu, pour ce script:

Code : Tout sélectionner

$string ="---------------------------" & @CRLF & _
"Gestion des sinistres - NOM PRENOM (Monsieur)- N° Cie : - N° Cab. : 123456789 - N° Cli. : *" & @CRLF & _
"---------------------------" & @CRLF & _
"Facture : A123456789" & @CRLF & _
"Service : 01234567" & @CRLF & _
"Description: Nom du service" & @CRLF & _
"Option: Option 1" & @CRLF & _
"Famille: Type de produit" & @CRLF & _
"Durée: durée du contrat" & @CRLF & _
"Code produit: 0987654321" & @CRLF & _
"Date achat: 28/10/2014" & @CRLF & _
"Description: Nom du produit" & @CRLF & _
"Prix achat: 1.00 €" & @CRLF & _
"PNA : 1.00 €" & @CRLF & _
"N° sinistre : 1236987" & @CRLF & _
"Date survenance : 08/10/2015" & @CRLF & _
"Date déclaration : 09/10/2015" & @CRLF & _
"---------------------------" & @CRLF & _
"OK" & @CRLF & _
"---------------------------"

$aFacture = StringRegExp($string, "(?im)^Facture : (\N+)", 3) ; OK
If Not @error Then MsgBox(0, "", "Facture = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Service : (\N+)", 3) ; OK
If Not @error Then MsgBox(0, "", "Service = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Description : (\N+)", 3)
If Not @error Then MsgBox(0, "", "Description = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Famille : (\N+)", 3)
If Not @error Then MsgBox(0, "", "Famille = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Durée : (\N+)", 3)
If Not @error Then MsgBox(0, "", "Durée = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Code produit : (\N+)", 3)
If Not @error Then MsgBox(0, "", "Code produit = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Date achat : (\N+)", 3)
If Not @error Then MsgBox(0, "", "Date achat = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Description : (\N+)", 3)
If Not @error Then MsgBox(0, "", "Description = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Prix achat : (\N+)", 3)
If Not @error Then MsgBox(0, "", "Prix achat = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^PNA : (\N+)", 3) ; OK
If Not @error Then MsgBox(0, "", "PNA = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^N° sinistre : (\N+)", 3) ; OK
If Not @error Then MsgBox(0, "", "N° sinistre = "& $aFacture[0])

$aFacture = StringRegExp($string, "(?im)^Date survenance : (\N+)", 3) ;OK
If Not @error Then MsgBox(0, "", "Date survenance = "& $aFacture[0])
 
J'ai plusieurs questions:
- La première est: comment transformer le contenu de mon clipboard (avec toutes mes infos en vrac comme exposé lors de mon premier message sur ce post) à la manière du code susvisé (avec les "& @CRLF & _" sans passer par un fichier blocnote? Faut il travailler le fichier bloc note en sous marin également, quitte à lui apposer la propriété d'être caché? Avec vous une piste a creuser?
- La seconde question est: mon code fonctionne pour 5 lignes (cf annotations sur le code), mais que faut il changer (sans doute dans (\N+) afin que ma recherche aboutisse?
- Concernant les Expressions rationnelles et régulières, avez vous une bonne page française du wiki car là, c'est super technique, et ça + la traduction, c'est épuisant leur page la... :roll:
Pourriez vous tout du moins m'expliquer cette partie? "(?im)^Date survenance : (\N+)", 3)"
^ signifie que le mot ne comporte pas d'espace avant c'est ça?
Quelle différence entre 3 et 4? C'est le flag ça? Pourquoi ne rien mettre dans le offset?
Répondre