[..] Trouver une ligne depuis un mot présent dans cette lign

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#21

Message par davzell »

ça fonctionne vraiment bien merci.

une dernière petite question (enfin j'espère)

Code : Tout sélectionner

$file = FileOpen("Logfile.log", 0)
$line = FileReadLine($file)
$results = StringRegExp($line, "ID=\s?[1-9]\d{8,9}\b", 3)
_ArrayDisplay($results)
j'ai fait une gui avec un bouton que j'actionne pour lire dans le log et chercher "ID=" m'extraire les nombre et les affiche dans une "edit box"

si il n'y a aucune ligne dans le log avec "ID=" le programme se ferme.

je voulais donc faire une boucle pour que quand ID n'existe pas retourner au début du script afin de ré-actionner le bouton.

je voulais le faire avec $results < 0 mais ça ne passe pas.

il faudrait que j'utilise quoi du coup?
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#22

Message par jguinch »

$results = StringRegExp($line, "ID=\s?[1-9]\d{8,9}\b", 3) retourne dans $results soit un tableau (avec les résultats), soit la valeur -1 et @error = 0/1/2.
Donc pour savoir s'il y a des résultats, tu peux simplement tester si $results est bien un tableau.
If IsArray($results) Then ...
Le nombre de résultats (s'il y en a) est le nombre de lignes du tableau, soit UBound($results)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#23

Message par davzell »

ouai le IF isarray marche bien mais si justement s'en est un

quand mon fichier de log ou si le résultat de ID= n'est pas celui attendu le programme se ferme.

en gros j'ai une gui qui au lancement appel une fonction de ce genre

Code : Tout sélectionner

Func Example()
    
   if IsArray ($results [0]) then ...
   Else
   MsgBox("erreur", "pas d'id dans le log")
   EndIf
    
EndFunc  
si c'est bien une "Array" tout va, bien par contre si ça n'en est pas une, la gui se ferme et ne continue pas le reste du script
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#24

Message par jguinch »

davzell, t'as été un peu radin sur le code, là.. :o
Comment veux-tu qu'on t'aide si tu ne nous montres qu'un extrait de ton code ?
"docteur, je viens vous voir parce que j'ai mal" :P
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
davzell
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 26 sept. 2013 14:15
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#25

Message par davzell »

oui je l'avais pas sous la main et je me dis qu'il doit y avoir un truc bidon pour que ca ne marche pas les trois fois je l'utilise :)

donc en gros çà donne ça (j'ai viré ce qui étais inutile)

Code : Tout sélectionner

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=qstv.exe
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Res_Comment=version 1.0.0.0
#AutoIt3Wrapper_Res_Fileversion=1.0.0.11
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=version 1.0.0.0
#AutoIt3Wrapper_Res_Language=1036
#AutoIt3Wrapper_Run_Obfuscator=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <String.au3>
#include <Array.au3>
#include <Constants.au3>
#include <WinNet.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Lauch", 622, 210, 192, 124)
$Input1 = GUICtrlCreateInput("", 32, 29, 249, 21)
$Input3 = GUICtrlCreateInput("Administrateur", 32, 75, 249, 21)
$Input2 = GUICtrlCreateInput("", 32, 125, 249, 21, $ES_PASSWORD)
$Label1 = GUICtrlCreateLabel("Taper le mot de passe administrateur", 32, 105, 249, 17)
$Label2 = GUICtrlCreateLabel("Nom du serveur ou pc à débloquer", 32, 10, 177, 17)
$Label3 = GUICtrlCreateLabel("Nom d'utilisateur", 32, 55, 249, 21)
$Button1 = GUICtrlCreateButton("Lancer tv", 32, 160, 100, 41)
$Button2 = GUICtrlCreateButton("refresh ID", 180, 160, 100, 41)
$myedit = GUICtrlCreateEdit("ID poste distant" & @CRLF, 296, 10, 315, 185, $ES_AUTOVSCROLL + $WS_VSCROLL)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###


Call ("debut")


While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg

 Case $GUI_EVENT_CLOSE

    Exit

         Case $Button1
            MsgBox(4096, "test", "test")

   EndSwitch
WEnd



Func debut()


Global $pathgu = "c:\param.txt"
GlobaL $file = FileOpen($pathgu, 0)
Global $line = FileRead($file)
Global $paramgu = StringRegExp($line, "Numero=[1-9]\d{1,7}\b", 3)
Global $sString = StringTrimLeft($paramgu[0], 7)


If IsArray($paramgu[0]) Then

GUICtrlSetData($Input1, '$' & $sString & '$', 1)

Else
;~ MsgBox(4096, "ok:", "continue")


EndIf

EndFunc
 


donc si le fichier param.txt n'est pas présent ou si ce qu'il y a après "Numero= " n'est pas ce que je recherche la gui se ferme
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Trouver une ligne depuis un mot présent dans cette

#26

Message par jguinch »

Tout d'abord, il faut éviter de déclarer des variables globales à l'intérieur des fonctions, mais plutôt en début de script.
Ensuite, la ligne $paramgu = StringRegExp($line, "Numero=[1-9]\d{1,7}\b", 3) retourne un tableau (ou non)
Dans ton test If IsArray, il faut tester avec $paramgu et non pas $paramgu[0] :
► Afficher le texte
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre