Page 2 sur 2

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

Posté : mar. 01 avr. 2014 10:48
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?

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

Posté : mar. 01 avr. 2014 12:07
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)

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

Posté : mer. 02 avr. 2014 18:49
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

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

Posté : mer. 02 avr. 2014 22:41
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

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

Posté : jeu. 03 avr. 2014 11:58
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

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

Posté : jeu. 03 avr. 2014 13:07
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