Page 1 sur 1
[R] Recherche dans un fichier LOG
Posté : mar. 12 avr. 2011 09:54
par richie6700
Bonjour à vous,
J'ai un petit problème que j'aurais aimé résoudre grâce à votre aide

. En fait, je souhaiterai faire une recherche dans plusieurs fichier log. Rechercher s'il y a le mot "error" et ensuite envoyé un mail.
Le script serait du style comme sa :
Si dans Xfichier il y a Xerror alors envoyé UN mail.
Comment puis je faire??
merci à vous.
PS : pour la fonction mail ne vous cassez pas la tête j'ai ma solution. J'aurai juste aimé faire la recherche
Re: [...] recherche dans un fichier log
Posté : mar. 12 avr. 2011 09:59
par sylvanie
Dans les grande lignes que pensez vous de l'idée suivante :
- Recherche des fichiers log via FileFindFirstFile et FileFindNextFile
- Lecture de ces derniers
- Détection de error via Stringinstr ou stringregexp
par contre après que voulez vous mettre dans ce mail :
- les noms des fichiers ?
- les lignes où error apparaît
- autres ?
Re: [..] Recherche dans un fichier LOG
Posté : mar. 12 avr. 2011 10:27
par zeshrek
tu n'as qu'a remplacé la vonction avec la msgbox par celle qui envoie le mail.
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <File.au3>
Dim $log
Global $logpath = "c:\"
Global $logfile = _FileListToArray($logpath, "*.log", 1)
Dim $cptr[$logfile[0]+1]
Global $msgerror = ""
For $j = 1 To $logfile[0]
_FileReadToArray($logpath & $logfile[$j], $log)
For $i = 1 To $log[0]
If StringInStr($log[$i], "error") Then $cptr[$j] = $cptr[$j] + 1
Next
Next
For $i = 0 To $logfile[0]
If $cptr[$i] Then
$msgerror = $msgerror & $cptr[$i] & " erreurs dans le fichier " & $logpath & $logfile[$i] & @CRLF
EndIf
Next
_fonction_envoi_mail($msgerror)
Exit
Func _fonction_envoi_mail($msg)
MsgBox(0, '', $msg)
EndFunc ;==>_fonction_envoi_mail
edit : code modifié, j'avais pas vu qu'il s'agissait de plusieurs ficheirs. là je t'ai fait un exemple ou tu as 6 fichiers 'en dur' mais rien ne t'empeche d'utiliser une fonction de recherche automatique pour générer le tableau $logfile.
Re-Edit : Bon, finalement j'ai fait aussi la recherche auto des ficheirs de log, tu as juste a mettre le chemin dans $logpath
Re: [..] Recherche dans un fichier LOG
Posté : mar. 12 avr. 2011 13:27
par richie6700
Ouaouaou merci ton script marche parfaitement.
Par contre serait il possible de m'expliquer certaine chose? Je ne comprend pas :
Dim $cptr[$logfile[0]+1]
$cptr[$j] = $cptr[$j] + 1
$cptr[$i]
Que fait ces trois choses??
Merci
Re: [..] Recherche dans un fichier LOG
Posté : mar. 12 avr. 2011 20:53
par zeshrek
Bah oui il marche mon script, je l'ai testé avant de le poster
Bon, alors tes questions :
- Pourquoi Dim $cptr[$logfile[0]+1] ?
bin, si tu comprend le script, c'est logique.
$Logfile[0] contient le nombre de fichiers .log trouvés. Le pb, c'est que comme les fichiers sont a partir de 1 et non de 0 comme on fait traditionellement les tableaux il faut initialiser $cptr a 1 de plus (ou alors il faudrait que je la ligne 13 termine par $cptr[$j-1] = $cptr[$j-1] + 1
c'est plus simple de dimensionner le tableau a 1 de plus, et de ne pas utiliser $cptr[0]
- Pourquoi $cptr[$j] = $cptr[$j] + 1 ?
pour chaque fichier je compte le nombre de fois ou il y a le nombre de 'error' dans le log, et je stocke ce nombre dans ce tableau. ca permet a ma msgbod de te dire pour chaque fichier combien il y a de 'error'
pourquoi $cptr[$i]
bin justement pour compter le nombre d'erreurs. comme il est a zero lors du dimensionnement du tableau au début (ligne 7) si il est a autre chose (le if de la ligne 18) c'est là que le message est composé (nom du fichier concerné et nombre d'erreurs)
Au final un script assez simple non ?
Re: [..] Recherche dans un fichier LOG
Posté : ven. 15 avr. 2011 14:18
par DimVar
Ce post va finir en cours Autoit
Bjr zeshrek,
J'ai moi aussi une question que je me pose depuis longtemps.
Quel est l'interet de differencier la declaration des variables avec Dim ou Global ?
Merci.
Re: [..] Recherche dans un fichier LOG
Posté : ven. 15 avr. 2011 14:58
par Jerome
Coucou,
C'est vraiment un cours alors
Pour la définition des variables, je conseil d'aller faire un tour
ici.
Jérôme
Re: [..] Recherche dans un fichier LOG
Posté : ven. 15 avr. 2011 15:16
par jchd
Global déclare une variable de portée ... globale, visible depuis sa déclaration indépendemment du contexte.
Dim déclare une variable ayant la portée du contexte où elle se trouve : fonction ou globale. Permet aussi de redéclarer une variable globale existant antérieurement.
Local déclare une variable limitée au contexte où elle se trouve.
Static (expérimental) déclare une variable statique, locale à une fonction mais ne recevant qu'une fois son initialisation et conservant la dernière valeur assignée après sortie de la fonction. Static n'est pas encore une fonctionnalité stable et n'est pas encore exempte de problèmes dans sa version actuelle. N'employer en production qu'en comprenant bien les soucis potentiels (voir Trac sur forum US).
On peut avoir besoin de préciser Const pour une constante ou Enum pour une énumération (possibilité malheureusement pas assez uilisée).
Tout cela se trouve dans l'aide.
EDIT: contrairement au post indiqué par Jérôme, AutoIt ne connaît pas la notion d'unité de code (include). Qu'une déclaration soit dans le code du fichier "principal" ou dans un include n'a strictement aucune incidence sur quoi que ce soit, en particulier aucune incidence sur la portée des variables. C'est une erreur d'interprétation trop courante (probablement due à l'influence de C et consort).
Re: [..] Recherche dans un fichier LOG
Posté : ven. 15 avr. 2011 20:50
par zeshrek
En complément au cours magistral de mes prédécesseurs, j'ajouterai ceci :
J'ai personnellement l'habitude de faire ainsi :
- Global ou Local selon que je les exploite dans tout le script ou juste dans une fonction.
- Global Const ou Local Const pour les constantes, cad 'variables' dont la valeur ne change pas pendant l'execution du programme comme $NomAppli="toto", $Version="1.0" ou $Pi=3.14
(je n'utilise pas static, dont j'ignorais jusqu'a l'existance).
- Dim pour les tableaux, c'est un vieil héritage du Basic ou les tableaux devaient etre déclarés.
Comme j'utilise la déclaration obligatoire dans mes scripts, je trouve pratique de savoir dès la ligne de déclaration si je me trouve avec une variable une constante ou un tableau, de portée locale ou globale.
Ca optimise peut etre pas le code ou le fonctionnement du script mais ca gagne pas mal en lisibilité...
Re: [..] Recherche dans un fichier LOG
Posté : lun. 18 avr. 2011 16:57
par richie6700
Rebonjour,
Merci pour vos réponse, c'est cool.
Je met en résolu
@ plus