Salut a tous,
je cherche a dev un bout de code qui me permettrais d'extraire des données d'un fichier texte a partir d'une liste et faire ressortir tout ca dans un tableau.
je m'explique,
j'ai, dans un fichier excel (IP.xls), les champs suivants :
- une adresse ip
- un numéro de carte SIM
| N°SIM | IP |
|12345678910| 172.30.0.1|
|22345678910| 172.30.0.2|
Un appareil utilisant une des cartes sim du fichier IP.XLS se connecte sur un serveur ftp pour déposer des fichiers,lorsqu'il se connecte, l'adresse IP de la SIM utilisée est loggée dans le fichier log.txt du serveur ftp.
ci dessous le détail du fichier log.txt (log du serveur FTP)
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> Connected on port 21, sending welcome message...
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> 220-FileZilla Server 0.9.60 beta
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> 220-written by Tim Kosse (tim.kosse@filezilla-project.org)
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> 220 Please visit https://filezilla-project.org/
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> AUTH TLS
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> 502 Explicit TLS authentication not allowed
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> AUTH SSL
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> 502 Explicit TLS authentication not allowed
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> USER toto
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> 331 Password required for toto
(000002) 09/12/2017 15:04:54 - (not logged in) (192.168.1.68)> PASS ****
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 230 Logged on
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> SYST
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 215 UNIX emulated by FileZilla
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> FEAT
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 211-Features:
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> MDTM
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> REST STREAM
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> SIZE
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> MLST type*;size*;modify*;
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> MLSD
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> UTF8
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> CLNT
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> MFMT
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> EPSV
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> EPRT
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 211 End
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> PWD
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 257 "/" is current directory.
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> TYPE I
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 200 Type set to I
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> PASV
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 227 Entering Passive Mode (192,168,1,68,216,1)
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> MLSD
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 150 Opening data channel for directory listing of "/"
(000002) 09/12/2017 15:04:54 - toto (192.168.1.68)> 226 Successfully transferred "/"
je cherche a lister dans un tableau la date et l'heure de la dernière connexion de chacune des IP du fichier IP.XLS.
pouvez vous m'indiquer comment faire ?
recherche de texte dans un fichier a partir d'une liste
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 1
- Messages : 10
- Enregistré le : ven. 03 févr. 2017 09:47
- Status : Hors ligne
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: recherche de texte dans un fichier a partir d'une liste
Ce bout de code extrait la date et l'heure de la ligne du texte qui mentionne à la fois l'IP voulue et "Logged on"
Le reste c'est de la mécanique, boucle For/Next, etc
Le reste c'est de la mécanique, boucle For/Next, etc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
- Niveau 1
- Messages : 10
- Enregistré le : ven. 03 févr. 2017 09:47
- Status : Hors ligne
Re: recherche de texte dans un fichier a partir d'une liste
Salut Mikell,
En exécutant ton bout de code, je retrouve bien la date et heure de connexion pour l'adresse ip déclarée par $ip = "192.168.1.68". c'est un bon début et celà réponds a ce que je cherche a faire.
par contre dans ton exemple ci dessous il faudrait renseigner une a une les adresses IP (300!?) pour savoir si elles ont communiquées avec le serveur FTP.
Comment je peux faire pour déclarer une variable qui irait directement chercher la liste des ip dans le fichier excel (ip.xls)?
et aussi, faire sortir le résultat sous forme de tableau ?
pour le moment je cherche sur le forum des exemples qui me permettrait de fabriquer ce script.
toute aide est la bienvenue
En exécutant ton bout de code, je retrouve bien la date et heure de connexion pour l'adresse ip déclarée par $ip = "192.168.1.68". c'est un bon début et celà réponds a ce que je cherche a faire.
par contre dans ton exemple ci dessous il faudrait renseigner une a une les adresses IP (300!?) pour savoir si elles ont communiquées avec le serveur FTP.
Comment je peux faire pour déclarer une variable qui irait directement chercher la liste des ip dans le fichier excel (ip.xls)?
et aussi, faire sortir le résultat sous forme de tableau ?
pour le moment je cherche sur le forum des exemples qui me permettrait de fabriquer ce script.
toute aide est la bienvenue
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: recherche de texte dans un fichier a partir d'une liste
Je suis parfaitement nul en Excel
Mais heureusement je dispose du fichier d'aide AutoIt, qui me dit que par exemple _Excel_RangeRead pourrait te sortir la liste des IP dans un tableau
et ensuite une boucle For/Next dans ce tableau en utilisant le code de mon post précédent devrait faire l'affaire
Mais heureusement je dispose du fichier d'aide AutoIt, qui me dit que par exemple _Excel_RangeRead pourrait te sortir la liste des IP dans un tableau
#include <Array.au3>
#include <Excel.au3>
Local $oAppl = _Excel_Open(false)
Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\IP.xls")
Local $aResult = _Excel_RangeRead($oWorkbook, Default, "B2:B3", 2)
_Excel_Close($oAppl)
_ArrayDisplay($aResult)
#include <Excel.au3>
Local $oAppl = _Excel_Open(false)
Local $oWorkbook = _Excel_BookOpen($oAppl, @ScriptDir & "\IP.xls")
Local $aResult = _Excel_RangeRead($oWorkbook, Default, "B2:B3", 2)
_Excel_Close($oAppl)
_ArrayDisplay($aResult)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
-
- Niveau 1
- Messages : 10
- Enregistré le : ven. 03 févr. 2017 09:47
- Status : Hors ligne
Re: recherche de texte dans un fichier a partir d'une liste
En fait je n'ai pas besoin de sortir la liste des IP dans un tableau puisque je la connait.
je voudrais juste a partir de cette liste d'IP faire une recherche dans le fichier de log et sortir le tout dans un tableau.
Liste IP > recherche des IP dans les logs > tableau avec date de derniere connexion pour chaque IP
de mon coté j'ai quand même avancé, voilà ce que j'ai fait:
mais bon ce script n'a pas vraiment de sens car il est possible de faire la même chose avec notepad++ par exemple ... de plus ,il faut se pogner les IP une a une.
je ne vois pas comment prendre les IP de mon fichier excel, parcourir le contenu du fichier de log et si on trouve l'IP (on a aussi la date et heure de la dernière connexion) on renseigne tout çà dans un tableau.
je voudrais juste a partir de cette liste d'IP faire une recherche dans le fichier de log et sortir le tout dans un tableau.
Liste IP > recherche des IP dans les logs > tableau avec date de derniere connexion pour chaque IP
de mon coté j'ai quand même avancé, voilà ce que j'ai fait:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Dernière Connexion au FTP", 414, 152, 192, 124)
Global $ListOsType = GUICtrlCreateCombo("Choisir l'ip", 104, 40, 145, 25)
Global $Go = GUICtrlCreateButton("rechercher", 152, 96, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Dim $OsType[321] = ["192.168.1.68", "172.30.0.1", "172.30.0.2"]
; On construit le string
Global $string = ""
For $i In $OsType
$string &= $i & "|"
Next
$string = StringTrimRight($string, 1)
GUICtrlSetData($ListOsType, $string)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Go
Go_List()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func Go_List()
local $Os = GuiCtrlRead($ListOsType)
$ip = $Os
$txt = FileRead("log.txt")
$a_logged = StringRegExp($txt, '(\d{2}/\d{2}/\d{4}\h\d{2}:\d{2}:\d{2}).+' & $ip & '.+Logged on', 3)
If IsArray($a_logged) Then
Msgbox(0,$ip, $a_logged[0])
Else
MsgBox( $txt, "Recherche dans les logs", "IP NON TROUVÉE.")
EndIf
EndFunc ;==>Go_List
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("Dernière Connexion au FTP", 414, 152, 192, 124)
Global $ListOsType = GUICtrlCreateCombo("Choisir l'ip", 104, 40, 145, 25)
Global $Go = GUICtrlCreateButton("rechercher", 152, 96, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
Dim $OsType[321] = ["192.168.1.68", "172.30.0.1", "172.30.0.2"]
; On construit le string
Global $string = ""
For $i In $OsType
$string &= $i & "|"
Next
$string = StringTrimRight($string, 1)
GUICtrlSetData($ListOsType, $string)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Go
Go_List()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Func Go_List()
local $Os = GuiCtrlRead($ListOsType)
$ip = $Os
$txt = FileRead("log.txt")
$a_logged = StringRegExp($txt, '(\d{2}/\d{2}/\d{4}\h\d{2}:\d{2}:\d{2}).+' & $ip & '.+Logged on', 3)
If IsArray($a_logged) Then
Msgbox(0,$ip, $a_logged[0])
Else
MsgBox( $txt, "Recherche dans les logs", "IP NON TROUVÉE.")
EndIf
EndFunc ;==>Go_List
je ne vois pas comment prendre les IP de mon fichier excel, parcourir le contenu du fichier de log et si on trouve l'IP (on a aussi la date et heure de la dernière connexion) on renseigne tout çà dans un tableau.
Re: recherche de texte dans un fichier a partir d'une liste
bonjour,
ci dessous une solution "incomplète"
attention aux fonction excel utilisée, j'ai fait quelques modif dans mon excel.au3, il se peut qu'il y ait des différences avec celui de base
ci dessous une solution "incomplète"
attention aux fonction excel utilisée, j'ai fait quelques modif dans mon excel.au3, il se peut qu'il y ait des différences avec celui de base
Code : Tout sélectionner
#include <Array.au3>
#include <Excel.au3>
Global $a_logged_Heures,$a_logged_IP
_Chargement_Log()
_Chargement_Profils_XLS()
For $i = 1 To ubound($a_logged_Heures)-1
For $j = 0 To ubound($varNPC)-1
If $varNPC[$j][1] = $a_logged_Heures[$i][1] Then
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :IP = ' & $varNPC[$j][1] & @tab & 'Heures Connexion : ' & $a_logged_Heures[$i][0] & @crlf) ;### Debug Console
;rajouter du code pour écrire dans un fichier excel
EndIf
Next
Next
Func _Chargement_Log()
$txt = FileRead("C:\Downloads\log.txt")
$a_logged_Heures = StringRegExp($txt, '(\d{2}\/\d{2}\/\d{4}\h\d{2}:\d{2}:\d{2}).+Logged on', 3) ; recup des heures
$a_logged_IP = StringRegExp($txt, '(\b(?:\d{1,3}\.){3}\d{1,3}\b).+Logged on', 3) ; récup des IPs
_ArrayColInsert($a_logged_Heures, 1) ; rajout d'une colonne dans la table pour Heures/Ip
For $i = 0 To ubound($a_logged_IP)-1
$a_logged_Heures[$i][1] = $a_logged_IP[$i]
Next
EndFunc
Func _Chargement_Profils_XLS()
If FileExists("C:\Downloads\IP.xls") Then
$sFilePath1 = "C:\Downloads\IP.xls"
Else
$sFilePath1 = FileOpenDialog("Ouvrir le fichier des IP", "C:\Downloads\", "Fichier Excel (*.xls?)", 1)
EndIf
If @error Then
MsgBox(4096, "", "aucun fichier sélectionné")
Exit
EndIf
;~ ===========
Local $timer_global=TimerInit()
Global $oAppl = _Excel_Open()
Global $oExcel = _Excel_BookOpen($oAppl, $sFilePath1, True, True)
Global $varNPC = _Excel_RangeRead($oExcel, "ip")
ConsoleWrite( "-> Chargé en : " & StringFormat( "%.2f seconds." ,TimerDiff($timer_global)/1000 )&@LF )
_Excel_BookClose($oExcel)
_Excel_Close($oAppl)
;~ ==============
EndFunc
-
- Niveau 1
- Messages : 10
- Enregistré le : ven. 03 févr. 2017 09:47
- Status : Hors ligne
Re: recherche de texte dans un fichier a partir d'une liste
Salut lpau63,
incomplète je confirmes, mais te remercie d'avoir bien voulu te pencher sur le sujet. il me semble avoir complété la partie manquante en me basant sur le bout de code de Mikell et l'aide (;rajouter du code pour écrire dans un fichier excel) Par contre n'ayant pas votre doigté (surtout votre XP) j'y suis allé comme un bourrin sur le code mais, ma foi je retrouve bien en sortie les données dans un fichier Excel.
Nous pouvons considérer le sujet comme clos.
néanmoins, je me dis que vu le temps que j'ai (vous aussi hein) passé a comprendre ce que je faisais je trouve dommage qu'a la fin du script le fichier ne soit pas enregistré directement dans un répertoire et tant qu'a faire que les données soit dédoublonnées.
c'est pas compliqué de dédoublonner le contenu de cellules avec Excel et de faire un enregistrer sous:
=> mais quand même !
En tout cas cela me sera bien pratique ce script !
incomplète je confirmes, mais te remercie d'avoir bien voulu te pencher sur le sujet. il me semble avoir complété la partie manquante en me basant sur le bout de code de Mikell et l'aide (;rajouter du code pour écrire dans un fichier excel) Par contre n'ayant pas votre doigté (surtout votre XP) j'y suis allé comme un bourrin sur le code mais, ma foi je retrouve bien en sortie les données dans un fichier Excel.
Nous pouvons considérer le sujet comme clos.
néanmoins, je me dis que vu le temps que j'ai (vous aussi hein) passé a comprendre ce que je faisais je trouve dommage qu'a la fin du script le fichier ne soit pas enregistré directement dans un répertoire et tant qu'a faire que les données soit dédoublonnées.
c'est pas compliqué de dédoublonner le contenu de cellules avec Excel et de faire un enregistrer sous:
=> mais quand même !
En tout cas cela me sera bien pratique ce script !
#include <Array.au3>
#include <Excel.au3>
#include <MsgBoxConstants.au3>
Global $a_logged_Heures,$a_logged_IP
_Chargement_Log()
_Chargement_Profils_XLS()
For $i = 1 To ubound($a_logged_Heures)-1
For $j = 0 To ubound($varNPC)-1
If $varNPC[$j][1] = $a_logged_Heures[$i][1] Then
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :IP = ' & $varNPC[$j][1] & @tab & 'Heures Connexion : ' & $a_logged_Heures[$i][0] & @crlf) ;### Debug Console
;rajouter du code pour écrire dans un fichier excel
EndIf
Next
Next
Func _Chargement_Log()
$txt = FileRead("C:\Downloads\log.txt")
$a_logged_Heures = StringRegExp($txt, '(\d{2}\/\d{2}\/\d{4}\h\d{2}:\d{2}:\d{2}).+Logged on', 3) ; recup des heures
$a_logged_IP = StringRegExp($txt, '(\b(?:\d{1,3}\.){3}\d{1,3}\b).+Logged on', 3) ; récup des IPs
_ArrayColInsert($a_logged_Heures, 1) ; rajout d'une colonne dans la table pour Heures/Ip
For $i = 0 To ubound($a_logged_IP)-1
$a_logged_Heures[$i][1] = $a_logged_IP[$i]
Next
EndFunc
Func _Chargement_Profils_XLS()
If FileExists("C:\Downloads\IP.xls") Then
$sFilePath1 = "C:\Downloads\IP.xls"
Else
$sFilePath1 = FileOpenDialog("Ouvrir le fichier des IP", "C:\Downloads\", "Fichier Excel (*.xls?)", 1)
EndIf
If @error Then
MsgBox(4096, "", "aucun fichier sélectionné")
Exit
EndIf
;~ ===========
Local $timer_global=TimerInit()
Global $oAppl = _Excel_Open()
Global $oExcel = _Excel_BookOpen($oAppl, $sFilePath1, True, True)
Global $varNPC = _Excel_RangeRead($oExcel, "ip")
ConsoleWrite( "-> Chargé en : " & StringFormat( "%.2f seconds." ,TimerDiff($timer_global)/1000 )&@LF )
_Excel_BookClose($oExcel)
_Excel_Close($oAppl)
;~ ==============
EndFunc
Local $oAppl = _Excel_Open()
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oWorkbook = _Excel_BookNew($oAppl)
If @error Then
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the new workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
_Excel_Close($oAppl)
Exit
EndIf
; ************************************************** ***************************
; Ecrit une chaîne avec un saut de ligne dans la feuille active du classeur actif
; ************************************************** ***************************
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $a_logged_Heures & $a_logged_IP)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "OOPS !", "Fuck :)." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox($MB_SYSTEMMODAL, "Generation du fichier", "Export termine.")
#include <Excel.au3>
#include <MsgBoxConstants.au3>
Global $a_logged_Heures,$a_logged_IP
_Chargement_Log()
_Chargement_Profils_XLS()
For $i = 1 To ubound($a_logged_Heures)-1
For $j = 0 To ubound($varNPC)-1
If $varNPC[$j][1] = $a_logged_Heures[$i][1] Then
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') :IP = ' & $varNPC[$j][1] & @tab & 'Heures Connexion : ' & $a_logged_Heures[$i][0] & @crlf) ;### Debug Console
;rajouter du code pour écrire dans un fichier excel
EndIf
Next
Next
Func _Chargement_Log()
$txt = FileRead("C:\Downloads\log.txt")
$a_logged_Heures = StringRegExp($txt, '(\d{2}\/\d{2}\/\d{4}\h\d{2}:\d{2}:\d{2}).+Logged on', 3) ; recup des heures
$a_logged_IP = StringRegExp($txt, '(\b(?:\d{1,3}\.){3}\d{1,3}\b).+Logged on', 3) ; récup des IPs
_ArrayColInsert($a_logged_Heures, 1) ; rajout d'une colonne dans la table pour Heures/Ip
For $i = 0 To ubound($a_logged_IP)-1
$a_logged_Heures[$i][1] = $a_logged_IP[$i]
Next
EndFunc
Func _Chargement_Profils_XLS()
If FileExists("C:\Downloads\IP.xls") Then
$sFilePath1 = "C:\Downloads\IP.xls"
Else
$sFilePath1 = FileOpenDialog("Ouvrir le fichier des IP", "C:\Downloads\", "Fichier Excel (*.xls?)", 1)
EndIf
If @error Then
MsgBox(4096, "", "aucun fichier sélectionné")
Exit
EndIf
;~ ===========
Local $timer_global=TimerInit()
Global $oAppl = _Excel_Open()
Global $oExcel = _Excel_BookOpen($oAppl, $sFilePath1, True, True)
Global $varNPC = _Excel_RangeRead($oExcel, "ip")
ConsoleWrite( "-> Chargé en : " & StringFormat( "%.2f seconds." ,TimerDiff($timer_global)/1000 )&@LF )
_Excel_BookClose($oExcel)
_Excel_Close($oAppl)
;~ ==============
EndFunc
Local $oAppl = _Excel_Open()
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
Local $oWorkbook = _Excel_BookNew($oAppl)
If @error Then
MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_RangeWrite Example", "Error creating the new workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
_Excel_Close($oAppl)
Exit
EndIf
; ************************************************** ***************************
; Ecrit une chaîne avec un saut de ligne dans la feuille active du classeur actif
; ************************************************** ***************************
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $a_logged_Heures & $a_logged_IP)
If @error Then Exit MsgBox($MB_SYSTEMMODAL, "OOPS !", "Fuck :)." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
MsgBox($MB_SYSTEMMODAL, "Generation du fichier", "Export termine.")