[R] Reconnaitre une chaine de caractères dans un blocnote

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

[R] Reconnaitre une chaine de caractères dans un blocnote

#1

Message par shaq »

Bonjour,

Je voulais donc savoir comment reconnaitre une chaine de caractères dans un fichier notepad non enregistré sur le DD.

Exemple concret :

Je vais automatiquement ouvrir un nouveau blocnote, y copier un texte entier, et je voudrais dans ce text copier une adresse mac de la forme : 0017520F56D5 ou de la forme 00:17:52:0F:56:D5. Bon à la limite je me débrouillerai pour trouver les différentes conditions pour le faire. Mais par contre je voulais savoir pour résumer, comment me positionner devant un "00" admettons sur un fichier non enregistré sur le HDD.


J'èspère avoir été clair dans ma question ;)

merci.
Modifié en dernier par shaq le sam. 22 mars 2008 13:06, modifié 1 fois.
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#2

Message par shaq »

Personne ne sait ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#3

Message par Tlem »

shaq a écrit :je voulais savoir pour résumer, comment me positionner devant un "00" admettons sur un fichier non enregistré sur le HDD.
En faisant un clique devant ... :P

shaq a écrit :J'èspère avoir été clair dans ma question
Pas tout a fait. :shock:
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é".
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#4

Message par shaq »

D'accord dans ce cas là excusez moi.

Je vais essayer de réexpliquer.

J'ai un texte dans un nouveau blocnote (non enregistré) du type :

"AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages (e.g. VBScript and SendKeys). 001625FE1456 AutoIt is also very small, self-contained and will run on all versions of Windows out-of-the-box with no annoying "runtimes" required! "

Moi ce que je veux faire, c'est faire un copier de : "001625FE1456" (automatiquement bien entendu).

Donc soit en me positionnant automatiquement mon curseur devant le double zéro et après avec un maj+droite en surlignant etc ....

soit par un autre moyen de lecture qui me premettrait de copier une chaine de charactère (dans le presse papier) commencant par "00" finissant par un espace admettons.

Je pense que ça doit être un peu compliqué mais bon ...

Voila cette fois ci si vous n'avez pas compris je ne sais pas comment expliquer mieux. ;)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#5

Message par Tlem »

Je vois à peut près. :|

Est-ce que le texte à récupérer est toujours du format ("001625FE1456") un nombre hexadécimal de 12 octets ?

N'est-il pas plus simple d'analyser le texte entier, pour en sortir ces nombres ?

Est-il possible de connaître la philosophie du projet :
- Pourquoi ?
- Dans quel but ?
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
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#6

Message par moutelous »

Bonjour,

Code : Tout sélectionner

$text = WinGetText("* Sans titre - Notepad", "")
$Position=StringInStr($text,"00",1,1)
MsgBox(0, "Position is:",$Position )
 
En admettant que l'adresse MAC à rechercher se trouve dans un texte collé dans notepad

Il reste ensuite à positionner le curseur (caret) au début de la chaine recherchée ...
A+
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#7

Message par shaq »

J'ai des formulaires à remplir avec notemment l'adresse mac mais je ne peux pas en dire plus à par que c'est simplement pour me faciliter la vie il n'y a pas derrière d'histoire de piratage ou quoi que ce soit de malveillant (au pire je peux te dire pourquoi en MP si tu veux vraiment le savoir). Mais elle peut être sous plusieurs formes. sous ces formes ci :

001625FE1456
00:16:25:FE:14:56
00 16 25 FE 14 56

Mais ça c'est pas un soucis car il y a toujours un retour à la ligne à la fin de l'adresse mac, et donc effectivement je me suis trompé, en fait il faut que ça commence par 00 et que ça finisse par un retour à la ligne.

Par contre ça fait quoi en réalité le bout de code que tu as mis moutelous ?
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#8

Message par moutelous »

Bonjour,

Et bien ce "petit bout de code" te permet de savoir a quel endroit d'une chaine de caractère se trouve la première occurence "00" dans un bloc-note non enregistré (par exemple ...la première occurence de 00 débute au 13éme caractère ...)

Comme dit précédemment il reste à positionner le curseur à cet endroit ...
A+
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#9

Message par shaq »

Et si admettons je le copie sur le HDD, il n'y aurait pas un moyen plus simple de copier ce qui commence par "00" et qui fini par un retour à la ligne ?

ps : j'ai testé ton programme, et en fait ce que j'ai rajouté c'est d'envoyer $position fois la touche {RIGHT} en partant du début du text. Mais bon c'est assez lent et pas forcément très fiable.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#10

Message par moutelous »

Bonjour,

Ce Regexp permet l'enregistrement dans un tableau des adresses MAC commencant par 00 se terminant par un retour à la ligne et dans les formats suivants :

001625FE1456
00:16:25:FE:14:56
00 16 25 FE 14 56

Il n'est pas nécessaire d'enregistrer le Bloc note sur disque.

Code : Tout sélectionner

$text = WinGetText("* Sans titre - Notepad2", "")
$array=StringRegExp($text,"00.*\r\n",3)
If @error = 0 Then
        $nOffset = @extended
    Else
       Exit
EndIf
for $i = 0 to UBound($array) - 1
    msgbox(0, "Adresse MAC " & $i+1, $array[$i])
Next
 
A+
A+
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#11

Message par shaq »

Bonsoir,

Ton code à l'air de fonctionné pas trop mal. Ca m'affiche effectivement l'adresse mac. Mais j'aimerais comprendre comment il fonctione et j'ai vraiment du mal. De plus il m'affiche une msgbox avant et apres l'affichage de l'adresse mac.

On va essayer de reprendre ensemble le code :

Code : Tout sélectionner

$text = WinGetText("* Sans titre - Notepad2", "")  
$array=StringRegExp($text,"00.*\r\n",3)
If @error = 0 Then
        $nOffset = @extended
    Else
       Exit
EndIf
for $i = 0 to UBound($array) - 1
    msgbox(0, "Adresse MAC " & $i+1, $array[$i])
Next
-la première ligne met le texte entier dans une variable

-la deuxième ligne extrait de $text ce qui commence par 00 et qui fini par un retour à la ligne et la met dans la variable $array.
Mais ce que je comprend pas c'est le : "\r\n" \n en C c'est le retour à la ligne mais sinon ... et le 3 aussi je comprend pas à quoi il sert.

- Le IF entier j'ai rien compris.

- La boucle de fin d'après ce que j'ai compris ça lis colone par colone le tableau qui contient l'adresse mac, mais le Unbound je comprend pas à quoi il sert.

Voila si tu peux m'éclairer encore un peu.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#12

Message par moutelous »

Re ...

allez ... un tout petit effort ... car toutes les questions posées se résolvent par un "F1"

Si vraiment cela ne passe pas je t'aiderais...
A+
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#13

Message par shaq »

Bonsoir,

Avec un mal de tête, j'ai réussi à comprendre à peu près tout à l'exception de ça :

Code : Tout sélectionner

If @error = 0 Then
        $nOffset = @extended
    Else
       Exit
 
Comprend pas à quoi sert cette condition.

Je voudrais rajouter une condition. Parce que là dès qu'il y a un 00 c'est pris en compte. Je voudrais rajouter une condition comme quoi la chaine doit faire 6 caractères minimum et 20 maximum.

Ca c'est le premier point. Il faudrait ensuite que si les conditions ne sont pas respectés, qu'il n'y a donc rien qui correspond que ça envoye une send("erreur").

Autre problème, d'après ce que j'ai compris en fait tous les caractères sont placés dans un tableau et ensuite le while lit une par une les cases de celui ci. Mais est-ce que l'on peut mettre tout ça dans un cliput admettons ?
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#14

Message par moutelous »

Bonsoir,

Je penses que ça doit le faire

Code : Tout sélectionner

#include <GuiConstantsEx.au3>
#include <ClipBoard.au3>

Opt("GUIOnEventMode", 1)
$text = WinGetText("* Sans titre - Notepad", "")
$array=StringRegExp($text,"\b00.{6,20}\r\n",3)
If @error = 1 Then
        msgbox(0, "Error","No match ")
        Exit
EndIf
$hGUI = GUICreate("Clipboard", 600, 450)
$iMemo = GUICtrlCreateEdit("", 2, 2, 596, 396, $WS_VSCROLL)
GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")
GUISetOnEvent($GUI_EVENT_CLOSE, "quitter")
GUISetState(@SW_SHOW)
ToNotepad()

While 1
    Sleep(100)
    
WEnd
Func ToNotepad()
for $i = 0 to UBound($array) - 1
    ;msgbox(0, "Adresse MAC " & $i+1, $array[$i])
    GUICtrlSetData($iMemo, $array[$i] & @CRLF, 1)
Next
EndFunc

Func quitter()
    Exit
EndFunc
 
A+
A+
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#15

Message par shaq »

Ben écoute je viens de le tester et effectivement ton script marche du feu de Dieu, mais bon j'ai pas compris la moitié de ce que tu avais fais. C'est toi qui l'a créé de A à Z ou tu as pris un script similaire que tu as modifié ?

Car là tu m'as perché complêtement, je vais m'y pencher ce week end pour essayer de le comprendre, mais si tu peux m'aider un peu en m'expliquant brièvement les fonctions.

Et comment as tu su par exemple que certaines fonctions se trouvaient dans les fichier ClipBoard et GuiconstantsEx ?

Voila si tu peux un peu m'éclairer avant que je me chope une tumeur au cerveau ce week end en essayant de comprendre ;)
ani
Niveau 11
Niveau 11
Messages : 1826
Enregistré le : lun. 23 juil. 2007 12:31
Localisation : Bureau
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#16

Message par ani »

c'est pas évident à compprendre :o

pour les includes tu peux les remplacer par #include <GuiConstants.au3>

pourquoi indique t'il cela ? regarde les fichiers qu'il déclare, pour ouvrir l'include il te suffit de mettre ton curseur sur la ligne de celle-ci, ensuite alt+i sa ouvrira l'include.
Fait une recherche sur les $vscroll et $Gui_EVENT_CLOSE
Pour activer l'aide sur un mot il te suffit de le mettre en surbrillance et d'appuier sur F1.
ta quelque exemple dans le dossier d'autoit qui peuvent servir de base.

la fonction proposé par moutelous ne figure pas dans les fichiers includes,regarde la fonction guictrlsetdata.
Pour savoir si il faut indiquer tel include ou une autre avec tel fonction il suffit encore une fois de regarder dans l'aide, et après quelque temp on les connait ;)

@Moutelous, j'ai aperçu une mini erreur au niveau du regex, c'est pas une obligation d'appeler le retour chariot (\r) ou le saut à la ligne (\n).
çà fonctionne mieux sans, teste, si le dernier du tableau ne posséde pas de retour chariot ou de saut à la ligne, il n'apparaîtra pas dans le tableau :o

Code : Tout sélectionner

$array=StringRegExp($text,"\b00.{6,20}",3)
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#17

Message par moutelous »

Bonjour,

Concernant le retour chariot, oui je m'en étais aperçu...
Mais étant donné que shaq avait "spécifier" des retours à la ligne j'ai laissé cette option :wink:

... c'est mon défaut .... un peu trop rigoureux

Bonne journée
A+
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#18

Message par shaq »

Hello,

escusez moi j'ai pas trop le temps de m'occuper de mon petit projet, mais j'essaye quand même petit à petit d'arriver à faire ce que je veux. En fait je viens de comprendre comme un ahuri que je suis que la grosse parti du programme que je ne comprend pas sert juste à créer une fenêtre, et y entrer l'adresse mac. Mais je voulais savoir comment mettre l'adresse mac dans le presse papier pour pouvoir ensuite la coller automatiquement là où je veux. Parce que là en fait l'adresse mac est contenue dans un tableau, mais est-ce qu'il y a un moyen par exemple avec la boucle qui lit les caractères un après l'autre de pouvoir la mettre dans une variable et ensuite mettre cette variable dans un clipput ?

Sinon pour la question du retour chariot j'ai effectivement résolu le problème car j'avais lu à quoi correspondait tout ces caractère d'expressions régulières.

Encore merci pour votre aide très précieuse.
Avatar du membre
moutelous
Niveau 6
Niveau 6
Messages : 229
Enregistré le : sam. 09 févr. 2008 19:51
Localisation : Rennes
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#19

Message par moutelous »

Bonsoir,

Je ne comprends pas tout à fait ton problème...

En fait, en dehors de la partie création du bloc note qui était pour illustration de la démonstration , tu as bien chaque adresse MAC dans un adresse particulière:

$array[0] => première adresse mac trouvée
Sarray[1] => deuxième adresse mac trouvée


Tu peux ensuite disposer de ces variables comme tu l'entends

A+
A+
shaq
Niveau 4
Niveau 4
Messages : 59
Enregistré le : dim. 29 juil. 2007 13:04
Status : Hors ligne

Re: [..] Reconnaitre une chaine de caractères dans un blocnote

#20

Message par shaq »

Ah pardon !

Autant pour moi, en fait j'avais cru que l'adresse MAC était en fait dans un tableau : [0][0][1] ... et que la boucle lisait chaque case pour afficher l'adresse MAC en entière, je ne sais pas si tu arrives à me suivre.

Parce que moi je partait du principe qu'il n'y a théoriquement qu'une seule adresse mac dans le blocnote, mais je me suis encore mal exprimé. Donc en fait c'est encore plus facile que je ne le pensait.

Donc en fait l'adresse MAC est intégré dans la variable $array, et donc il ne me reste plus qu'à intégrer cette variable dans un clipput, mais il me semblait que ce n'était pas possible ...

Je vais faire quelques tests et je vous tiens au jus.
Répondre